diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..41a1470 Binary files /dev/null and b/.DS_Store differ diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..8e14639 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,49 @@ +name: MythX CLI + +on: [push, pull_request] + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.6, 3.7, 3.8, pypy3] + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install Python dependencies + uses: py-actions/py-dependency-install@v2 + with: + path: "requirements_dev.txt" + - name: Setup tox for GH actions + run: pip install tox-gh-actions + - name: Test with tox + run: make test + - name: Upload to Coveralls + run: coveralls + env: + COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} + + deploy: + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') + needs: test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: "3.7" + - name: Install Python dependencies + uses: py-actions/py-dependency-install@v2 + with: + path: "requirements_dev.txt" + - name: Build and publish + env: + TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: make release diff --git a/.gitignore b/.gitignore index 0d0cdd5..cc2abb8 100644 --- a/.gitignore +++ b/.gitignore @@ -101,4 +101,6 @@ ENV/ # mypy .mypy_cache/ .idea/ -.vscode/ \ No newline at end of file +.vscode/ + +.mythx.yml diff --git a/Makefile b/Makefile index e70e618..c26668c 100644 --- a/Makefile +++ b/Makefile @@ -51,14 +51,14 @@ clean-test: ## remove test and coverage artifacts rm -fr .pytest_cache format: - isort -rc mythx_cli tests - black -t py37 mythx_cli tests + isort mythx_cli tests + black -t py38 mythx_cli tests lint: ## check style with flake8 flake8 mythx_cli tests test: ## run tests quickly with the default Python - py.test -vv + pytest --cov-report html --cov-report term --cov mythx_cli tests/ test-all: ## run tests on every Python version with tox tox @@ -89,4 +89,5 @@ dist: clean ## builds source and wheel package ls -l dist install: clean ## install the package to the active Python's site-packages - python setup.py install + pip install -r requirements_dev.txt + pip install -e . diff --git a/docs/mythx_cli.fuzz.rst b/docs/mythx_cli.fuzz.rst new file mode 100644 index 0000000..e44b1c0 --- /dev/null +++ b/docs/mythx_cli.fuzz.rst @@ -0,0 +1,37 @@ +mythx\_cli.fuzz package +======================= + +Submodules +---------- + +mythx\_cli.fuzz.run module +-------------------------- + +.. automodule:: mythx_cli.fuzz.run + :members: + :undoc-members: + :show-inheritance: + +mythx\_cli.fuzz.setup module +---------------------------- + +.. automodule:: mythx_cli.fuzz.setup + :members: + :undoc-members: + :show-inheritance: + +mythx\_cli.fuzz.arm module +---------------------------- + +.. automodule:: mythx_cli.fuzz.arm + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: mythx_cli.fuzz + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/mythx_cli.project.rst b/docs/mythx_cli.project.rst new file mode 100644 index 0000000..aef30b5 --- /dev/null +++ b/docs/mythx_cli.project.rst @@ -0,0 +1,45 @@ +mythx\_cli.project package +========================== + +Submodules +---------- + +mythx\_cli.project.delete module +-------------------------------- + +.. automodule:: mythx_cli.project.delete + :members: + :undoc-members: + :show-inheritance: + +mythx\_cli.project.details module +--------------------------------- + +.. automodule:: mythx_cli.project.details + :members: + :undoc-members: + :show-inheritance: + +mythx\_cli.project.list module +------------------------------ + +.. automodule:: mythx_cli.project.list + :members: + :undoc-members: + :show-inheritance: + +mythx\_cli.project.open module +------------------------------ + +.. automodule:: mythx_cli.project.open + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: mythx_cli.project + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/mythx_cli.rst b/docs/mythx_cli.rst index 03f3295..8cbc28c 100644 --- a/docs/mythx_cli.rst +++ b/docs/mythx_cli.rst @@ -10,7 +10,9 @@ Subpackages mythx_cli.analysis mythx_cli.analyze mythx_cli.formatter + mythx_cli.fuzz mythx_cli.group + mythx_cli.project mythx_cli.render mythx_cli.version diff --git a/mythx_cli/analysis/list.py b/mythx_cli/analysis/list.py index c81352e..6921af7 100644 --- a/mythx_cli/analysis/list.py +++ b/mythx_cli/analysis/list.py @@ -44,5 +44,5 @@ def analysis_list(ctx, number: int) -> None: # trim result to desired result number LOGGER.debug(f"Got {len(result.analyses)} analyses, trimming to {number}") - result = AnalysisListResponse(analyses=result[:number], total=resp.total) + result = AnalysisListResponse(analyses=result.analyses[:number], total=resp.total) write_or_print(FORMAT_RESOLVER[ctx["fmt"]].format_analysis_list(result)) diff --git a/mythx_cli/analysis/report.py b/mythx_cli/analysis/report.py index 4a7241f..6ab574a 100644 --- a/mythx_cli/analysis/report.py +++ b/mythx_cli/analysis/report.py @@ -4,6 +4,7 @@ import click from mythx_models.response import AnalysisInputResponse, DetectedIssuesResponse +from pythx import Client from mythx_cli.formatter import FORMAT_RESOLVER, util from mythx_cli.formatter.base import BaseFormatter @@ -54,9 +55,10 @@ def analysis_report( """ issues_list: List[ - Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]] + Tuple[str, DetectedIssuesResponse, Optional[AnalysisInputResponse]] ] = [] formatter: BaseFormatter = FORMAT_RESOLVER[ctx["fmt"]] + ctx["client"]: Client for uuid in uuids: LOGGER.debug(f"{uuid}: Fetching report") resp = ctx["client"].report(uuid) @@ -74,8 +76,7 @@ def analysis_report( swc_blacklist=swc_blacklist, swc_whitelist=swc_whitelist, ) - resp.uuid = uuid - issues_list.append((resp, inp)) + issues_list.append((uuid, resp, inp)) LOGGER.debug( f"{uuid}: Printing report for {len(issues_list)} issue items with sort key \"{ctx['table_sort_key']}\"" diff --git a/mythx_cli/analysis/status.py b/mythx_cli/analysis/status.py index 8a1fc6d..168f91e 100644 --- a/mythx_cli/analysis/status.py +++ b/mythx_cli/analysis/status.py @@ -22,6 +22,6 @@ def analysis_status(ctx, uuids: List[str]) -> None: """ for uuid in uuids: LOGGER.debug(f"{uuid}: Fetching status") - resp = ctx["client"].status(uuid) + resp = ctx["client"].analysis_status(uuid) LOGGER.debug(f"{uuid}: Printing status information") write_or_print(FORMAT_RESOLVER[ctx["fmt"]].format_analysis_status(resp)) diff --git a/mythx_cli/analyze/command.py b/mythx_cli/analyze/command.py index cfa019b..ae06863 100644 --- a/mythx_cli/analyze/command.py +++ b/mythx_cli/analyze/command.py @@ -206,8 +206,8 @@ def analyze( if create_group: resp: GroupCreationResponse = ctx["client"].create_group(group_name=group_name) - group_id = resp.group.identifier - group_name = resp.group.name or "" + group_id = resp.identifier + group_name = resp.name or "" if group_id: # associate all following analyses to the passed or newly created group @@ -308,7 +308,7 @@ def analyze( return issues_list: List[ - Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]] + Tuple[str, DetectedIssuesResponse, Optional[AnalysisInputResponse]] ] = [] formatter: BaseFormatter = FORMAT_RESOLVER[ctx["fmt"]] for uuid in uuids: @@ -331,8 +331,7 @@ def analyze( swc_whitelist=swc_whitelist, ) # extend response with job UUID to keep formatter logic isolated - resp.uuid = uuid - issues_list.append((resp, inp)) + issues_list.append((uuid, resp, inp)) LOGGER.debug( f"Printing report for {len(issues_list)} issue items with sort key \"{ctx['table_sort_key']}\"" diff --git a/mythx_cli/analyze/scribble.py b/mythx_cli/analyze/scribble.py index 6dc7ad4..8b5cdb1 100644 --- a/mythx_cli/analyze/scribble.py +++ b/mythx_cli/analyze/scribble.py @@ -1,4 +1,5 @@ import json +import os import subprocess import sys from collections import defaultdict @@ -6,6 +7,10 @@ import click +from mythx_cli.util import sol_files_by_directory + +SCRIBBLE_ARMING_META_FILE = ".scribble-arming.meta.json" + class ScribbleMixin: """A mixing for job objects to instrument code with Scribble.""" @@ -27,6 +32,7 @@ def _handle_scribble_error(process: subprocess.CompletedProcess) -> None: click.echo(process.stderr.decode()) click.echo("=====STDOUT=====") click.echo(process.stdout.decode()) + sys.exit(process.returncode) def instrument_truffle_artifacts( @@ -49,6 +55,7 @@ def instrument_truffle_artifacts( "source": file_data["source"], "id": payload["source_list"].index(filename), } + stdin["contracts"][filename][payload["contract_name"]] = { "evm": { "bytecode": { @@ -72,6 +79,7 @@ def instrument_truffle_artifacts( ) self._handle_scribble_error(process) + return json.loads(process.stdout.decode()) def instrument_solc_file( @@ -91,5 +99,101 @@ def instrument_solc_file( stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) + self._handle_scribble_error(process) + return json.loads(process.stdout.decode()) + + @staticmethod + def instrument_solc_in_place( + file_list: List[str], + scribble_path: str, + remappings: List[str] = None, + solc_version: str = None, + ) -> None: + """Instrument a collection of Solidity files in place. + + :param file_list: List of paths to Solidity files to instrument + :param scribble_path: The path to the scribble executable + :param remappings: List of import remappings to pass to solc + :param solc_version: The solc compiler version to use + """ + command = [ + scribble_path, + "--arm", + "--output-mode=files", + f"--instrumentation-metadata-file={SCRIBBLE_ARMING_META_FILE}", + ] + + if remappings: + command.append(f"--path-remapping={';'.join(remappings)}") + + if solc_version: + command.append(f"--compiler-version={solc_version}") + + # Scribble doesnt currently support directories as inputs + # so we create a list of all solidity files inside each of the targets + # and submit that to Scribble. + + sol_files = [] + for file in file_list: + target_files = sol_files_by_directory(file) + sol_files = [*sol_files, *target_files] + + command.extend(sol_files) + + process = subprocess.run( + command, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + ScribbleMixin._handle_scribble_error(process) + + @staticmethod + def disarm_solc_in_place( + file_list: List[str], + scribble_path: str, + remappings: List[str] = None, + solc_version: str = None, + ) -> None: + """Un-instrument a collection of Solidity files in place. + + :param file_list: List of paths to Solidity files to instrument + :param scribble_path: The path to the scribble executable + :param remappings: List of import remappings to pass to solc + :param solc_version: The solc compiler version to use + """ + command = [scribble_path, "--disarm"] + + if remappings: + command.append(f"--path-remapping={';'.join(remappings)}") + + if solc_version: + command.append(f"--compiler-version={solc_version}") + + # Scribble doesnt currently support directories as inputs + # so we create a list of all solidity files inside each of the targets + # and submit that to Scribble. + + sol_files = [] + for file in file_list: + target_files = sol_files_by_directory(file) + sol_files = [*sol_files, *target_files] + + command.extend(sol_files) + + if os.path.isfile(SCRIBBLE_ARMING_META_FILE): + os.remove(SCRIBBLE_ARMING_META_FILE) + + process = subprocess.run( + command, stdout=subprocess.PIPE, stderr=subprocess.PIPE + ) + + ScribbleMixin._handle_scribble_error(process) + + @staticmethod + def get_arming_instr_meta(): + if os.path.exists(SCRIBBLE_ARMING_META_FILE): + with open(SCRIBBLE_ARMING_META_FILE, "r") as f: + return json.load(f) + + return None diff --git a/mythx_cli/analyze/solidity.py b/mythx_cli/analyze/solidity.py index bade412..c401891 100644 --- a/mythx_cli/analyze/solidity.py +++ b/mythx_cli/analyze/solidity.py @@ -201,7 +201,7 @@ def generate_payloads( :param enable_scribble: Enable instrumentation with scribble :param scribble_path: Optional path to the scribble executable """ - + remappings = remappings or [] with open(self.target) as f: source = f.read() diff --git a/mythx_cli/cli.py b/mythx_cli/cli.py index ae9cde4..ce495bf 100644 --- a/mythx_cli/cli.py +++ b/mythx_cli/cli.py @@ -14,10 +14,14 @@ from mythx_cli.analysis.status import analysis_status from mythx_cli.analyze.command import analyze from mythx_cli.formatter import FORMAT_RESOLVER +from mythx_cli.fuzz.arm import fuzz_arm +from mythx_cli.fuzz.disarm import fuzz_disarm +from mythx_cli.fuzz.run import fuzz_run from mythx_cli.group.close import group_close from mythx_cli.group.list import group_list from mythx_cli.group.open import group_open from mythx_cli.group.status import group_status +from mythx_cli.project import project_list from mythx_cli.render.command import render from mythx_cli.util import update_context from mythx_cli.version.command import version @@ -160,9 +164,10 @@ def cli( else: parsed_config = {"analyze": {}} - # The analyze context is updated separately in the command + # The analyze/fuzz context is updated separately in the command # implementation ctx.obj["analyze"] = parsed_config.get("analyze", {}) + ctx.obj["fuzz"] = parsed_config.get("fuzz", {}) # overwrite context with top-level YAML config keys if necessary update_context(ctx.obj, "ci", parsed_config, "ci", False) @@ -189,7 +194,8 @@ def cli( ctx.obj["client"] = Client( username=username, password=password, middlewares=[toolname_mw] ) - else: + elif "fuzz" not in sys.argv: + # fuzz subcommand is exempt from API auth raise click.UsageError( ( "The trial user has been deprecated. You can still use the MythX CLI for free " @@ -205,6 +211,23 @@ def cli( cli.add_command(version) +@cli.group() +def project() -> None: + """Create, modify, and view analysis projects. + + \f + + This subcommand holds all project-related actions, such as creating, + listing, and managing projects, as well as fetching the status of one + or more groups inside a project. + """ + pass + + +LOGGER.debug("Registering project commands") +project.add_command(project_list) + + @cli.group() def group() -> None: """Create, modify, and view analysis groups. @@ -244,5 +267,24 @@ def analysis() -> None: analysis.add_command(analysis_report) +@cli.group() +def fuzz() -> None: + """Interact with the MythX FaaS solution. + + \f + + This subcommand holds all fuzz-related actions, such as initializing + new fuzzing campaigns, preparing projects for FaaS submission, and + launching new campaigns. + """ + pass + + +LOGGER.debug("Registering fuzz commands") +fuzz.add_command(fuzz_run) +fuzz.add_command(fuzz_arm) +fuzz.add_command(fuzz_disarm) + + if __name__ == "__main__": sys.exit(cli()) # pragma: no cover diff --git a/mythx_cli/formatter/base.py b/mythx_cli/formatter/base.py index a54f668..e653c14 100644 --- a/mythx_cli/formatter/base.py +++ b/mythx_cli/formatter/base.py @@ -34,7 +34,7 @@ def format_analysis_status(resp: AnalysisStatusResponse) -> str: @abc.abstractmethod def format_detected_issues( issues_list: List[ - Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]] + Tuple[str, DetectedIssuesResponse, Optional[AnalysisInputResponse]] ], **kwargs, ) -> str: diff --git a/mythx_cli/formatter/json.py b/mythx_cli/formatter/json.py index 2b64b71..950497a 100644 --- a/mythx_cli/formatter/json.py +++ b/mythx_cli/formatter/json.py @@ -10,6 +10,7 @@ DetectedIssuesResponse, GroupListResponse, GroupStatusResponse, + ProjectListResponse, VersionResponse, ) @@ -29,43 +30,49 @@ class JSONFormatter(BaseFormatter): def format_group_status(resp: GroupStatusResponse) -> str: """Format a group status response as compressed JSON.""" - return resp.to_json() + return resp.json(by_alias=True) + + @staticmethod + def format_project_list(resp: ProjectListResponse): + """Format a project list response as pretty-printed JSON.""" + + return resp.json(by_alias=True) @staticmethod def format_group_list(resp: GroupListResponse) -> str: """Format a group list response as compressed JSON.""" - return resp.to_json() + return resp.json(by_alias=True) @staticmethod def format_analysis_list(resp: AnalysisListResponse) -> str: """Format an analysis list response as compressed JSON.""" - return resp.to_json() + return resp.json(by_alias=True) @staticmethod def format_analysis_status(resp: AnalysisStatusResponse) -> str: """Format an analysis status response as compressed JSON.""" - return resp.to_json() + return resp.json(by_alias=True) @staticmethod def format_detected_issues( issues_list: List[ - Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]] + Tuple[str, DetectedIssuesResponse, Optional[AnalysisInputResponse]] ], **kwargs, ) -> str: """Format an issue report response as compressed JSON.""" - output = [resp.to_dict(as_list=True) for resp, _ in issues_list] + output = [resp.dict(by_alias=True) for _, resp, _ in issues_list] return json.dumps(output) @staticmethod def format_version(resp: VersionResponse) -> str: """Format a version response as compressed JSON.""" - return resp.to_json() + return resp.json(by_alias=True) class PrettyJSONFormatter(BaseFormatter): @@ -85,9 +92,15 @@ def _print_as_json(obj, report_mode=False) -> str: json_args = {"indent": 2, "sort_keys": True} if report_mode: return json.dumps( - [resp.to_dict(as_list=True) for resp, _ in obj], **json_args + [resp.dict(by_alias=True) for _, resp, _ in obj], **json_args ) - return json.dumps(obj.to_dict(), **json_args) + return json.dumps(obj.dict(by_alias=True), **json_args) + + @staticmethod + def format_project_list(resp: ProjectListResponse): + """Format a project list response as pretty-printed JSON.""" + + return PrettyJSONFormatter._print_as_json(resp) @staticmethod def format_group_status(resp: GroupStatusResponse) -> str: @@ -116,7 +129,7 @@ def format_analysis_status(obj: AnalysisStatusResponse) -> str: @staticmethod def format_detected_issues( issues_list: List[ - Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]] + Tuple[str, DetectedIssuesResponse, Optional[AnalysisInputResponse]] ], **kwargs, ) -> str: diff --git a/mythx_cli/formatter/simple_stdout.py b/mythx_cli/formatter/simple_stdout.py index ac6c058..aced448 100644 --- a/mythx_cli/formatter/simple_stdout.py +++ b/mythx_cli/formatter/simple_stdout.py @@ -10,6 +10,7 @@ DetectedIssuesResponse, GroupListResponse, GroupStatusResponse, + ProjectListResponse, VersionResponse, ) @@ -33,7 +34,7 @@ def format_analysis_list(resp: AnalysisListResponse) -> str: """Format an analysis list response to a simple text representation.""" res = [] - for analysis in resp: + for analysis in resp.analyses: res.append("UUID: {}".format(analysis.uuid)) res.append("Submitted at: {}".format(analysis.submitted_at)) res.append("Status: {}".format(analysis.status)) @@ -46,10 +47,10 @@ def format_group_status(resp: GroupStatusResponse) -> str: """Format a group status response to a simple text representation.""" res = [ - "ID: {}".format(resp.group.identifier), - "Name: {}".format(resp.group.name or ""), - "Created on: {}".format(resp.group.created_at), - "Status: {}".format(resp.group.status), + "ID: {}".format(resp.identifier), + "Name: {}".format(resp.name or ""), + "Created on: {}".format(resp.created_at), + "Status: {}".format(resp.status), "", ] return "\n".join(res) @@ -60,7 +61,7 @@ def format_group_list(resp: GroupListResponse) -> str: representation.""" res = [] - for group in resp: + for group in resp.groups: res.append("ID: {}".format(group.identifier)) res.append("Name: {}".format(group.name or "")) res.append("Created on: {}".format(group.created_at)) @@ -69,6 +70,21 @@ def format_group_list(resp: GroupListResponse) -> str: return "\n".join(res) + @staticmethod + def format_project_list(resp: ProjectListResponse) -> str: + """Format an analysis group response to a simple text + representation.""" + + res = [] + for project in resp.projects: + res.append("ID: {}".format(project.id)) + res.append("Name: {}".format(project.name or "")) + res.append("Created on: {}".format(project.created)) + res.append("Modified: {}".format(project.modified)) + res.append("") + + return "\n".join(res) + @staticmethod def format_analysis_status(resp: AnalysisStatusResponse) -> str: """Format an analysis status response to a simple text @@ -85,7 +101,7 @@ def format_analysis_status(resp: AnalysisStatusResponse) -> str: @staticmethod def format_detected_issues( issues_list: List[ - Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]] + Tuple[str, DetectedIssuesResponse, Optional[AnalysisInputResponse]] ], **kwargs, ) -> str: @@ -113,10 +129,10 @@ def format_version(resp: VersionResponse) -> str: return "\n".join( [ - "API: {}".format(resp.api_version), - "Harvey: {}".format(resp.harvey_version), - "Maru: {}".format(resp.maru_version), - "Mythril: {}".format(resp.mythril_version), - "Hashed: {}".format(resp.hashed_version), + "API: {}".format(resp.api), + "Harvey: {}".format(resp.harvey), + "Maru: {}".format(resp.maru), + "Mythril: {}".format(resp.mythril), + "Hashed: {}".format(resp.hash), ] ) diff --git a/mythx_cli/formatter/tabular.py b/mythx_cli/formatter/tabular.py index 98c93f5..4b79e46 100644 --- a/mythx_cli/formatter/tabular.py +++ b/mythx_cli/formatter/tabular.py @@ -12,13 +12,14 @@ DetectedIssuesResponse, GroupListResponse, GroupStatusResponse, + ProjectListResponse, VersionResponse, ) from tabulate import tabulate from mythx_cli.formatter.base import BaseFormatter from mythx_cli.formatter.util import generate_dashboard_link -from mythx_cli.util import index_by_filename +from mythx_cli.util import SourceMap, index_by_filename class TabularFormatter(BaseFormatter): @@ -43,6 +44,16 @@ def format_analysis_list(resp: AnalysisListResponse) -> str: ] return tabulate(data, tablefmt="fancy_grid") + @staticmethod + def format_project_list(resp: ProjectListResponse) -> str: + """Format an analysis group response to a tabular representation.""" + + data = [ + (project.id, project.name, project.group_count, project.modified) + for project in resp.projects + ] + return tabulate(data, tablefmt="fancy_grid") + @staticmethod def format_group_list(resp: GroupListResponse) -> str: """Format an analysis group response to a tabular representation.""" @@ -52,7 +63,7 @@ def format_group_list(resp: GroupListResponse) -> str: group.identifier, group.status, ",".join([basename(x) for x in group.main_source_files]), - group.created_at.strftime("%Y-%m-%d %H:%M:%S%z"), + group.created_at, ) for group in resp.groups ] @@ -64,42 +75,37 @@ def format_group_status(resp: GroupStatusResponse) -> str: data = ( ( - ("ID", resp.group.identifier), - ("Name", resp.group.name or ""), - ( - "Creation Date", - resp.group.created_at.strftime("%Y-%m-%d %H:%M:%S%z"), - ), - ("Created By", resp.group.created_by), - ("Progress", "{}/100".format(resp.group.progress)), + ("ID", resp.identifier), + ("Name", resp.name or ""), + ("Creation Date", resp.created_at), + ("Created By", resp.created_by), + ("Progress", "{}/100".format(resp.progress)), ) + tuple( - zip_longest( - ("Main Sources",), resp.group.main_source_files, fillvalue="" - ) + zip_longest(("Main Sources",), resp.main_source_files, fillvalue="") ) + ( - ("Status", resp.group.status.title()), - ("Queued Analyses", resp.group.analysis_statistics.queued or 0), - ("Running Analyses", resp.group.analysis_statistics.running or 0), - ("Failed Analyses", resp.group.analysis_statistics.failed or 0), - ("Finished Analyses", resp.group.analysis_statistics.finished or 0), - ("Total Analyses", resp.group.analysis_statistics.total or 0), + ("Status", resp.status.title()), + ("Queued Analyses", resp.analysis_statistics.queued or 0), + ("Running Analyses", resp.analysis_statistics.running or 0), + ("Failed Analyses", resp.analysis_statistics.failed or 0), + ("Finished Analyses", resp.analysis_statistics.finished or 0), + ("Total Analyses", resp.analysis_statistics.total or 0), ( "High Severity Vulnerabilities", - resp.group.vulnerability_statistics.high or 0, + resp.vulnerability_statistics.high or 0, ), ( "Medium Severity Vulnerabilities", - resp.group.vulnerability_statistics.medium or 0, + resp.vulnerability_statistics.medium or 0, ), ( "Low Severity Vulnerabilities", - resp.group.vulnerability_statistics.low or 0, + resp.vulnerability_statistics.low or 0, ), ( "Unknown Severity Vulnerabilities", - resp.group.vulnerability_statistics.none or 0, + resp.vulnerability_statistics.none or 0, ), ) ) @@ -109,13 +115,28 @@ def format_group_status(resp: GroupStatusResponse) -> str: def format_analysis_status(resp: AnalysisStatusResponse) -> str: """Format an analysis status response to a tabular representation.""" - data = ((k, v) for k, v in resp.analysis.to_dict().items()) + data = ( + ("UUID", resp.uuid), + ("API Version", resp.api_version), + ("Mythril Version", resp.mythril_version), + ("Harvey Version", resp.harvey_version), + ("Maru Version", resp.maru_version), + ("Queue Time", resp.queue_time), + ("Run Time", resp.run_time), + ("Status", resp.status), + ("Submitted At", resp.submitted_at), + ("Submitted By", resp.submitted_by), + ("Tool Name", resp.client_tool_name), + ("Group ID", resp.group_id), + ("Group Name", resp.group_name), + ("Analysis Mode", resp.analysis_mode), + ) return tabulate(data, tablefmt="fancy_grid") @staticmethod def format_detected_issues( issues_list: List[ - Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]] + Tuple[str, DetectedIssuesResponse, Optional[AnalysisInputResponse]] ], **kwargs, ) -> str: @@ -167,5 +188,5 @@ def format_detected_issues( def format_version(resp: VersionResponse) -> str: """Format a version response to a tabular representation.""" - data = ((k.title(), v) for k, v in resp.to_dict().items()) + data = ((k.title(), v) for k, v in resp.dict(by_alias=True).items()) return tabulate(data, tablefmt="fancy_grid") diff --git a/mythx_cli/formatter/util.py b/mythx_cli/formatter/util.py index 2d3396a..6b697ec 100644 --- a/mythx_cli/formatter/util.py +++ b/mythx_cli/formatter/util.py @@ -3,15 +3,9 @@ from typing import List, Union import click -from mythx_models.response import DetectedIssuesResponse, Severity +from mythx_models.response import DetectedIssuesResponse, Issue, Severity -SEVERITY_ORDER = ( - Severity.UNKNOWN, - Severity.NONE, - Severity.LOW, - Severity.MEDIUM, - Severity.HIGH, -) +SEVERITY_ORDER = ("unknown", "none", "low", "medium", "high") def get_source_location_by_offset(source: str, offset: int) -> int: @@ -99,17 +93,17 @@ def filter_report( :param swc_whitelist: A comma-separated list of SWC IDs to include :return: The filtered issue report """ - - min_severity = Severity(min_severity.title()) if min_severity else Severity.UNKNOWN + min_severity = min_severity.lower() if min_severity else SEVERITY_ORDER[0] swc_blacklist = normalize_swc_list(swc_blacklist) swc_whitelist = normalize_swc_list(swc_whitelist) new_issues = [] for report in resp.issue_reports: for issue in report.issues: - is_severe = SEVERITY_ORDER.index(issue.severity) >= SEVERITY_ORDER.index( - min_severity - ) + issue: Issue + is_severe = SEVERITY_ORDER.index( + issue.severity.lower() + ) >= SEVERITY_ORDER.index(min_severity.lower()) not_blacklisted = issue.swc_id not in swc_blacklist is_whitelisted = issue.swc_id in swc_whitelist if swc_whitelist else True diff --git a/mythx_cli/fuzz/__init__.py b/mythx_cli/fuzz/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/mythx_cli/fuzz/arm.py b/mythx_cli/fuzz/arm.py new file mode 100644 index 0000000..dc0ac21 --- /dev/null +++ b/mythx_cli/fuzz/arm.py @@ -0,0 +1,70 @@ +import logging +from typing import Tuple + +import click + +from mythx_cli.analyze.scribble import ScribbleMixin + +LOGGER = logging.getLogger("mythx-cli") + + +@click.command("arm") +@click.argument("targets", default=None, nargs=-1, required=False) +@click.option( + "--scribble-path", + type=click.Path(exists=True), + default=None, + help="Path to a custom scribble executable (beta)", +) +@click.option( + "--remap-import", + type=click.STRING, + multiple=True, + help="Add a solc compilation import remapping", + default=None, +) +@click.option( + "--solc-version", + type=click.STRING, + help="The solc version to use for compilation", + default=None, +) +@click.pass_obj +def fuzz_arm( + ctx, targets, scribble_path: str, remap_import: Tuple[str], solc_version: str +) -> None: + """Prepare the target files for FaaS submission. + + \f + + This will run :code:`scribble --arm ...` on the given target files, + instrumenting their code in-place with scribble. Additionally, + solc parameters can be passed to get compilation to work. + + The following YAML context options are supported: + - analyze + - targets + - scribble-path + - remappings + - solc + + :param ctx: The context, mainly used to get YAML params + :param targets: Arguments passed to the `analyze` subcommand + :param scribble_path: Optional path to the scribble executable + :param remap_import: List of import remappings to pass on to solc + :param solc_version: The solc version to use for Solidity compilation + """ + analyze_config = ctx.get("analyze") + solc_version = solc_version or analyze_config.get("solc") or None + remap_import = remap_import or analyze_config.get("remappings") or [] + scribble_path = scribble_path or analyze_config.get("scribble-path") or "scribble" + + fuzz_config = ctx.get("fuzz") + targets = targets or fuzz_config.get("targets") or None + + ScribbleMixin.instrument_solc_in_place( + file_list=targets, + scribble_path=scribble_path, + remappings=remap_import, + solc_version=solc_version, + ) diff --git a/mythx_cli/fuzz/disarm.py b/mythx_cli/fuzz/disarm.py new file mode 100644 index 0000000..cbeac08 --- /dev/null +++ b/mythx_cli/fuzz/disarm.py @@ -0,0 +1,70 @@ +import logging +from typing import Tuple + +import click + +from mythx_cli.analyze.scribble import ScribbleMixin + +LOGGER = logging.getLogger("mythx-cli") + + +@click.command("disarm") +@click.argument("targets", default=None, nargs=-1, required=False) +@click.option( + "--scribble-path", + type=click.Path(exists=True), + default=None, + help="Path to a custom scribble executable (beta)", +) +@click.option( + "--remap-import", + type=click.STRING, + multiple=True, + help="Add a solc compilation import remapping", + default=None, +) +@click.option( + "--solc-version", + type=click.STRING, + help="The solc version to use for compilation", + default=None, +) +@click.pass_obj +def fuzz_disarm( + ctx, targets, scribble_path: str, remap_import: Tuple[str], solc_version: str +) -> None: + """Revert the target files to their original, un-instrumented state. + + \f + + This will run :code:`scribble --disarm ...` on the given target files, + reverting their code in-place to their original state using scribble. + Additionally, solc parameters can be passed to get compilation to work. + + The following YAML context options are supported: + - analyze + - targets + - scribble-path + - remappings + - solc + + :param ctx: The context, mainly used to get YAML params + :param targets: Arguments passed to the `analyze` subcommand + :param scribble_path: Optional path to the scribble executable + :param remap_import: List of import remappings to pass on to solc + :param solc_version: The solc version to use for Solidity compilation + """ + analyze_config = ctx.get("analyze") + solc_version = solc_version or analyze_config.get("solc") or None + remap_import = remap_import or analyze_config.get("remappings") or [] + scribble_path = scribble_path or analyze_config.get("scribble-path") or "scribble" + + fuzz_config = ctx.get("fuzz") + targets = targets or fuzz_config.get("targets") or None + + ScribbleMixin.disarm_solc_in_place( + file_list=targets, + scribble_path=scribble_path, + remappings=remap_import, + solc_version=solc_version, + ) diff --git a/mythx_cli/fuzz/exceptions.py b/mythx_cli/fuzz/exceptions.py new file mode 100644 index 0000000..d50be52 --- /dev/null +++ b/mythx_cli/fuzz/exceptions.py @@ -0,0 +1,98 @@ +# +# FaaS Client Errors +# + + +class FaaSError(Exception): + """Base class for FaaS module exceptions""" + + def __init__(self, message, detail=None): + self.message = message + self.detail = detail + + pass + + +# HTTP Requests + + +class RequestError(FaaSError): + """Exception raised for errors with the http connection to the faas""" + + pass + + +class BadStatusCode(RequestError): + """Exception raised for http responses with a bad status code""" + + pass + + +# Data Formats + + +class PayloadError(FaaSError): + """Exception raised for errors extracting data from the provided payload""" + + pass + + +class ScribbleMetaError(FaaSError): + """Exception raised for errors getting the Scribble Metadata""" + + pass + + +class CreateFaaSCampaignError(FaaSError): + """Exception raised for errors creating the FaaS Campaign""" + + pass + + +# +# Brownie Job Errors +# + + +class BrownieError(Exception): + """Base class for Brownie Job exceptions""" + + def __init__(self, message): + self.message = message + + pass + + +class BuildArtifactsError(BrownieError): + """Exception raised for errors fetching the build artifacts""" + + pass + + +class SourceError(BrownieError): + """Exception raised for errors the source and AST of a source file""" + + pass + + +class PayloadError(BrownieError): + """Exception raised for errors assembling the FaaS payload""" + + pass + + +# +# RPC client +# + + +class RPCCallError(FaaSError): + """Exception raised when there is an error calling the RPC endpoint""" + + pass + + +class SeedStateError(FaaSError): + """Exception raised when there is an error generating the seed state""" + + pass diff --git a/mythx_cli/fuzz/faas.py b/mythx_cli/fuzz/faas.py new file mode 100644 index 0000000..0073e36 --- /dev/null +++ b/mythx_cli/fuzz/faas.py @@ -0,0 +1,119 @@ +import json +import logging +import random +import string + +import requests +from requests.structures import CaseInsensitiveDict + +from mythx_cli.analyze.scribble import ScribbleMixin + +from .exceptions import ( + BadStatusCode, + CreateFaaSCampaignError, + PayloadError, + RequestError, + ScribbleMetaError, +) + +LOGGER = logging.getLogger("mythx-cli") + + +class FaasClient: + """ A client to interact with the FaaS API. + + This object receives solidity compilation artifacts and a Harvey Seed state, generates a payload that the faas + API can consume and submits it, also triggering the start of a Campaign. + """ + + def __init__(self, faas_url, campaign_name_prefix, project_type, api_key): + self.faas_url = faas_url + self.campaign_name_prefix = campaign_name_prefix + self.project_type = project_type + self.api_key = api_key + self.headers = CaseInsensitiveDict() + self.headers["Content-Type"] = "application/json" + self.headers["Authorization"] = "Bearer " + str(self.api_key) + + def generate_campaign_name(self): + """Return a random name with the provided prefix self.campaign_name_prefix.""" + letters = string.ascii_lowercase + random_string = "".join(random.choice(letters) for i in range(5)) + return str(self.campaign_name_prefix + "_" + random_string) + + def start_faas_campaign(self, payload): + """Make HTTP request to the faas""" + try: + req_url = f"{self.faas_url}/api/campaigns/?start_immediately=true" + response = requests.post(req_url, json=payload, headers=self.headers) + response_data = response.json() + if response.status_code != requests.codes.ok: + print(response.text) + raise BadStatusCode( + f"Got http status code {response.status_code} for request {req_url}", + detail=response_data["detail"], + ) + return response_data["id"] + except Exception as e: + if isinstance(e, BadStatusCode): + raise e + raise RequestError(f"Error starting FaaS campaign.") + + def create_faas_campaign(self, campaign_data, seed_state, dry_run=False): + """Submit a campaign to the FaaS and start that campaign. + + This function takes a FaaS payload and makes an HTTP request to the Faas backend, which + then creates and starts a campaign. The campaign is started because of the `start_immediately=true` query + parameter. + + This will send the following data to the FaaS for analysis: + + * :code:`name` + * :code:`parameters` A dict of Harvey configuration options + * :code:`sources` A dict containing source files code and AST + * :code:`contracts` Solidity artifacts of the target smart contracts + * :code:`corpus` Seed state of the target contract. Usually the list of transactions that took place on the + local ganache (or equivalent) instance. + + :return: Campaign ID + """ + try: + try: + api_payload_params = { + "discovery-probability-threshold": seed_state[ + "discovery-probability-threshold" + ], + "num-cores": seed_state["num-cores"], + "assertion-checking-mode": seed_state["assertion-checking-mode"], + } + + api_payload = { + "parameters": api_payload_params, + "name": self.generate_campaign_name(), + "corpus": seed_state["analysis-setup"], + "sources": campaign_data.payload["sources"], + "contracts": campaign_data.payload["contracts"], + } + except Exception: + raise PayloadError(f"Error extracting data from payload") + + try: + instr_meta = ScribbleMixin.get_arming_instr_meta() + + if instr_meta is not None: + api_payload["instrumentationMetadata"] = instr_meta + except Exception as e: + raise ScribbleMetaError( + f"Error getting Scribble arming metadata." + ) from e + + if dry_run: + print("Printing output \n --------") + print(f"{json.dumps(api_payload)}") + print("End of output \n --------") + return "campaign not started due to --dry-run option" + campaign_id = self.start_faas_campaign(api_payload) + + return campaign_id + except (PayloadError, ScribbleMetaError) as e: + raise CreateFaaSCampaignError(f"Error creating the FaaS campaign:") diff --git a/mythx_cli/fuzz/ide/__init__.py b/mythx_cli/fuzz/ide/__init__.py new file mode 100644 index 0000000..e22e88b --- /dev/null +++ b/mythx_cli/fuzz/ide/__init__.py @@ -0,0 +1,2 @@ +from mythx_cli.fuzz.ide.brownie import BrownieJob +from mythx_cli.fuzz.ide.generic import IDEArtifacts diff --git a/mythx_cli/fuzz/ide/brownie.py b/mythx_cli/fuzz/ide/brownie.py new file mode 100644 index 0000000..8c698c4 --- /dev/null +++ b/mythx_cli/fuzz/ide/brownie.py @@ -0,0 +1,136 @@ +import json +import logging +from pathlib import Path +from typing import Dict, List + +from mythx_cli.fuzz.exceptions import BuildArtifactsError +from mythx_cli.fuzz.ide.generic import IDEArtifacts, JobBuilder + +from ...util import sol_files_by_directory, get_content_from_file + +LOGGER = logging.getLogger("mythx-cli") + + +class BrownieArtifacts(IDEArtifacts): + def __init__(self, build_dir=None, targets=None, map_to_original_source=False): + self._include = [] + if targets: + include = [] + for target in targets: + include.extend(sol_files_by_directory(target)) + self._include = include + + self._build_dir = build_dir or Path("./build/contracts") + build_files_by_source_file = self._get_build_artifacts(self._build_dir) + + self._contracts, self._sources = self.fetch_data(build_files_by_source_file, map_to_original_source) + + @property + def contracts(self): + return self._contracts + + @property + def sources(self): + return self._sources + + def fetch_data(self, build_files_by_source_file, map_to_original_source=False): + result_contracts = {} + result_sources = {} + for source_file, contracts in build_files_by_source_file.items(): + if source_file not in self._include: + continue + result_contracts[source_file] = [] + for contract in contracts: + # We get the build items from brownie and rename them into the properties used by the FaaS + try: + result_contracts[source_file] += [ + { + "sourcePaths": contract["allSourcePaths"], + "deployedSourceMap": contract["deployedSourceMap"], + "deployedBytecode": contract["deployedBytecode"], + "sourceMap": contract["sourceMap"], + "bytecode": contract["bytecode"], + "contractName": contract["contractName"], + "mainSourceFile": contract["sourcePath"], + } + ] + except KeyError as e: + raise BuildArtifactsError( + f"Build artifact did not contain expected key. Contract: {contract}: \n{e}" + ) + + for file_index, source_file_dep in contract["allSourcePaths"].items(): + if source_file_dep in result_sources.keys(): + continue + + if source_file_dep not in build_files_by_source_file: + LOGGER.debug(f"{source_file} not found.") + continue + + # We can select any dict on the build_files_by_source_file[source_file] array + # because the .source and .ast values will be the same in all. + target_file = build_files_by_source_file[source_file_dep][0] + result_sources[source_file_dep] = { + "fileIndex": file_index, + "source": target_file["source"], + "ast": target_file["ast"], + } + + if map_to_original_source and Path(source_file_dep+".original").is_file(): + # we check if the current source file has a non instrumented version + # if it does, we include that one as the source code + result_sources[source_file_dep]["source"] = get_content_from_file(source_file_dep+".original") + return result_contracts, result_sources + + @staticmethod + def _get_build_artifacts(build_dir) -> Dict: + """Build indexes of Brownie build artifacts. + + This function starts by loading the contents from the Brownie build artifacts json, found in the /build + folder, which contain the following data: + + * :code: `allSourcePaths` + * :code: `deployedSourceMap` + * :code: `deployedBytecode` + * :code: `sourceMap` + * :code: `bytecode` + * :code: `contractName` + * :code: `sourcePath` + + It then stores that data in two separate dictionaires, build_files and build_files_by_source_file. The first + is indexed by the compilation artifact file name (the json found in /build/*) and the second is indexed by the + source file (.sol) found in the .sourcePath property of the json. + """ + build_files_by_source_file = {} + + build_dir = Path(build_dir) + + if not build_dir.is_dir(): + raise BuildArtifactsError("Build directory doesn't exist") + + for child in build_dir.glob("**/*"): + if not child.is_file(): + continue + if not child.name.endswith(".json"): + continue + + data = json.loads(child.read_text("utf-8")) + source_path = data["sourcePath"] + + if source_path not in build_files_by_source_file: + # initialize the array of contracts with a list + build_files_by_source_file[source_path] = [] + + build_files_by_source_file[source_path].append(data) + + return build_files_by_source_file + + +class BrownieJob: + def __init__(self, target: List[str], build_dir: Path, map_to_original_source: bool): + artifacts = BrownieArtifacts(build_dir, targets=target, map_to_original_source=map_to_original_source) + self._jb = JobBuilder(artifacts) + self.payload = None + + def generate_payload(self): + self.payload = self._jb.payload() diff --git a/mythx_cli/fuzz/ide/generic.py b/mythx_cli/fuzz/ide/generic.py new file mode 100644 index 0000000..00159e6 --- /dev/null +++ b/mythx_cli/fuzz/ide/generic.py @@ -0,0 +1,47 @@ +from abc import ABC, abstractmethod +from typing import Dict + + +class IDEArtifacts(ABC): + @property + @abstractmethod + def contracts(self) -> Dict: + """ Returns sources + sources = { + "filename": [ + { + "bytecode": <>, + ... + "deployedBytecode": <> + } + ] + } + """ + pass + + @property + @abstractmethod + def sources(self) -> Dict: + """ Returns sources + sources = { + "filename": { + "ast": <>, + "source: "" + } + } + """ + pass + + +class JobBuilder: + def __init__(self, artifacts: IDEArtifacts): + self._artifacts = artifacts + + def payload(self): + sources = self._artifacts.sources + contracts = [ + c + for contracts_for_file in self._artifacts.contracts.values() + for c in contracts_for_file + ] + return {"contracts": contracts, "sources": sources} diff --git a/mythx_cli/fuzz/ide/hardhat.py b/mythx_cli/fuzz/ide/hardhat.py new file mode 100644 index 0000000..eeebc49 --- /dev/null +++ b/mythx_cli/fuzz/ide/hardhat.py @@ -0,0 +1,115 @@ +import json +from os.path import commonpath, relpath +from pathlib import Path +from typing import List + +from mythx_cli.fuzz.exceptions import BuildArtifactsError +from mythx_cli.fuzz.ide.generic import IDEArtifacts, JobBuilder + +from ...util import sol_files_by_directory, get_content_from_file + + +class HardhatArtifacts(IDEArtifacts): + def __init__(self, build_dir=None, targets=None, map_to_original_source=False): + self._include = [] + if targets: + include = [] + for target in targets: + include.extend(sol_files_by_directory(target)) + self._include = include + self._build_dir = Path(build_dir).absolute() or Path("./artifacts").absolute() + self._contracts, self._sources = self.fetch_data(map_to_original_source) + + @property + def contracts(self): + return self._contracts + + @property + def sources(self): + return self._sources + + def fetch_data(self, map_to_original_source=False): + result_contracts = {} + result_sources = {} + + for file_path in self._include: + cp = commonpath([self._build_dir, file_path]) + relative_file_path = relpath(file_path, cp) + + if relative_file_path in result_contracts: + continue + + file_name = Path(file_path).stem + file_artifact_path: Path = self._build_dir.joinpath( + relative_file_path + ).joinpath(f"{file_name}.json") + file_debug_path: Path = self._build_dir.joinpath( + relative_file_path + ).joinpath(f"{file_name}.dbg.json") + if not file_artifact_path.exists() or not file_debug_path.exists(): + raise BuildArtifactsError("Could not find target artifacts") + + with file_artifact_path.open("r") as file: + file_artifact = json.load(file) + with file_debug_path.open("r") as file: + file_debug_artifact = json.load(file) + build_info_name = Path(file_debug_artifact["buildInfo"]).name + with self._build_dir.joinpath(f"build-info/{build_info_name}").open( + "r" + ) as file: + build_info = json.load(file) + + result_contracts[relative_file_path] = [] + + contracts = build_info["output"]["contracts"][relative_file_path] + + for contract, data in contracts.items(): + if data["evm"]["bytecode"]["object"] == "": + continue + result_contracts[relative_file_path] += [ + { + "sourcePaths": { + i: k + for i, k in enumerate( + build_info["output"]["contracts"].keys() + ) + }, + "deployedSourceMap": data["evm"]["deployedBytecode"][ + "sourceMap" + ], + "deployedBytecode": data["evm"]["deployedBytecode"]["object"], + "sourceMap": data["evm"]["bytecode"]["sourceMap"], + "bytecode": data["evm"]["bytecode"]["object"], + "contractName": file_artifact["contractName"], + "mainSourceFile": file_artifact["sourceName"], + } + ] + + for source_file_dep, data in build_info["output"]["sources"].items(): + if source_file_dep in result_sources.keys(): + continue + + result_sources[source_file_dep] = { + "fileIndex": data["id"], + "source": build_info["input"]["sources"][source_file_dep][ + "content" + ], + "ast": data["ast"], + } + + if map_to_original_source and Path(source_file_dep+".original").is_file(): + # we check if the current source file has a non instrumented version + # if it does, we include that one as the source code + result_sources[source_file_dep]["source"] = get_content_from_file(source_file_dep+".original") + + return result_contracts, result_sources + + +class HardhatJob: + def __init__(self, target: List[str], build_dir: Path, map_to_original_source: bool): + artifacts = HardhatArtifacts(build_dir, targets=target, map_to_original_source=map_to_original_source) + self._jb = JobBuilder(artifacts) + self.payload = None + + def generate_payload(self): + self.payload = self._jb.payload() diff --git a/mythx_cli/fuzz/rpc.py b/mythx_cli/fuzz/rpc.py new file mode 100644 index 0000000..ee76b5d --- /dev/null +++ b/mythx_cli/fuzz/rpc.py @@ -0,0 +1,118 @@ +import logging +from typing import Optional + +import click +import requests +from requests import RequestException + +from .exceptions import RPCCallError + +LOGGER = logging.getLogger("mythx-cli") + +headers = {"Content-Type": "application/json"} +time_limit_seconds = 3000 +NUM_BLOCKS_UPPER_LIMIT = 9999 + + +class RPCClient: + def __init__(self, rpc_url: str, number_of_cores: int): + self.rpc_url = rpc_url + self.number_of_cores = number_of_cores + + def call(self, method: str, params: str): + """Make an rpc call to the RPC endpoint + + :return: Result property of the RPC response + """ + try: + payload = ( + '{"jsonrpc":"2.0","method":"' + + method + + '","params":' + + params + + ',"id":1}' + ) + response = ( + requests.request("POST", self.rpc_url, headers=headers, data=payload) + ).json() + return response["result"] + except RequestException as e: + raise RPCCallError( + f"HTTP error calling RPC method {method} with parameters: {params}" + f"\nAre you sure the RPC is running at {self.rpc_url}?" + ) + + def contract_exists(self, contract_address): + return self.call("eth_getCode", '["' + contract_address + '","latest"]') + + def get_block(self, latest: bool = False, block_number: int = -1): + block_value = "latest" if latest else str(block_number) + if not latest: + block_value = hex(block_number) + + block = self.call("eth_getBlockByNumber", '["' + block_value + '", true]') + return block + + def get_all_blocks(self): + """ Get all blocks from the node running at rpc_url + + Raises an exception if the number of blocks + exceeds 10000 as it is likely a user error who passed the wrong + RPC address. + """ + latest_block = self.get_block(latest=True) + if not latest_block: + return [] + + num_of_blocks = int(latest_block["number"], 16) + 1 + if num_of_blocks > NUM_BLOCKS_UPPER_LIMIT: + raise click.exceptions.UsageError( + "Number of blocks existing on the ethereum node running at" + + str(self.rpc_url) + + "can not exceed 10000. Did you pass the correct RPC url?" + ) + blocks = [] + for i in range(0, num_of_blocks, 1): + blocks.append(self.get_block(block_number=i)) + return blocks + + def get_seed_state( + self, address: str, other_addresses: [str], corpus_target: Optional[str] = None + ): + seed_state = { + "time-limit-secs": time_limit_seconds, + "discovery-probability-threshold": 0.0, + "assertion-checking-mode": 1, + "emit-mythx-report": True, + "num-cores": self.number_of_cores, + } + """Get a seed state for the target contract to be used by Harvey""" + if corpus_target: + return dict({**seed_state, "analysis-setup": {"target": corpus_target}}) + + try: + blocks = self.get_all_blocks() + processed_transactions = [] + for block in blocks: + for transaction in block["transactions"]: + for key, value in dict(transaction).items(): + if value is None: + transaction[key] = "" + processed_transactions.append(transaction) + setup = dict( + { + "address-under-test": address, + "steps": processed_transactions, + "other-addresses-under-test": other_addresses, + } + ) + return dict({**seed_state, "analysis-setup": setup}) + except Exception as e: + LOGGER.warning(f"Could not generate seed state for address: {address}") + raise click.exceptions.UsageError( + ( + "Unable to generate the seed state for address" + + str(address) + + "Are you sure you passed the correct contract address?" + ) + ) from e diff --git a/mythx_cli/fuzz/run.py b/mythx_cli/fuzz/run.py new file mode 100644 index 0000000..711bc40 --- /dev/null +++ b/mythx_cli/fuzz/run.py @@ -0,0 +1,233 @@ +import logging +import os +import traceback +from enum import Enum +from pathlib import Path + +import click + +from mythx_cli.fuzz.ide.brownie import BrownieJob +from mythx_cli.fuzz.ide.hardhat import HardhatJob + +from .exceptions import BadStatusCode, RPCCallError +from .faas import FaasClient +from .rpc import RPCClient + +LOGGER = logging.getLogger("mythx-cli") + +headers = {"Content-Type": "application/json"} + +time_limit_seconds = 3000 + + +class IDE(Enum): + BROWNIE = "brownie" + HARDHAT = "hardhat" + TRUFFLE = "truffle" + SOLIDITY = "solidity" + + +def determine_ide() -> IDE: + root_dir = Path.cwd().absolute() + files = list(os.walk(root_dir))[0][2] + if "brownie-config.yaml" in files: + return IDE.BROWNIE + if "hardhat.config.ts" in files: + return IDE.HARDHAT + if "hardhat.config.js" in files: + return IDE.HARDHAT + if "truffle-config.js" in files: + return IDE.TRUFFLE + return IDE.SOLIDITY + + +@click.command("run") +@click.argument("target", default=None, nargs=-1, required=False) +@click.option( + "-a", "--address", type=click.STRING, help="Address of the main contract to analyze" +) +@click.option( + "-m", + "--more-addresses", + type=click.STRING, + help="Addresses of other contracts to analyze, separated by commas", +) +@click.option( + "-c", + "--corpus-target", + type=click.STRING, + help="Project UUID, Campaign UUID or Corpus UUID to reuse the corpus from. " + "In case of a project, corpus from the project's latest submitted campaign will be used", + default=None, + required=False, +) +@click.option( + "-s", + "--map-to-original-source", + is_flag=True, + default=False, + help="Map the analyses results to the original source code, instead of the instrumented one. " + "This is meant to be used with Scribble.", +) + +@click.option( + "--dry-run", + is_flag=True, + default=False, + help="Outputs the data to be sent to the FaaS API without making the request.", +) + +@click.option( + "-k", + "--api-key", + type=click.STRING, + help="API key, can be created on the FaaS Dashboard. ", + default=None, + required=False, +) +@click.pass_obj +def fuzz_run(ctx, address, more_addresses, corpus_target, map_to_original_source, dry_run, api_key, target): + # read YAML config params from ctx dict, e.g. ganache rpc url + # Introduce a separate `fuzz` section in the YAML file + + # construct seed state from ganache + + # construct the FaaS campaign object + # helpful method: mythx_cli/analyze/solidity.py:SolidityJob.generate_payloads + # NOTE: This currently patches link placeholders in the creation + # bytecode with the zero address. If we need to submit bytecode from + # solc compilation, we need to find a way to replace these with the Ganache + # instance's addresses. Preferably we pull all of this data from Ganache + # itself and just enrich the payload with source and AST data from the + # SolidityJob payload list + + # submit the FaaS payload, do error handling + + # print FaaS dashboard url pointing to campaign + analyze_config = ctx.get("fuzz") + + default_config = { + "rpc_url": "http://localhost:7545", + "faas_url": "http://localhost:8080", + "harvey_num_cores": 2, + "campaign_name_prefix": "untitled", + "map_to_original_source": False, + } + config_options = analyze_config.keys() + # Mandatory config parameters verification + if "build_directory" not in config_options: + raise click.exceptions.UsageError( + "build_directory not found on .mythx.yml config file" + "\nYou need to provide your project's build directory in the .mythx.yml config file" + ) + if "deployed_contract_address" not in config_options: + raise click.exceptions.UsageError( + "deployed_contract_address not found on .mythx.yml config file." + "\nYou need to provide the address where your main contract is deployed on the .mythx.yml" + ) + if not target and "targets" not in config_options: + raise click.exceptions.UsageError( + "Target not provided. You need to provide a target as the last parameter of the fuzz run command." + "\nYou can also set the target on the `fuzz` key of your .mythx.yml config file." + "\nSee https://mythx-cli.readthedocs.io/en/latest/advanced-usage.html#configuration-using-mythx-yml" + " for more information." + ) + if not target: + target = analyze_config["targets"] + if not map_to_original_source: + map_to_original_source = ( + analyze_config["map_to_original_source"] + if "map_to_original_source" in config_options + else default_config["map_to_original_source"] + ) + if not api_key: + api_key = ( + analyze_config["api_key"] + if "api_key" in config_options + else None + ) + # Optional config parameters + # Here we parse the config parameters from the config file and use defaults for non available values + contract_address = analyze_config["deployed_contract_address"] + rpc_url = ( + analyze_config["rpc_url"] + if "rpc_url" in config_options + else default_config["rpc_url"] + ) + faas_url = ( + analyze_config["faas_url"] + if "faas_url" in config_options + else default_config["faas_url"] + ) + number_of_cores = ( + analyze_config["number_of_cores"] + if "number_of_cores" in config_options + else default_config["harvey_num_cores"] + ) + campaign_name_prefix = ( + analyze_config["campaign_name_prefix"] + if "campaign_name_prefix" in config_options + else default_config["campaign_name_prefix"] + ) + + if more_addresses is None: + other_addresses = [] + else: + other_addresses = more_addresses.split(",") + + _corpus_target = corpus_target or analyze_config.get("corpus_target", None) + + rpc_client = RPCClient(rpc_url, number_of_cores) + if not _corpus_target: + try: + contract_code_response = rpc_client.contract_exists(contract_address) + except RPCCallError as e: + raise click.exceptions.UsageError(f"RPC endpoint." f"\n{e}") + + if not contract_code_response: + LOGGER.warning(f"Contract code not found") + raise click.exceptions.ClickException( + f"Unable to find a contract deployed at {contract_address}." + ) + seed_state = rpc_client.get_seed_state( + contract_address, other_addresses, _corpus_target + ) + + ide = determine_ide() + + if ide == IDE.BROWNIE: + artifacts = BrownieJob(target, analyze_config["build_directory"], map_to_original_source=map_to_original_source) + artifacts.generate_payload() + elif ide == IDE.HARDHAT: + artifacts = HardhatJob(target, analyze_config["build_directory"], map_to_original_source=map_to_original_source) + artifacts.generate_payload() + elif ide == IDE.TRUFFLE: + raise click.exceptions.UsageError( + f"Projects using Truffle IDE is not supported right now" + ) + else: + raise click.exceptions.UsageError( + f"Projects using plain solidity files is not supported right now" + ) + + faas_client = FaasClient( + faas_url=faas_url, campaign_name_prefix=campaign_name_prefix, project_type=ide, api_key=api_key + ) + try: + campaign_id = faas_client.create_faas_campaign( + campaign_data=artifacts, seed_state=seed_state, dry_run=dry_run + ) + click.echo( + "You can view campaign here: " + faas_url + "/campaigns/" + str(campaign_id) + ) + except BadStatusCode as e: + raise click.exceptions.UsageError( + f"Campaign submission error. Detail - {e.detail}" + ) + except Exception as e: + LOGGER.warning( + f"Could not submit campaign to the FaaS\n{traceback.format_exc()}" + ) + raise click.exceptions.UsageError( + f"Unable to submit the campaign to the faas. Are you sure the service is running on {faas_url} ?" + ) diff --git a/mythx_cli/group/close.py b/mythx_cli/group/close.py index b15f10d..5ebf7ed 100644 --- a/mythx_cli/group/close.py +++ b/mythx_cli/group/close.py @@ -25,7 +25,5 @@ def group_close(ctx, identifiers: List[str]) -> None: LOGGER.debug(f"Closing group for ID {identifier}") resp: GroupCreationResponse = ctx["client"].seal_group(group_id=identifier) write_or_print( - "Closed group with ID {} and name '{}'".format( - resp.group.identifier, resp.group.name - ) + "Closed group with ID {} and name '{}'".format(resp.identifier, resp.name) ) diff --git a/mythx_cli/group/list.py b/mythx_cli/group/list.py index 24a6465..4834323 100644 --- a/mythx_cli/group/list.py +++ b/mythx_cli/group/list.py @@ -46,5 +46,5 @@ def group_list(ctx, number: int) -> None: # trim result to desired result number LOGGER.debug(f"Got {len(result.groups)} analyses, trimming to {number}") - result = GroupListResponse(groups=result[:number], total=resp.total) + result = GroupListResponse(groups=result.groups[:number], total=resp.total) write_or_print(FORMAT_RESOLVER[ctx["fmt"]].format_group_list(result)) diff --git a/mythx_cli/group/open.py b/mythx_cli/group/open.py index 87cccd5..f049f57 100644 --- a/mythx_cli/group/open.py +++ b/mythx_cli/group/open.py @@ -23,7 +23,5 @@ def group_open(ctx, name: str) -> None: LOGGER.debug(f"Opening group with name {name}") resp: GroupCreationResponse = ctx["client"].create_group(group_name=name) write_or_print( - "Opened group with ID {} and name '{}'".format( - resp.group.identifier, resp.group.name - ) + "Opened group with ID {} and name '{}'".format(resp.identifier, resp.name) ) diff --git a/mythx_cli/project/__init__.py b/mythx_cli/project/__init__.py new file mode 100644 index 0000000..6731dd5 --- /dev/null +++ b/mythx_cli/project/__init__.py @@ -0,0 +1 @@ +from .list import project_list diff --git a/mythx_cli/project/delete.py b/mythx_cli/project/delete.py new file mode 100644 index 0000000..27e8210 --- /dev/null +++ b/mythx_cli/project/delete.py @@ -0,0 +1 @@ +# https://api.mythx.io/v1/openapi#operation/deleteProject diff --git a/mythx_cli/project/details.py b/mythx_cli/project/details.py new file mode 100644 index 0000000..e0c13e4 --- /dev/null +++ b/mythx_cli/project/details.py @@ -0,0 +1 @@ +# https://api.mythx.io/v1/openapi#operation/updateProject diff --git a/mythx_cli/project/list.py b/mythx_cli/project/list.py new file mode 100644 index 0000000..cb8b737 --- /dev/null +++ b/mythx_cli/project/list.py @@ -0,0 +1,52 @@ +# https://api.mythx.io/v1/openapi#operation/listProjects + +import logging + +import click +from mythx_models.response import ProjectListResponse +from pythx import Client + +from mythx_cli.formatter import FORMAT_RESOLVER +from mythx_cli.util import write_or_print + +LOGGER = logging.getLogger("mythx-cli") + + +@click.command("list") +@click.option( + "--number", + default=5, + type=click.IntRange(min=1, max=100), # ~ 5 requests à 20 entries + show_default=True, + help="The number of most recent projects to display", +) +@click.pass_obj +def project_list(ctx, number: int) -> None: + """Get a list of analysis projects. + + \f + + :param ctx: Click context holding group-level parameters + :param number: The number of analysis projects to display + :return: + """ + + client: Client = ctx["client"] + result = ProjectListResponse(projects=[], total=0) + offset = 0 + while True: + LOGGER.debug(f"Fetching projects with offset {offset}") + resp = client.project_list(offset=offset) + if not resp.projects: + LOGGER.debug("Received empty project list response") + break + offset += len(resp.projects) + result.projects.extend(resp.projects) + if len(result.projects) >= number: + LOGGER.debug(f"Received {len(result.projects)} projects") + break + + # trim result to desired result number + LOGGER.debug(f"Got {len(result.projects)} analyses, trimming to {number}") + result = ProjectListResponse(projects=result.projects[:number], total=resp.total) + write_or_print(FORMAT_RESOLVER[ctx["fmt"]].format_project_list(result)) diff --git a/mythx_cli/project/open.py b/mythx_cli/project/open.py new file mode 100644 index 0000000..5bc106b --- /dev/null +++ b/mythx_cli/project/open.py @@ -0,0 +1 @@ +# https://api.mythx.io/v1/openapi#operation/createProject diff --git a/mythx_cli/render/command.py b/mythx_cli/render/command.py index 516904b..48059f0 100644 --- a/mythx_cli/render/command.py +++ b/mythx_cli/render/command.py @@ -107,7 +107,7 @@ def render( template = env.get_template(template_name) issues_list: List[ - Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]] + Tuple[str, DetectedIssuesResponse, Optional[AnalysisInputResponse]] ] = [] if len(target) == 24: LOGGER.debug(f"Identified group target {target}") @@ -124,25 +124,25 @@ def render( click.echo( "Fetching report for analysis {}".format(analysis.uuid), err=True ) - _, resp, inp = get_analysis_info( + uuid, _, resp, inp = get_analysis_info( client=client, uuid=analysis.uuid, min_severity=min_severity, swc_blacklist=swc_blacklist, swc_whitelist=swc_whitelist, ) - issues_list.append((resp, inp)) + issues_list.append((uuid, resp, inp)) elif len(target) == 36: LOGGER.debug(f"Identified analysis target {target}") click.echo("Fetching report for analysis {}".format(target), err=True) - _, resp, inp = get_analysis_info( + uuid, _, resp, inp = get_analysis_info( client=client, uuid=target, min_severity=min_severity, swc_blacklist=swc_blacklist, swc_whitelist=swc_whitelist, ) - issues_list.append((resp, inp)) + issues_list.append((uuid, resp, inp)) else: LOGGER.debug(f"Could not identify target with length {len(target)}") raise click.UsageError( diff --git a/mythx_cli/render/util.py b/mythx_cli/render/util.py index 95db5b7..7d58f58 100644 --- a/mythx_cli/render/util.py +++ b/mythx_cli/render/util.py @@ -18,7 +18,7 @@ def get_analysis_info( min_severity: Optional[str], swc_blacklist: Optional[List[str]], swc_whitelist: Optional[List[str]], -) -> Tuple[AnalysisStatusResponse, DetectedIssuesResponse, AnalysisInputResponse]: +) -> Tuple[str, AnalysisStatusResponse, DetectedIssuesResponse, AnalysisInputResponse]: """Fetch information related to the specified analysis job UUID. Given a UUID, this function will query the MythX API for the @@ -32,7 +32,7 @@ def get_analysis_info( LOGGER.debug(f"{uuid}: Fetching input") inp: Optional[AnalysisInputResponse] = client.request_by_uuid(uuid) LOGGER.debug(f"{uuid}: Fetching status") - status: AnalysisStatusResponse = client.status(uuid) + status: AnalysisStatusResponse = client.analysis_status(uuid) LOGGER.debug(f"{uuid}: Applying SWC filters") util.filter_report( @@ -41,7 +41,5 @@ def get_analysis_info( swc_blacklist=swc_blacklist, swc_whitelist=swc_whitelist, ) - # extend response with job UUID to keep formatter logic isolated - resp.uuid = uuid - return status, resp, inp + return uuid, status, resp, inp diff --git a/mythx_cli/util.py b/mythx_cli/util.py index ba4e8ec..7440b7c 100644 --- a/mythx_cli/util.py +++ b/mythx_cli/util.py @@ -1,6 +1,7 @@ import logging +import os from collections import defaultdict -from typing import Any, List, Optional, Tuple +from typing import Any, AnyStr, List, Optional, Tuple import click from mythx_models.response import AnalysisInputResponse, DetectedIssuesResponse @@ -10,8 +11,134 @@ LOGGER = logging.getLogger("mythx-cli") +class SourceMapLocation: + def __init__( + self, offset: int = 0, length: int = 0, file_id: int = -1, jump_type: str = "-" + ): + self.o = int(offset) + self.l = int(length) + self.f = int(file_id) + self.j = jump_type + + @property + def offset(self) -> int: + return self.o + + @offset.setter + def offset(self, value: int) -> None: + value = int(value) + if value <= 0: + raise ValueError("Expected positive offset but received {}".format(value)) + self.o = int(value) + + @property + def length(self) -> int: + return self.l + + @length.setter + def length(self, value: int) -> None: + value = int(value) + if value <= 0: + raise ValueError("Expected positive length but received {}".format(value)) + self.l = int(value) + + @property + def file_id(self) -> int: + return self.f + + @file_id.setter + def file_id(self, value: int) -> None: + value = int(value) + if value < -1: + raise ValueError( + "Expected positive file ID or -1 but received {}".format(value) + ) + self.f = int(value) + + @property + def jump_type(self) -> str: + return self.j + + @jump_type.setter + def jump_type(self, value: str) -> None: + if value not in ("i", "o", "-"): + raise ValueError( + "Invalid jump type {}, must be one of i, o, -".format(value) + ) + self.j = value + + def to_full_component_string(self) -> str: + return "{}:{}:{}:{}".format(self.o, self.l, self.f, self.j) + + def to_short_component_string(self) -> str: + return "{}:{}:{}".format(self.o, self.l, self.f) + + def __repr__(self) -> str: + return "".format(self.to_full_component_string()) + + def __eq__(self, other: "SourceMapLocation") -> bool: + return all( + (self.o == other.o, self.l == other.l, self.f == other.f, self.j == other.j) + ) + + +class SourceMap: + def __init__(self, source_map: str): + self.components = self._decompress(source_map) + + @staticmethod + def sourcemap_reducer( + accumulator: Tuple[int, int, int, str], component: str + ) -> List[str]: + parts = component.split(":") + full = [] + for i in range(4): + part_exists = i < len(parts) and parts[i] + part = parts[i] if part_exists else accumulator[i] + full.append(part) + return full + + @staticmethod + def _decompress(source_map: str) -> List[SourceMapLocation]: + components = source_map.split(";") + accumulator = (-1, -1, -2, "-") + result = [] + + for val in components: + curr = SourceMap.sourcemap_reducer(accumulator, val) + accumulator = curr + result.append(curr) + + return [SourceMapLocation(*c) for c in result] + + def _compress(self) -> str: + compressed = [] + accumulator = (-1, -1, -2, "") + for val in self.components: + compr = [] + for i, v in enumerate((val.offset, val.length, val.file_id, val.jump_type)): + if accumulator[i] == v: + compr.append("") + else: + compr.append(str(v)) + accumulator = (val.offset, val.length, val.file_id, val.jump_type) + compressed.append(":".join(compr).rstrip(":")) + return ";".join(compressed) + + def to_compressed_sourcemap(self) -> str: + return self._compress() + + def to_decompressed_sourcemap(self) -> str: + return ";".join(map(lambda x: x.to_short_component_string(), self.components)) + + def __eq__(self, other: "SourceMap") -> bool: + return self.components == other.components + + def index_by_filename( - issues_list: List[Tuple[DetectedIssuesResponse, Optional[AnalysisInputResponse]]] + issues_list: List[ + Tuple[str, DetectedIssuesResponse, Optional[AnalysisInputResponse]] + ] ): """Index the given report/input responses by filename. @@ -28,7 +155,7 @@ def index_by_filename( """ report_context = defaultdict(list) - for resp, inp in issues_list: + for uuid, resp, inp in issues_list: # initialize context with source line objects for filename, file_data in inp.sources.items(): source = file_data.get("source") @@ -45,15 +172,15 @@ def index_by_filename( for report in resp.issue_reports: for issue in report.issues: issue_entry = { - "uuid": resp.uuid, + "uuid": uuid, "swcID": issue.swc_id, "swcTitle": issue.swc_title, "description": { - "head": issue.description_short, - "tail": issue.description_long, + "head": issue.description.head, + "tail": issue.description.tail, }, "severity": issue.severity, - "testCases": issue.extra_data.get("testCases", []), + "testCases": issue.extra.get("testCases", []), } if issue.swc_id == "" or issue.swc_title == "" or not issue.locations: @@ -66,7 +193,7 @@ def index_by_filename( # skip non-text locations when we have one attached to the issue continue - for c in loc.source_map.components: + for c in SourceMap(loc.source_map).components: source_list = loc.source_list or report.source_list if not (source_list and 0 <= c.file_id < len(source_list)): # skip issues whose srcmap file ID if out of range of the source list @@ -122,3 +249,65 @@ def write_or_print(ctx, data: str, mode="a+") -> None: with open(ctx["output"], mode) as outfile: LOGGER.debug(f"Writing data to {ctx['output']}") outfile.write(data + "\n") + + +def sol_files_by_directory(target_path: AnyStr) -> List: + """Gathers all the .sol files inside the target path + including sub-directories and returns them as a List. + Non .sol files are ignored. + + :param target_path: The directory to look for .sol files + :return: + """ + return files_by_directory(target_path, ".sol") + + +def files_by_directory(target_path: AnyStr, extension: AnyStr) -> List: + """Gathers all the target extension files inside the target path + including sub-directories and returns them as a List. + Non target extension files are ignored. + + :param target_path: The directory to look for target extension files + :return: + """ + target_files = [] + # We start by checking if the target_path is potentially a target extension file + if target_path.endswith(extension): + # If target extension file we check if the target exists or if it's a user input error + if not os.path.isfile(target_path): + raise click.exceptions.UsageError( + "Could not find " + + str(target_path) + + ". Did you pass the correct directory?" + ) + else: + """ If it's a valid target extension file there is no need to search further and we just append it to our + list to be returned, removing the .original extension, leaving only the .sol """ + target_files.append(target_path.replace(".original", "")) + source_dir = os.walk(target_path) + for sub_dir in source_dir: + if len(sub_dir[2]) > 0: + # sub directory with target extension files + file_prefix = sub_dir[0] + for file in sub_dir[2]: + if "__scribble_" in file: + LOGGER.debug(f"Skipped for being a scribble file {file}") + continue + + if not file.endswith(extension): + LOGGER.debug(f"Skipped for not being a solidity file: {file}") + continue + file_name = file_prefix + "/" + file + LOGGER.debug(f"Found target extension file: {file_name}") + # We remove the .original extension, added by Scribble + target_files.append(file_name.replace(".original", "")) + return target_files + + +def get_content_from_file(file_path: AnyStr) -> AnyStr: + reader = open(file_path) + try: + source_code = reader.read() + finally: + reader.close() + return source_code diff --git a/requirements.txt b/requirements.txt index b27e862..56ae6b4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ Click==7.1.2 py-solc-x==1.1.0 -pythx==1.6.1 +pythx==1.7.1 tabulate==0.8.9 Jinja2==2.11.3 htmlmin==0.1.12 diff --git a/requirements_dev.txt b/requirements_dev.txt index b57d084..1bf64b1 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,18 +1,18 @@ -r requirements.txt bumpversion==0.6.0 -coverage==5.3 -coveralls==2.2.0 -tox==3.20.1 +coverage==5.4 +coveralls==3.0.0 +tox==3.21.4 -sphinx==3.3.1 -sphinx_rtd_theme==0.5.0 -watchdog==0.10.4 -twine==3.2.0 +sphinx==3.4.3 +sphinx_rtd_theme==0.5.1 +watchdog==1.0.2 +twine==3.3.0 black==19.3b0 isort==5.6.4 -pytest==6.1.2 +pytest==6.2.2 pytest-runner==5.2 -pytest-cov==2.10.1 +pytest-cov==2.11.1 pytest-subprocess==1.0.0 diff --git a/setup.py b/setup.py index d7f8061..11437a9 100644 --- a/setup.py +++ b/setup.py @@ -25,17 +25,14 @@ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Natural Language :: English", - "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Information Technology", - "Topic :: Security", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Quality Assurance", "Topic :: Terminals :: Terminal Emulators/X Terminals", "Topic :: Utilities", - "Typing :: Typed", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", diff --git a/tests/.mythx.yml b/tests/.mythx.yml new file mode 100644 index 0000000..af20b9b --- /dev/null +++ b/tests/.mythx.yml @@ -0,0 +1,6 @@ +fuzz: + build_directory: build/contracts + number_of_cores: 1 + campaign_name_prefix: "brownie_test" + rpc_url: "http://localhost:7545" + faas_url: "http://localhost:8080" \ No newline at end of file diff --git a/tests/common.py b/tests/common.py index 82aff4e..9417438 100644 --- a/tests/common.py +++ b/tests/common.py @@ -25,12 +25,27 @@ def get_test_case(path: str, obj=None, raw=False): if obj is None: return dict_data - return obj.from_dict(dict_data) + + if obj is DetectedIssuesResponse and type(dict_data) is list: + return obj(issue_reports=dict_data) + else: + return obj(**dict_data) AST = get_test_case("testdata/test-ast.json") +@contextmanager +def mock_faas_context(): + with patch("mythx_cli.fuzz.rpc.RPCClient") as RPCClient_mock: + instance = RPCClient_mock.return_value + instance.get_all_blocks.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + instance.contract_exists.return_value = True + yield + + @contextmanager def mock_context( submission_response=None, @@ -53,7 +68,7 @@ def mock_context( ) as analysis_list_patch, patch( "pythx.Client.group_list" ) as group_list_patch, patch( - "pythx.Client.status" + "pythx.Client.analysis_status" ) as status_patch, patch( "pythx.Client.group_status" ) as group_status_patch, patch( diff --git a/tests/conftest.py b/tests/conftest.py index 0a63c8f..aa46b5b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,8 @@ +import logging import os def pytest_generate_tests(metafunc): os.environ["MYTHX_API_KEY"] = "test" + for name in logging.root.manager.loggerDict: + logging.getLogger(name).setLevel(logging.DEBUG) diff --git a/tests/test_analyze_solidity.py b/tests/test_analyze_solidity.py index 83fcd6f..87f3194 100644 --- a/tests/test_analyze_solidity.py +++ b/tests/test_analyze_solidity.py @@ -39,7 +39,7 @@ def get_high_severity_report(): issues_resp = deepcopy(ISSUES_RESPONSE) - issues_resp.issue_reports[0].issues[0].severity = Severity.HIGH + issues_resp.issue_reports[0].issues[0].severity = "high" return issues_resp @@ -157,7 +157,7 @@ def test_default_recursive_blacklist(tmp_path): ( pytest.param( ["analyze", "--async"], - SUBMISSION_RESPONSE.analysis.uuid, + SUBMISSION_RESPONSE.uuid, True, 0, id="analyze async", diff --git a/tests/test_analyze_truffle.py b/tests/test_analyze_truffle.py index e86f64a..3b50a67 100644 --- a/tests/test_analyze_truffle.py +++ b/tests/test_analyze_truffle.py @@ -53,7 +53,7 @@ def setup_truffle_project(base_path, compiled=True, switch_dir=False): def get_high_severity_report(): issues_resp = deepcopy(ISSUES_RESPONSE) - issues_resp.issue_reports[0].issues[0].severity = Severity.HIGH + issues_resp.issue_reports[0].issues[0].severity = "high" return issues_resp @@ -145,11 +145,7 @@ def test_param_yaml_override(tmp_path): "params,value,contained,retval", ( pytest.param( - ["analyze", "--async"], - SUBMISSION_RESPONSE.analysis.uuid, - True, - 0, - id="async", + ["analyze", "--async"], SUBMISSION_RESPONSE.uuid, True, 0, id="async" ), pytest.param(["analyze"], ISSUES_TABLE, True, 0, id="issue table"), pytest.param( diff --git a/tests/test_fuzz_brownie.py b/tests/test_fuzz_brownie.py new file mode 100644 index 0000000..ffc62fc --- /dev/null +++ b/tests/test_fuzz_brownie.py @@ -0,0 +1,366 @@ +import json +import os +from pathlib import Path +from unittest.mock import patch + +import pytest +import requests +from click.testing import CliRunner +from requests import RequestException + +from mythx_cli.cli import cli +from mythx_cli.fuzz.exceptions import RequestError +from mythx_cli.fuzz.faas import FaasClient +from mythx_cli.fuzz.rpc import RPCClient + +from .common import get_test_case + +BROWNIE_ARTIFACT = get_test_case("testdata/brownie-artifact.json") +GANACHE_URL = "http://localhost:9898" +FAAS_URL = "http://localhost:9899" + +INSTRUMENTED_SOL_CODE = "sol code here" +ORIGINAL_SOL_CODE = "original sol code here" + + +@pytest.fixture() +def brownie_project(tmp_path, switch_dir=False): + # switch to temp dir if requested + if switch_dir: + os.chdir(str(tmp_path)) + + # add brownie project structure + os.makedirs(str(tmp_path / "build/contracts/")) + os.makedirs(str(tmp_path / "contracts/")) + + with open("./brownie-config.yaml", "w+") as config_f: + json.dump("sample", config_f) + + # patch brownie artifact with temp path + BROWNIE_ARTIFACT["allSourcePaths"][0] = f"{tmp_path}/contracts/sample.sol" + BROWNIE_ARTIFACT["sourcePath"] = f"{tmp_path}/contracts/sample.sol" + + # add sample brownie artifact + with open(tmp_path / "build/contracts/Foo.json", "w+") as artifact_f: + json.dump(BROWNIE_ARTIFACT, artifact_f) + with open(tmp_path / "contracts/sample.sol", "w+") as sol_f: + sol_f.write(INSTRUMENTED_SOL_CODE) + with open(tmp_path / "contracts/sample.sol.original", "w+") as sol_f: + sol_f.write(ORIGINAL_SOL_CODE) + + yield None + # cleaning up test files + os.remove(str(Path("./brownie-config.yaml").absolute())) + + +def generate_config_file(base_path="", not_include=[]): + config_file = "fuzz:" + + if "deployed_contract_address" not in not_include: + config_file += '\n deployed_contract_address: "0x7277646075fa72737e1F6114654C5d9949a67dF2"' + if "number_of_cores" not in not_include: + config_file += "\n number_of_cores: 1" + if "campaign_name_prefix" not in not_include: + config_file += '\n campaign_name_prefix: "brownie_test"' + if "rpc_url" not in not_include: + config_file += f'\n rpc_url: "{GANACHE_URL}"' + if "faas_url" not in not_include: + config_file += f'\n faas_url: "{FAAS_URL}"' + if "build_directory" not in not_include: + config_file += f"\n build_directory: {base_path}/build" + if "targets" not in not_include: + config_file += f'\n targets:\n - "{base_path}/contracts"' + return config_file + + +def test_fuzz_no_build_dir(tmp_path): + runner = CliRunner() + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(not_include=["build_directory"])) + + result = runner.invoke(cli, ["fuzz", "run", "contracts"]) + assert "Error: build_directory not found on .mythx.yml config file" in result.output + assert result.exit_code != 0 + + +def test_fuzz_no_deployed_address(tmp_path): + runner = CliRunner() + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(not_include=["deployed_contract_address"])) + + result = runner.invoke(cli, ["fuzz", "run", "contracts"]) + assert ( + "Error: deployed_contract_address not found on .mythx.yml config file." + in result.output + ) + assert result.exit_code != 0 + + +def test_fuzz_no_target(tmp_path): + runner = CliRunner() + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(not_include=["targets"])) + + result = runner.invoke(cli, ["fuzz", "run"]) + assert "Error: Target not provided." in result.output + assert result.exit_code != 0 + + +def test_fuzz_no_contract_at_address(tmp_path, brownie_project): + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = False + + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "run", f"{tmp_path}/contracts"]) + + assert "Error: Unable to find a contract deployed" in result.output + assert result.exit_code != 0 + + +def test_faas_not_running(tmp_path, brownie_project): + + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock, patch.object( + FaasClient, "start_faas_campaign" + ) as start_faas_campaign_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = True + start_faas_campaign_mock.side_effect = RequestError( + f"Error starting FaaS campaign." + ) + + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "run", f"{tmp_path}/contracts"]) + + assert ( + "Error: Unable to submit the campaign to the faas. Are you sure the service is running on" + in result.output + ) + assert result.exit_code != 0 + + +def test_faas_target_config_file(tmp_path, brownie_project): + """Here we reuse the test_faas_not_running logic to check that the target is being read + from the config file. This is possible because the faas not running error is triggered + after the Target check. If the target was not available, a different error would be thrown + and the test would fail""" + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock, patch.object( + FaasClient, "start_faas_campaign" + ) as start_faas_campaign_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = True + start_faas_campaign_mock.side_effect = RequestError( + f"Error starting FaaS campaign." + ) + + runner = CliRunner() + # we call the run command without the target parameter. + result = runner.invoke(cli, ["fuzz", "run"]) + + assert ( + "Error: Unable to submit the campaign to the faas. Are you sure the service is running on" + in result.output + ) + assert result.exit_code != 0 + + +def test_rpc_not_running(tmp_path): + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object(requests, "request") as requests_mock: + requests_mock.side_effect = RequestException() + + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "run", f"{tmp_path}/contracts"]) + + assert "HTTP error calling RPC method eth_getCode with parameters" in result.output + assert result.exit_code != 0 + + +def test_fuzz_run(tmp_path, brownie_project): + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock, patch.object( + FaasClient, "start_faas_campaign" + ) as start_faas_campaign_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = True + campaign_id = "560ba03a-8744-4da6-aeaa-a62568ccbf44" + start_faas_campaign_mock.return_value = campaign_id + + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "run", f"{tmp_path}/contracts"]) + + contract_exists_mock.assert_called_with( + "0x7277646075fa72737e1F6114654C5d9949a67dF2" + ) + contract_exists_mock.assert_called_once() + get_all_blocks_mock.assert_called_once() + start_faas_campaign_mock.assert_called_once() + called_with = start_faas_campaign_mock.call_args + assert ( + f"You can view campaign here: {FAAS_URL}/campaigns/{campaign_id}" + in result.output + ) + + request_payload = json.dumps(called_with[0]) + + keywords = [ + "parameters", + "name", + "corpus", + "sources", + "contracts", + "address-under-test", + "source", + "fileIndex", + "sourcePaths", + "deployedSourceMap", + "mainSourceFile", + "contractName", + "bytecode", + "deployedBytecode", + "sourceMap", + "deployedSourceMap", + ] + + for keyword in keywords: + assert keyword in request_payload + + assert result.exit_code == 0 + +def test_fuzz_run_map_to_original_source(tmp_path, brownie_project): + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock, patch.object( + FaasClient, "start_faas_campaign" + ) as start_faas_campaign_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = True + campaign_id = "560ba03a-8744-4da6-aeaa-a62568ccbf44" + start_faas_campaign_mock.return_value = campaign_id + + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "run", "--map-to-original-source",f"{tmp_path}/contracts"]) + + contract_exists_mock.assert_called_with( + "0x7277646075fa72737e1F6114654C5d9949a67dF2" + ) + contract_exists_mock.assert_called_once() + get_all_blocks_mock.assert_called_once() + start_faas_campaign_mock.assert_called_once() + called_with = start_faas_campaign_mock.call_args + assert ( + f"You can view campaign here: {FAAS_URL}/campaigns/{campaign_id}" + in result.output + ) + + request_payload = json.dumps(called_with[0]) + + assert ORIGINAL_SOL_CODE in request_payload + + keywords = [ + "parameters", + "name", + "corpus", + "sources", + "contracts", + "address-under-test", + "source", + "fileIndex", + "sourcePaths", + "deployedSourceMap", + "mainSourceFile", + "contractName", + "bytecode", + "deployedBytecode", + "sourceMap", + "deployedSourceMap", + ] + + for keyword in keywords: + assert keyword in request_payload + + + + assert result.exit_code == 0 + +@pytest.mark.parametrize("keyword", ("run", "disarm", "arm", "run")) +def test_fuzz_subcommands_present(keyword): + runner = CliRunner() + + result = runner.invoke(cli, ["fuzz", "--help"]) + + assert keyword in result.output + + +@patch("mythx_cli.analyze.scribble.ScribbleMixin.instrument_solc_in_place") +def test_fuzz_arm(mock, tmp_path, brownie_project): + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "arm", f"{tmp_path}/contracts/sample.sol"]) + + mock.assert_called() + mock.assert_called_with( + file_list=(f"{tmp_path}/contracts/sample.sol",), + scribble_path="scribble", + remappings=[], + solc_version=None, + ) + assert result.exit_code == 0 + + +@patch("mythx_cli.analyze.scribble.ScribbleMixin.disarm_solc_in_place") +def test_fuzz_disarm(mock, tmp_path, brownie_project): + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "disarm", f"{tmp_path}/contracts/sample.sol"]) + + mock.assert_called() + mock.assert_called_with( + file_list=(f"{tmp_path}/contracts/sample.sol",), + scribble_path="scribble", + remappings=[], + solc_version=None, + ) + assert result.exit_code == 0 diff --git a/tests/test_fuzz_hardhat.py b/tests/test_fuzz_hardhat.py new file mode 100644 index 0000000..44c266b --- /dev/null +++ b/tests/test_fuzz_hardhat.py @@ -0,0 +1,369 @@ +import json +import os +from pathlib import Path +from unittest.mock import patch + +import pytest +import requests +from click.testing import CliRunner +from requests import RequestException + +from mythx_cli.cli import cli +from mythx_cli.fuzz.exceptions import RequestError +from mythx_cli.fuzz.faas import FaasClient +from mythx_cli.fuzz.rpc import RPCClient + +from .common import get_test_case + +HARDHAT_ARTIFACT = get_test_case("testdata/hardhat-artifact.json") +HARDHAT_BUILD_INFO_ARTIFACT = get_test_case("testdata/hardhat-build-info-artifact.json") +GANACHE_URL = "http://localhost:9898" +FAAS_URL = "http://localhost:9899" + +INSTRUMENTED_SOL_CODE = "sol code here" +ORIGINAL_SOL_CODE = "original sol code here" + + +@pytest.fixture() +def hardhat_project(tmp_path, switch_dir=False): + # switch to temp dir if requested + if switch_dir: + os.chdir(str(tmp_path)) + + # add hardhat project structure + os.makedirs(str(tmp_path / "artifacts/contracts/MasterChefV2.sol/")) + os.makedirs(str(tmp_path / "artifacts/build-info/")) + os.makedirs(str(tmp_path / "contracts")) + + # add sample brownie artifact + with open( + tmp_path / "artifacts/build-info/b78e6e91d6666dbbf407d4a383cd8177.json", "w+" + ) as artifact_f: + json.dump(HARDHAT_BUILD_INFO_ARTIFACT, artifact_f) + + with open("./hardhat.config.ts", "w+") as config_f: + json.dump("sample", config_f) + + for filename, content in HARDHAT_ARTIFACT.items(): + with open( + tmp_path / f"artifacts/contracts/MasterChefV2.sol/{filename}.json", "w+" + ) as sol_f: + json.dump(content, sol_f) + + with open(tmp_path / "contracts/MasterChefV2.sol", "w+") as sol_f: + sol_f.write(INSTRUMENTED_SOL_CODE) + + with open(tmp_path / "contracts/sample.sol", "w+") as sol_f: + sol_f.write(INSTRUMENTED_SOL_CODE) + + with open(tmp_path / "contracts/MasterChefV2.sol.original", "w+") as sol_f: + sol_f.write(ORIGINAL_SOL_CODE) + + with open(tmp_path / "contracts/sample.sol.original", "w+") as sol_f: + sol_f.write(ORIGINAL_SOL_CODE) + + yield None + + os.remove(Path("./hardhat.config.ts").absolute()) + + +def generate_config_file(base_path="", not_include=[]): + config_file = "fuzz:" + + if "deployed_contract_address" not in not_include: + config_file += '\n deployed_contract_address: "0x7277646075fa72737e1F6114654C5d9949a67dF2"' + if "number_of_cores" not in not_include: + config_file += "\n number_of_cores: 1" + if "campaign_name_prefix" not in not_include: + config_file += '\n campaign_name_prefix: "hardhat_test"' + if "rpc_url" not in not_include: + config_file += f'\n rpc_url: "{GANACHE_URL}"' + if "faas_url" not in not_include: + config_file += f'\n faas_url: "{FAAS_URL}"' + if "build_directory" not in not_include: + config_file += f"\n build_directory: {base_path}/artifacts" + if "targets" not in not_include: + config_file += f'\n targets:\n - "{base_path}/contracts/MasterChefV2.sol"' + return config_file + + +def test_fuzz_no_build_dir(tmp_path): + runner = CliRunner() + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(not_include=["build_directory"])) + + result = runner.invoke(cli, ["fuzz", "run", "contracts"]) + assert "Error: build_directory not found on .mythx.yml config file" in result.output + assert result.exit_code != 0 + + +def test_fuzz_no_deployed_address(tmp_path): + runner = CliRunner() + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(not_include=["deployed_contract_address"])) + + result = runner.invoke(cli, ["fuzz", "run", "contracts"]) + assert ( + "Error: deployed_contract_address not found on .mythx.yml config file." + in result.output + ) + assert result.exit_code != 0 + + +def test_fuzz_no_target(tmp_path): + runner = CliRunner() + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(not_include=["targets"])) + + result = runner.invoke(cli, ["fuzz", "run"]) + assert "Error: Target not provided." in result.output + assert result.exit_code != 0 + + +def test_fuzz_no_contract_at_address(tmp_path, hardhat_project): + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = False + + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "run", f"{tmp_path}/contracts"]) + + assert "Error: Unable to find a contract deployed" in result.output + assert result.exit_code != 0 + + +def test_faas_not_running(tmp_path, hardhat_project): + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock, patch.object( + FaasClient, "start_faas_campaign" + ) as start_faas_campaign_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = True + start_faas_campaign_mock.side_effect = RequestError( + f"Error starting FaaS campaign." + ) + + runner = CliRunner() + result = runner.invoke( + cli, ["fuzz", "run", f"{tmp_path}/contracts/MasterChefV2.sol"] + ) + + assert ( + "Error: Unable to submit the campaign to the faas. Are you sure the service is running on" + in result.output + ) + assert result.exit_code != 0 + + +def test_faas_target_config_file(tmp_path, hardhat_project): + """Here we reuse the test_faas_not_running logic to check that the target is being read + from the config file. This is possible because the faas not running error is triggered + after the Target check. If the target was not available, a different error would be thrown + and the test would fail""" + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock, patch.object( + FaasClient, "start_faas_campaign" + ) as start_faas_campaign_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = True + start_faas_campaign_mock.side_effect = RequestError( + f"Error starting FaaS campaign." + ) + + runner = CliRunner() + # we call the run command without the target parameter. + result = runner.invoke(cli, ["fuzz", "run"]) + + assert ( + "Error: Unable to submit the campaign to the faas. Are you sure the service is running on" + in result.output + ) + assert result.exit_code != 0 + + +def test_rpc_not_running(tmp_path): + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object(requests, "request") as requests_mock: + requests_mock.side_effect = RequestException() + + runner = CliRunner() + result = runner.invoke( + cli, ["fuzz", "run", f"{tmp_path}/contracts/MasterChefV2.sol"] + ) + + assert "HTTP error calling RPC method eth_getCode with parameters" in result.output + assert result.exit_code != 0 + + +def test_fuzz_run(tmp_path, hardhat_project): + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock, patch.object( + FaasClient, "start_faas_campaign" + ) as start_faas_campaign_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = True + campaign_id = "560ba03a-8744-4da6-aeaa-a62568ccbf44" + start_faas_campaign_mock.return_value = campaign_id + + runner = CliRunner() + result = runner.invoke( + cli, ["fuzz", "run", f"{tmp_path}/contracts/MasterChefV2.sol"] + ) + + contract_exists_mock.assert_called_with( + "0x7277646075fa72737e1F6114654C5d9949a67dF2" + ) + contract_exists_mock.assert_called_once() + get_all_blocks_mock.assert_called_once() + start_faas_campaign_mock.assert_called_once() + called_with = start_faas_campaign_mock.call_args + assert ( + f"You can view campaign here: {FAAS_URL}/campaigns/{campaign_id}" + in result.output + ) + + request_payload = json.dumps(called_with[0]) + + keywords = [ + "parameters", + "name", + "corpus", + "sources", + "contracts", + "address-under-test", + "source", + "fileIndex", + "sourcePaths", + "deployedSourceMap", + "mainSourceFile", + "contractName", + "bytecode", + "deployedBytecode", + "sourceMap", + "deployedSourceMap", + ] + + for keyword in keywords: + assert keyword in request_payload + + assert result.exit_code == 0 + + +def test_fuzz_run_corpus_target(tmp_path, hardhat_project): + with open(".mythx.yml", "w+") as conf_f: + conf_f.write(generate_config_file(base_path=tmp_path)) + + with patch.object( + RPCClient, "contract_exists" + ) as contract_exists_mock, patch.object( + RPCClient, "get_all_blocks" + ) as get_all_blocks_mock, patch.object( + FaasClient, "start_faas_campaign" + ) as start_faas_campaign_mock: + get_all_blocks_mock.return_value = get_test_case( + "testdata/ganache-all-blocks.json" + ) + contract_exists_mock.return_value = True + campaign_id = "560ba03a-8744-4da6-aeaa-a62568ccbf44" + start_faas_campaign_mock.return_value = campaign_id + + runner = CliRunner() + result = runner.invoke( + cli, + [ + "fuzz", + "run", + f"{tmp_path}/contracts/MasterChefV2.sol", + "-c", + "prj_639cffb2a3e0407fbe2c701caaf5ab33", + ], + ) + + contract_exists_mock.assert_not_called() + get_all_blocks_mock.assert_not_called() + start_faas_campaign_mock.assert_called_once() + called_with = start_faas_campaign_mock.call_args + assert ( + f"You can view campaign here: {FAAS_URL}/campaigns/{campaign_id}" + in result.output + ) + + assert called_with[0][0]["corpus"] == { + "target": "prj_639cffb2a3e0407fbe2c701caaf5ab33" + } + + assert result.exit_code == 0 + + +@pytest.mark.parametrize("keyword", ("run", "disarm", "arm", "run")) +def test_fuzz_subcommands_present(keyword): + runner = CliRunner() + + result = runner.invoke(cli, ["fuzz", "--help"]) + + assert keyword in result.output + + +@patch("mythx_cli.analyze.scribble.ScribbleMixin.instrument_solc_in_place") +def test_fuzz_arm(mock, tmp_path, hardhat_project): + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "arm", f"{tmp_path}/contracts/sample.sol"]) + + mock.assert_called() + mock.assert_called_with( + file_list=(f"{tmp_path}/contracts/sample.sol",), + scribble_path="scribble", + remappings=[], + solc_version=None, + ) + assert result.exit_code == 0 + + +@patch("mythx_cli.analyze.scribble.ScribbleMixin.disarm_solc_in_place") +def test_fuzz_disarm(mock, tmp_path, hardhat_project): + runner = CliRunner() + result = runner.invoke(cli, ["fuzz", "disarm", f"{tmp_path}/contracts/sample.sol"]) + + mock.assert_called() + mock.assert_called_with( + file_list=(f"{tmp_path}/contracts/sample.sol",), + scribble_path="scribble", + remappings=[], + solc_version=None, + ) + assert result.exit_code == 0 diff --git a/tests/test_list.py b/tests/test_list.py index 9fe7ea3..5efc564 100644 --- a/tests/test_list.py +++ b/tests/test_list.py @@ -40,7 +40,7 @@ def test_list_json(): with mock_context(): result = runner.invoke(cli, ["--format", "json", "analysis", "list"]) - assert json.loads(result.output) == ANALYSIS_LIST.to_dict() + assert json.loads(result.output) == ANALYSIS_LIST.dict(by_alias=True) assert result.exit_code == 0 @@ -49,7 +49,7 @@ def test_group_list_json(): with mock_context(): result = runner.invoke(cli, ["--format", "json", "group", "list"]) - assert json.loads(result.output) == GROUP_LIST.to_dict() + assert json.loads(result.output) == GROUP_LIST.dict(by_alias=True) assert result.exit_code == 0 @@ -58,7 +58,7 @@ def test_list_json_pretty(): with mock_context(): result = runner.invoke(cli, ["--format", "json-pretty", "analysis", "list"]) - assert json.loads(result.output) == ANALYSIS_LIST.to_dict() + assert json.loads(result.output) == ANALYSIS_LIST.dict(by_alias=True) assert result.exit_code == 0 @@ -67,7 +67,7 @@ def test_group_list_json_pretty(): with mock_context(): result = runner.invoke(cli, ["--format", "json-pretty", "group", "list"]) - assert json.loads(result.output) == GROUP_LIST.to_dict() + assert json.loads(result.output) == GROUP_LIST.dict(by_alias=True) assert result.exit_code == 0 diff --git a/tests/test_renderer.py b/tests/test_renderer.py index 2dbc114..8114973 100644 --- a/tests/test_renderer.py +++ b/tests/test_renderer.py @@ -28,9 +28,10 @@ def assert_content(data, ident, is_template): for source in map(lambda x: x["source"], INPUT_RESPONSE.sources.values()): for line in source.split("\n"): assert escape(line.strip()) in data - for issue in ISSUES_RESPONSE: - assert issue.swc_id in data - assert issue.swc_title in data + for report in ISSUES_RESPONSE.issue_reports: + for issue in report.issues: + assert issue.swc_id in data + assert issue.swc_title in data else: assert data.strip() != "" diff --git a/tests/test_report.py b/tests/test_report.py index 0fcf6fe..1714288 100644 --- a/tests/test_report.py +++ b/tests/test_report.py @@ -108,7 +108,9 @@ def test_report_json(): ], ) - assert json.loads(result.output)[0] == json.loads(ISSUES_RESPONSE.to_json()) + assert json.loads(result.output)[0] == json.loads( + ISSUES_RESPONSE.json(by_alias=True) + ) assert result.exit_code == 0 @@ -129,7 +131,8 @@ def test_report_json_blacklist(): ) assert all( - x["swcID"] != "SWC-110" for x in json.loads(result.output)[0][0]["issues"] + x["swcID"] != "SWC-110" + for x in json.loads(result.output)[0]["issue_reports"][0]["issues"] ) assert result.exit_code == 0 @@ -151,7 +154,8 @@ def test_report_json_whitelist(): ) assert all( - x["swcID"] == "SWC-110" for x in json.loads(result.output)[0][0]["issues"] + x["swcID"] == "SWC-110" + for x in json.loads(result.output)[0]["issue_reports"][0]["issues"] ) assert result.exit_code == 0 @@ -173,7 +177,8 @@ def test_report_json_filter(): ) assert all( - x["swcID"] != "SWC-110" for x in json.loads(result.output)[0][0]["issues"] + x["swcID"] != "SWC-110" + for x in json.loads(result.output)[0]["issue_reports"][0]["issues"] ) assert result.exit_code == 0 @@ -192,7 +197,9 @@ def test_report_json_pretty(): ], ) - assert json.loads(result.output)[0] == json.loads(ISSUES_RESPONSE.to_json()) + assert json.loads(result.output)[0] == json.loads( + ISSUES_RESPONSE.json(by_alias=True) + ) assert result.exit_code == 0 @@ -213,7 +220,8 @@ def test_report_json_pretty_blacklist(): ) assert all( - x["swcID"] != "SWC-110" for x in json.loads(result.output)[0][0]["issues"] + x["swcID"] != "SWC-110" + for x in json.loads(result.output)[0]["issue_reports"][0]["issues"] ) assert result.exit_code == 0 @@ -235,7 +243,8 @@ def test_report_json_pretty_whitelist(): ) assert all( - x["swcID"] == "SWC-110" for x in json.loads(result.output)[0][0]["issues"] + x["swcID"] == "SWC-110" + for x in json.loads(result.output)[0]["issue_reports"][0]["issues"] ) assert result.exit_code == 0 @@ -257,7 +266,8 @@ def test_report_json_pretty_filter(): ) assert all( - x["swcID"] != "SWC-110" for x in json.loads(result.output)[0][0]["issues"] + x["swcID"] != "SWC-110" + for x in json.loads(result.output)[0]["issue_reports"][0]["issues"] ) assert result.exit_code == 0 diff --git a/tests/test_report_filter.py b/tests/test_report_filter.py index aa588b1..4438ca3 100644 --- a/tests/test_report_filter.py +++ b/tests/test_report_filter.py @@ -88,7 +88,12 @@ def test_report_filter_blacklist(blacklist, whitelist, severity, contained): resp, swc_blacklist=blacklist, swc_whitelist=whitelist, min_severity=severity ) + swc_ids = [] + for report in resp.issue_reports: + for issue in report.issues: + swc_ids.append(issue.swc_id) + if contained: - assert "SWC-110" in resp + assert "SWC-110" in swc_ids else: - assert "SWC-110" not in resp + assert "SWC-110" not in swc_ids diff --git a/tests/test_status.py b/tests/test_status.py index 2d3aff3..8c45ecf 100644 --- a/tests/test_status.py +++ b/tests/test_status.py @@ -51,7 +51,7 @@ def test_status_json(): ], ) - assert json.loads(result.output) == ANALYSIS_STATUS.to_dict() + assert json.loads(result.output) == ANALYSIS_STATUS.dict(by_alias=True) assert result.exit_code == 0 @@ -62,7 +62,7 @@ def test_group_status_json(): cli, ["--format", "json", "group", "status", "5dd40ca50d861d001101e888"] ) - assert json.loads(result.output) == GROUP_STATUS.to_dict() + assert json.loads(result.output) == GROUP_STATUS.dict(by_alias=True) assert result.exit_code == 0 @@ -80,7 +80,7 @@ def test_status_json_pretty(): ], ) - assert json.loads(result.output) == ANALYSIS_STATUS.to_dict() + assert json.loads(result.output) == ANALYSIS_STATUS.dict(by_alias=True) assert result.exit_code == 0 @@ -92,7 +92,7 @@ def test_group_status_json_pretty(): ["--format", "json-pretty", "group", "status", "5dd40ca50d861d001101e888"], ) - assert json.loads(result.output) == GROUP_STATUS.to_dict() + assert json.loads(result.output) == GROUP_STATUS.dict(by_alias=True) assert result.exit_code == 0 diff --git a/tests/test_version.py b/tests/test_version.py index cfa6963..9b1787f 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -36,7 +36,7 @@ def test_version_json(): with mock_context(): result = runner.invoke(cli, ["--format", "json", "version", "--api"]) - assert json.loads(result.output) == VERSION_RESPONSE.to_dict() + assert json.loads(result.output) == VERSION_RESPONSE.dict(by_alias=True) assert result.exit_code == 0 @@ -45,7 +45,7 @@ def test_version_json_pretty(): with mock_context(): result = runner.invoke(cli, ["--format", "json-pretty", "version", "--api"]) - assert json.loads(result.output) == VERSION_RESPONSE.to_dict() + assert json.loads(result.output) == VERSION_RESPONSE.dict(by_alias=True) assert result.exit_code == 0 diff --git a/tests/testdata/analysis-list-simple.txt b/tests/testdata/analysis-list-simple.txt index 68e199f..72a7434 100644 --- a/tests/testdata/analysis-list-simple.txt +++ b/tests/testdata/analysis-list-simple.txt @@ -1,20 +1,20 @@ UUID: ed6b2347-68b7-4ef3-b85c-4340ae404867 -Submitted at: 2019-09-10 17:15:11.267000+00:00 +Submitted at: 2019-09-10T17:15:11.267Z Status: Finished UUID: e6566fc9-ebc1-4d04-ae5d-6f3b1873290a -Submitted at: 2019-09-10 17:15:10.645000+00:00 +Submitted at: 2019-09-10T17:15:10.645Z Status: Finished UUID: b87f0174-ef09-4fac-9d3c-97c3fdf01782 -Submitted at: 2019-09-10 17:15:09.836000+00:00 +Submitted at: 2019-09-10T17:15:09.836Z Status: Finished UUID: 2056caf6-25d7-4ce8-a633-d10a8746d5dd -Submitted at: 2019-09-10 17:12:42.341000+00:00 +Submitted at: 2019-09-10T17:12:42.341Z Status: Finished UUID: 63eb5611-ba4b-46e8-9e40-f735a0b86fd9 -Submitted at: 2019-09-10 17:12:41.645000+00:00 +Submitted at: 2019-09-10T17:12:41.645Z Status: Finished diff --git a/tests/testdata/analysis-list-table.txt b/tests/testdata/analysis-list-table.txt index bb0a64b..0f051cf 100644 --- a/tests/testdata/analysis-list-table.txt +++ b/tests/testdata/analysis-list-table.txt @@ -1,11 +1,11 @@ -╒══════════════════════════════════════╤══════════╤═══════╤══════════════════════════════════╕ -│ ed6b2347-68b7-4ef3-b85c-4340ae404867 │ Finished │ pythx │ 2019-09-10 17:15:11.267000+00:00 │ -├──────────────────────────────────────┼──────────┼───────┼──────────────────────────────────┤ -│ e6566fc9-ebc1-4d04-ae5d-6f3b1873290a │ Finished │ pythx │ 2019-09-10 17:15:10.645000+00:00 │ -├──────────────────────────────────────┼──────────┼───────┼──────────────────────────────────┤ -│ b87f0174-ef09-4fac-9d3c-97c3fdf01782 │ Finished │ pythx │ 2019-09-10 17:15:09.836000+00:00 │ -├──────────────────────────────────────┼──────────┼───────┼──────────────────────────────────┤ -│ 2056caf6-25d7-4ce8-a633-d10a8746d5dd │ Finished │ pythx │ 2019-09-10 17:12:42.341000+00:00 │ -├──────────────────────────────────────┼──────────┼───────┼──────────────────────────────────┤ -│ 63eb5611-ba4b-46e8-9e40-f735a0b86fd9 │ Finished │ pythx │ 2019-09-10 17:12:41.645000+00:00 │ -╘══════════════════════════════════════╧══════════╧═══════╧══════════════════════════════════╛ +╒══════════════════════════════════════╤══════════╤═══════╤══════════════════════════╕ +│ ed6b2347-68b7-4ef3-b85c-4340ae404867 │ Finished │ pythx │ 2019-09-10T17:15:11.267Z │ +├──────────────────────────────────────┼──────────┼───────┼──────────────────────────┤ +│ e6566fc9-ebc1-4d04-ae5d-6f3b1873290a │ Finished │ pythx │ 2019-09-10T17:15:10.645Z │ +├──────────────────────────────────────┼──────────┼───────┼──────────────────────────┤ +│ b87f0174-ef09-4fac-9d3c-97c3fdf01782 │ Finished │ pythx │ 2019-09-10T17:15:09.836Z │ +├──────────────────────────────────────┼──────────┼───────┼──────────────────────────┤ +│ 2056caf6-25d7-4ce8-a633-d10a8746d5dd │ Finished │ pythx │ 2019-09-10T17:12:42.341Z │ +├──────────────────────────────────────┼──────────┼───────┼──────────────────────────┤ +│ 63eb5611-ba4b-46e8-9e40-f735a0b86fd9 │ Finished │ pythx │ 2019-09-10T17:12:41.645Z │ +╘══════════════════════════════════════╧══════════╧═══════╧══════════════════════════╛ diff --git a/tests/testdata/analysis-status-simple.txt b/tests/testdata/analysis-status-simple.txt index 01aa140..1302450 100644 --- a/tests/testdata/analysis-status-simple.txt +++ b/tests/testdata/analysis-status-simple.txt @@ -1,4 +1,4 @@ UUID: ab9092f7-54d0-480f-9b63-1bb1508280e2 -Submitted at: 2019-09-05 20:34:27.606000+00:00 +Submitted at: 2019-09-05T20:34:27.606Z Status: Finished diff --git a/tests/testdata/analysis-status-table.txt b/tests/testdata/analysis-status-table.txt index cecd6c8..3af9ae9 100644 --- a/tests/testdata/analysis-status-table.txt +++ b/tests/testdata/analysis-status-table.txt @@ -1,35 +1,29 @@ -╒════════════════════╤═══════════════════════════════════════════════╕ -│ uuid │ ab9092f7-54d0-480f-9b63-1bb1508280e2 │ -├────────────────────┼───────────────────────────────────────────────┤ -│ apiVersion │ v1.4.33-1-g1a235db │ -├────────────────────┼───────────────────────────────────────────────┤ -│ mythrilVersion │ 0.21.14 │ -├────────────────────┼───────────────────────────────────────────────┤ -│ harveyVersion │ 0.0.34 │ -├────────────────────┼───────────────────────────────────────────────┤ -│ maruVersion │ 0.5.4 │ -├────────────────────┼───────────────────────────────────────────────┤ -│ queueTime │ 507 │ -├────────────────────┼───────────────────────────────────────────────┤ -│ runTime │ 30307 │ -├────────────────────┼───────────────────────────────────────────────┤ -│ status │ Finished │ -├────────────────────┼───────────────────────────────────────────────┤ -│ submittedAt │ 2019-09-05T20:34:27.606Z │ -├────────────────────┼───────────────────────────────────────────────┤ -│ submittedBy │ 5d6fca7fef1fc700129b6efa │ -├────────────────────┼───────────────────────────────────────────────┤ -│ mainSource │ test.sol │ -├────────────────────┼───────────────────────────────────────────────┤ -│ numSources │ 0 │ -├────────────────────┼───────────────────────────────────────────────┤ -│ numVulnerabilities │ {'high': 0, 'medium': 0, 'low': 0, 'none': 0} │ -├────────────────────┼───────────────────────────────────────────────┤ -│ clientToolName │ pythx │ -├────────────────────┼───────────────────────────────────────────────┤ -│ analysisMode │ full │ -├────────────────────┼───────────────────────────────────────────────┤ -│ groupName │ test-group │ -├────────────────────┼───────────────────────────────────────────────┤ -│ groupId │ 5dc410095e78890011fba1a4 │ -╘════════════════════╧═══════════════════════════════════════════════╛ +╒═════════════════╤══════════════════════════════════════╕ +│ UUID │ ab9092f7-54d0-480f-9b63-1bb1508280e2 │ +├─────────────────┼──────────────────────────────────────┤ +│ API Version │ v1.4.33-1-g1a235db │ +├─────────────────┼──────────────────────────────────────┤ +│ Mythril Version │ 0.21.14 │ +├─────────────────┼──────────────────────────────────────┤ +│ Harvey Version │ 0.0.34 │ +├─────────────────┼──────────────────────────────────────┤ +│ Maru Version │ 0.5.4 │ +├─────────────────┼──────────────────────────────────────┤ +│ Queue Time │ 507 │ +├─────────────────┼──────────────────────────────────────┤ +│ Run Time │ 30307 │ +├─────────────────┼──────────────────────────────────────┤ +│ Status │ Finished │ +├─────────────────┼──────────────────────────────────────┤ +│ Submitted At │ 2019-09-05T20:34:27.606Z │ +├─────────────────┼──────────────────────────────────────┤ +│ Submitted By │ 5d6fca7fef1fc700129b6efa │ +├─────────────────┼──────────────────────────────────────┤ +│ Tool Name │ pythx │ +├─────────────────┼──────────────────────────────────────┤ +│ Group ID │ 5dc410095e78890011fba1a4 │ +├─────────────────┼──────────────────────────────────────┤ +│ Group Name │ test-group │ +├─────────────────┼──────────────────────────────────────┤ +│ Analysis Mode │ full │ +╘═════════════════╧══════════════════════════════════════╛ diff --git a/tests/testdata/brownie-artifact.json b/tests/testdata/brownie-artifact.json new file mode 100644 index 0000000..34efce4 --- /dev/null +++ b/tests/testdata/brownie-artifact.json @@ -0,0 +1,4813 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "message", + "type": "string" + } + ], + "name": "AssertionFailed", + "type": "event" + }, + { + "inputs": [], + "name": "Bar", + "outputs": [ + { + "internalType": "int256", + "name": "RET_0", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "b", + "type": "bool" + } + ], + "name": "SetNext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "allSourcePaths": { + "0": "contracts/sample.sol" + }, + "ast": { + "absolutePath": "contracts/sample.sol", + "exportedSymbols": { + "Foo": [ + 171 + ] + }, + "id": 172, + "license": null, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "<", + "0.8", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "0:23:0" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 171, + "linearizedBaseContracts": [ + 171 + ], + "name": "Foo", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": null, + "id": 5, + "name": "AssertionFailed", + "nodeType": "EventDefinition", + "parameters": { + "id": 4, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3, + "indexed": false, + "mutability": "mutable", + "name": "message", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 5, + "src": "66:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "66:6:0", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "65:16:0" + }, + "src": "44:38:0" + }, + { + "constant": false, + "id": 7, + "mutability": "mutable", + "name": "x", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 171, + "src": "88:16:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 6, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "88:6:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "private" + }, + { + "body": { + "id": 32, + "nodeType": "Block", + "src": "156:164:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 15, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 12, + "name": "RET_0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10, + "src": "166:5:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13, + "name": "_original_Foo_Bar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 151, + "src": "174:17:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_int256_$", + "typeString": "function () view returns (int256)" + } + }, + "id": 14, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "174:19:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "166:27:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 16, + "nodeType": "ExpressionStatement", + "src": "166:27:0" + }, + { + "condition": { + "argumentTypes": null, + "id": 21, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "207:10:0", + "subExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 19, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 17, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "209:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3139", + "id": 18, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "214:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_19_by_1", + "typeString": "int_const 19" + }, + "value": "19" + }, + "src": "209:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 20, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "208:9:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 31, + "nodeType": "IfStatement", + "src": "203:111:0", + "trueBody": { + "id": 30, + "nodeType": "Block", + "src": "219:95:0", + "statements": [ + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "303a20546869732073686f756c64206661696c", + "id": 23, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "254:21:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7379ea5b6329927764dc2a90425e24f5f69809aa582db010111d15cc830e8a08", + "typeString": "literal_string \"0: This should fail\"" + }, + "value": "0: This should fail" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_7379ea5b6329927764dc2a90425e24f5f69809aa582db010111d15cc830e8a08", + "typeString": "literal_string \"0: This should fail\"" + } + ], + "id": 22, + "name": "AssertionFailed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "238:15:0", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory)" + } + }, + "id": 24, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "238:38:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 25, + "nodeType": "EmitStatement", + "src": "233:43:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 27, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "297:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 26, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "290:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 28, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "290:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 29, + "nodeType": "ExpressionStatement", + "src": "290:13:0" + } + ] + } + } + ] + }, + "documentation": null, + "functionSelector": "b0a378b0", + "id": 33, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "Bar", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 8, + "nodeType": "ParameterList", + "parameters": [], + "src": "123:2:0" + }, + "returnParameters": { + "id": 11, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10, + "mutability": "mutable", + "name": "RET_0", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 33, + "src": "142:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 9, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "142:6:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "141:14:0" + }, + "scope": 171, + "src": "111:209:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 150, + "nodeType": "Block", + "src": "385:855:0", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 40, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 38, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "399:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3130", + "id": 39, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "404:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "src": "399:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 48, + "nodeType": "IfStatement", + "src": "395:73:0", + "trueBody": { + "id": 47, + "nodeType": "Block", + "src": "408:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 42, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "429:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 41, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "422:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 43, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "422:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 44, + "nodeType": "ExpressionStatement", + "src": "422:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "31", + "id": 45, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "456:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "functionReturnParameters": 37, + "id": 46, + "nodeType": "Return", + "src": "449:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 51, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 49, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "481:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3330", + "id": 50, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "486:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_30_by_1", + "typeString": "int_const 30" + }, + "value": "30" + }, + "src": "481:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 59, + "nodeType": "IfStatement", + "src": "477:73:0", + "trueBody": { + "id": 58, + "nodeType": "Block", + "src": "490:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 53, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "511:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 52, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "504:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 54, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "504:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 55, + "nodeType": "ExpressionStatement", + "src": "504:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "33", + "id": 56, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "538:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "functionReturnParameters": 37, + "id": 57, + "nodeType": "Return", + "src": "531:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 62, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 60, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "563:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3530", + "id": 61, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "568:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "src": "563:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 70, + "nodeType": "IfStatement", + "src": "559:73:0", + "trueBody": { + "id": 69, + "nodeType": "Block", + "src": "572:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 64, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "593:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 63, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "586:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 65, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "586:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 66, + "nodeType": "ExpressionStatement", + "src": "586:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "35", + "id": 67, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "620:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "functionReturnParameters": 37, + "id": 68, + "nodeType": "Return", + "src": "613:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 73, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 71, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "645:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3730", + "id": 72, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "650:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_70_by_1", + "typeString": "int_const 70" + }, + "value": "70" + }, + "src": "645:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 81, + "nodeType": "IfStatement", + "src": "641:73:0", + "trueBody": { + "id": 80, + "nodeType": "Block", + "src": "654:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 75, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "675:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 74, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "668:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 76, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "668:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 77, + "nodeType": "ExpressionStatement", + "src": "668:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "37", + "id": 78, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "702:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "functionReturnParameters": 37, + "id": 79, + "nodeType": "Return", + "src": "695:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 84, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 82, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "727:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3930", + "id": 83, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "732:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_90_by_1", + "typeString": "int_const 90" + }, + "value": "90" + }, + "src": "727:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 92, + "nodeType": "IfStatement", + "src": "723:73:0", + "trueBody": { + "id": 91, + "nodeType": "Block", + "src": "736:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 86, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "757:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 85, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "750:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 87, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "750:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 88, + "nodeType": "ExpressionStatement", + "src": "750:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "39", + "id": 89, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "784:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_9_by_1", + "typeString": "int_const 9" + }, + "value": "9" + }, + "functionReturnParameters": 37, + "id": 90, + "nodeType": "Return", + "src": "777:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 95, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 93, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "809:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313130", + "id": 94, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "814:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_110_by_1", + "typeString": "int_const 110" + }, + "value": "110" + }, + "src": "809:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 103, + "nodeType": "IfStatement", + "src": "805:75:0", + "trueBody": { + "id": 102, + "nodeType": "Block", + "src": "819:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 97, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "840:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 96, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "833:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 98, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "833:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 99, + "nodeType": "ExpressionStatement", + "src": "833:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3131", + "id": 100, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "867:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_11_by_1", + "typeString": "int_const 11" + }, + "value": "11" + }, + "functionReturnParameters": 37, + "id": 101, + "nodeType": "Return", + "src": "860:9:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 104, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "893:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313330", + "id": 105, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "898:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_130_by_1", + "typeString": "int_const 130" + }, + "value": "130" + }, + "src": "893:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 114, + "nodeType": "IfStatement", + "src": "889:75:0", + "trueBody": { + "id": 113, + "nodeType": "Block", + "src": "903:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 108, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "924:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 107, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "917:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "917:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 110, + "nodeType": "ExpressionStatement", + "src": "917:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3133", + "id": 111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "951:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_13_by_1", + "typeString": "int_const 13" + }, + "value": "13" + }, + "functionReturnParameters": 37, + "id": 112, + "nodeType": "Return", + "src": "944:9:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 115, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "977:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313530", + "id": 116, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "982:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_150_by_1", + "typeString": "int_const 150" + }, + "value": "150" + }, + "src": "977:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 125, + "nodeType": "IfStatement", + "src": "973:75:0", + "trueBody": { + "id": 124, + "nodeType": "Block", + "src": "987:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 119, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1008:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 118, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "1001:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1001:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 121, + "nodeType": "ExpressionStatement", + "src": "1001:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3135", + "id": 122, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1035:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_15_by_1", + "typeString": "int_const 15" + }, + "value": "15" + }, + "functionReturnParameters": 37, + "id": 123, + "nodeType": "Return", + "src": "1028:9:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 126, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "1061:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313730", + "id": 127, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1066:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_170_by_1", + "typeString": "int_const 170" + }, + "value": "170" + }, + "src": "1061:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 136, + "nodeType": "IfStatement", + "src": "1057:75:0", + "trueBody": { + "id": 135, + "nodeType": "Block", + "src": "1071:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 130, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1092:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 129, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "1085:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1085:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 132, + "nodeType": "ExpressionStatement", + "src": "1085:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3137", + "id": 133, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1119:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_17_by_1", + "typeString": "int_const 17" + }, + "value": "17" + }, + "functionReturnParameters": 37, + "id": 134, + "nodeType": "Return", + "src": "1112:9:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 137, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "1145:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313930", + "id": 138, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1150:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_190_by_1", + "typeString": "int_const 190" + }, + "value": "190" + }, + "src": "1145:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 147, + "nodeType": "IfStatement", + "src": "1141:75:0", + "trueBody": { + "id": 146, + "nodeType": "Block", + "src": "1155:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 141, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1176:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 140, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "1169:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1169:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 143, + "nodeType": "ExpressionStatement", + "src": "1169:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3139", + "id": 144, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1203:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_19_by_1", + "typeString": "int_const 19" + }, + "value": "19" + }, + "functionReturnParameters": 37, + "id": 145, + "nodeType": "Return", + "src": "1196:9:0" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "30", + "id": 148, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1232:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 37, + "id": 149, + "nodeType": "Return", + "src": "1225:8:0" + } + ] + }, + "documentation": null, + "id": 151, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_original_Foo_Bar", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 34, + "nodeType": "ParameterList", + "parameters": [], + "src": "352:2:0" + }, + "returnParameters": { + "id": 37, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 36, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 151, + "src": "377:6:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 35, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "377:6:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "376:8:0" + }, + "scope": 171, + "src": "326:914:0", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 169, + "nodeType": "Block", + "src": "1278:42:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 156, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "1288:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 166, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "hexValue": "32", + "id": 157, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1293:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "id": 158, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "1297:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1293:5:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 160, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1292:7:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "condition": { + "argumentTypes": null, + "id": 161, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 153, + "src": "1303:1:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 163, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1311:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1303:9:0", + "trueExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 162, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1307:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "id": 165, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1302:11:0", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "1292:21:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1288:25:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 168, + "nodeType": "ExpressionStatement", + "src": "1288:25:0" + } + ] + }, + "documentation": null, + "functionSelector": "df5b7227", + "id": 170, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "SetNext", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 154, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 153, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 170, + "src": "1263:6:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 152, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1263:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1262:8:0" + }, + "returnParameters": { + "id": 155, + "nodeType": "ParameterList", + "parameters": [], + "src": "1278:0:0" + }, + "scope": 171, + "src": "1246:74:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + } + ], + "scope": 172, + "src": "25:1297:0" + } + ], + "src": "0:1322:0" + }, + "bytecode": "608060405234801561001057600080fd5b506101c8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063b0a378b01461003b578063df5b722714610055575b600080fd5b610043610076565b60408051918252519081900360200190f35b6100746004803603602081101561006b57600080fd5b503515156100e7565b005b6000610080610109565b90506000546013146100e457604080516020808252601390820152720c0e88151a1a5cc81cda1bdd5b190819985a5b606a1b8183015290517fb42604cb105a16c8f6db8a41e6b00c0c1b4826465e8bc504b3eb3e88b3e6a4a09181900360600190a1fe5b90565b806100f35760006100f6565b60015b60ff166000546002020160008190555050565b60008054600a141561011757fe5b600054601e141561012457fe5b6000546032141561013157fe5b6000546046141561013e57fe5b600054605a141561014b57fe5b600054606e141561015857fe5b6000546082141561016557fe5b6000546096141561017257fe5b60005460aa141561017f57fe5b60005460be141561018c57fe5b5060009056fea2646970667358221220d15c0974595ed5c9a5da68377d16635bfa92f13a2af22bf0b52f63632505f04664736f6c634300060c0033", + "bytecodeSha1": "ccde364430bb9e46053b700e953a13e72469a7ad", + "compiler": { + "evm_version": "istanbul", + "optimizer": { + "enabled": true, + "runs": 200 + }, + "version": "0.6.12+commit.27d51765" + }, + "contractName": "Foo", + "coverageMap": { + "branches": { + "0": { + "Foo.SetNext": { + "15": [ + 1303, + 1304, + true + ] + }, + "Foo._original_Foo_Bar": { + "16": [ + 399, + 406, + false + ], + "17": [ + 481, + 488, + false + ], + "18": [ + 563, + 570, + false + ], + "19": [ + 645, + 652, + false + ], + "20": [ + 727, + 734, + false + ], + "21": [ + 809, + 817, + false + ], + "22": [ + 893, + 901, + false + ], + "23": [ + 977, + 985, + false + ], + "24": [ + 1061, + 1069, + false + ], + "25": [ + 1145, + 1153, + false + ] + } + } + }, + "statements": { + "0": { + "Foo.Bar": { + "0": [ + 166, + 193 + ], + "1": [ + 233, + 276 + ], + "2": [ + 290, + 303 + ] + }, + "Foo.SetNext": { + "3": [ + 1288, + 1313 + ] + }, + "Foo._original_Foo_Bar": { + "4": [ + 422, + 435 + ], + "5": [ + 504, + 517 + ], + "6": [ + 586, + 599 + ], + "7": [ + 668, + 681 + ], + "8": [ + 750, + 763 + ], + "9": [ + 833, + 846 + ], + "10": [ + 917, + 930 + ], + "11": [ + 1001, + 1014 + ], + "12": [ + 1085, + 1098 + ], + "13": [ + 1169, + 1182 + ], + "14": [ + 1225, + 1233 + ] + } + } + } + }, + "dependencies": [], + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100365760003560e01c8063b0a378b01461003b578063df5b722714610055575b600080fd5b610043610076565b60408051918252519081900360200190f35b6100746004803603602081101561006b57600080fd5b503515156100e7565b005b6000610080610109565b90506000546013146100e457604080516020808252601390820152720c0e88151a1a5cc81cda1bdd5b190819985a5b606a1b8183015290517fb42604cb105a16c8f6db8a41e6b00c0c1b4826465e8bc504b3eb3e88b3e6a4a09181900360600190a1fe5b90565b806100f35760006100f6565b60015b60ff166000546002020160008190555050565b60008054600a141561011757fe5b600054601e141561012457fe5b6000546032141561013157fe5b6000546046141561013e57fe5b600054605a141561014b57fe5b600054606e141561015857fe5b6000546082141561016557fe5b6000546096141561017257fe5b60005460aa141561017f57fe5b60005460be141561018c57fe5b5060009056fea2646970667358221220d15c0974595ed5c9a5da68377d16635bfa92f13a2af22bf0b52f63632505f04664736f6c634300060c0033", + "deployedSourceMap": "25:1297:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;111:209;;;:::i;:::-;;;;;;;;;;;;;;;;1246:74;;;;;;;;;;;;;;;;-1:-1:-1;1246:74:0;;;;:::i;:::-;;111:209;142:12;174:19;:17;:19::i;:::-;166:27;;209:1;;214:2;209:7;203:111;;238:38;;;;;;;;;;;;-1:-1:-1;;;238:38:0;;;;;;;;;;;;;;;290:13;;111:209;:::o;1246:74::-;1303:1;:9;;1311:1;1303:9;;;1307:1;1303:9;1292:21;;1297:1;;1293;:5;1292:21;1288:1;:25;;;;1246:74;:::o;326:914::-;377:6;399:1;;404:2;399:7;395:73;;;422:13;395:73;481:1;;486:2;481:7;477:73;;;504:13;477:73;563:1;;568:2;563:7;559:73;;;586:13;559:73;645:1;;650:2;645:7;641:73;;;668:13;641:73;727:1;;732:2;727:7;723:73;;;750:13;723:73;809:1;;814:3;809:8;805:75;;;833:13;805:75;893:1;;898:3;893:8;889:75;;;917:13;889:75;977:1;;982:3;977:8;973:75;;;1001:13;973:75;1061:1;;1066:3;1061:8;1057:75;;;1085:13;1057:75;1145:1;;1150:3;1145:8;1141:75;;;1169:13;1141:75;-1:-1:-1;1232:1:0;326:914;:::o", + "language": "Solidity", + "natspec": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "offset": [ + 25, + 1322 + ], + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB0A378B0 EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xDF5B7227 EQ PUSH2 0x55 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x76 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x74 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x6B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD ISZERO ISZERO PUSH2 0xE7 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH2 0x80 PUSH2 0x109 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 SLOAD PUSH1 0x13 EQ PUSH2 0xE4 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x13 SWAP1 DUP3 ADD MSTORE PUSH19 0xC0E88151A1A5CC81CDA1BDD5B190819985A5B PUSH1 0x6A SHL DUP2 DUP4 ADD MSTORE SWAP1 MLOAD PUSH32 0xB42604CB105A16C8F6DB8A41E6B00C0C1B4826465E8BC504B3EB3E88B3E6A4A0 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 INVALID JUMPDEST SWAP1 JUMP JUMPDEST DUP1 PUSH2 0xF3 JUMPI PUSH1 0x0 PUSH2 0xF6 JUMP JUMPDEST PUSH1 0x1 JUMPDEST PUSH1 0xFF AND PUSH1 0x0 SLOAD PUSH1 0x2 MUL ADD PUSH1 0x0 DUP2 SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0xA EQ ISZERO PUSH2 0x117 JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1E EQ ISZERO PUSH2 0x124 JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x32 EQ ISZERO PUSH2 0x131 JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x46 EQ ISZERO PUSH2 0x13E JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x5A EQ ISZERO PUSH2 0x14B JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x6E EQ ISZERO PUSH2 0x158 JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x82 EQ ISZERO PUSH2 0x165 JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x96 EQ ISZERO PUSH2 0x172 JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xAA EQ ISZERO PUSH2 0x17F JUMPI INVALID JUMPDEST PUSH1 0x0 SLOAD PUSH1 0xBE EQ ISZERO PUSH2 0x18C JUMPI INVALID JUMPDEST POP PUSH1 0x0 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD1 0x5C MULMOD PUSH21 0x595ED5C9A5DA68377D16635BFA92F13A2AF22BF0B5 0x2F PUSH4 0x632505F0 CHAINID PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ", + "pcMap": { + "0": { + "offset": [ + 25, + 1322 + ], + "op": "PUSH1", + "path": "0", + "value": "0x80" + }, + "2": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "4": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "MSTORE", + "path": "0" + }, + "5": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "CALLVALUE", + "path": "0" + }, + "6": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "DUP1", + "path": "0" + }, + "7": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "ISZERO", + "path": "0" + }, + "8": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH2", + "path": "0", + "value": "0x10" + }, + "11": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "JUMPI", + "path": "0" + }, + "12": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "14": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "DUP1", + "path": "0" + }, + "15": { + "dev": "Cannot send ether to nonpayable function", + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "REVERT", + "path": "0" + }, + "16": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "JUMPDEST", + "path": "0" + }, + "17": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "POP", + "path": "0" + }, + "18": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH1", + "path": "0", + "value": "0x4" + }, + "20": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "CALLDATASIZE", + "path": "0" + }, + "21": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "LT", + "path": "0" + }, + "22": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH2", + "path": "0", + "value": "0x36" + }, + "25": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "JUMPI", + "path": "0" + }, + "26": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "28": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "CALLDATALOAD", + "path": "0" + }, + "29": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH1", + "path": "0", + "value": "0xE0" + }, + "31": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "SHR", + "path": "0" + }, + "32": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "DUP1", + "path": "0" + }, + "33": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH4", + "path": "0", + "value": "0xB0A378B0" + }, + "38": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "EQ", + "path": "0" + }, + "39": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH2", + "path": "0", + "value": "0x3B" + }, + "42": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "JUMPI", + "path": "0" + }, + "43": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "DUP1", + "path": "0" + }, + "44": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH4", + "path": "0", + "value": "0xDF5B7227" + }, + "49": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "EQ", + "path": "0" + }, + "50": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH2", + "path": "0", + "value": "0x55" + }, + "53": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "JUMPI", + "path": "0" + }, + "54": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "JUMPDEST", + "path": "0" + }, + "55": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "57": { + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "DUP1", + "path": "0" + }, + "58": { + "first_revert": true, + "fn": null, + "offset": [ + 25, + 1322 + ], + "op": "REVERT", + "path": "0" + }, + "59": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "JUMPDEST", + "path": "0" + }, + "60": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "PUSH2", + "path": "0", + "value": "0x43" + }, + "63": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "PUSH2", + "path": "0", + "value": "0x76" + }, + "66": { + "fn": "Foo.Bar", + "jump": "i", + "offset": [ + 111, + 320 + ], + "op": "JUMP", + "path": "0" + }, + "67": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "JUMPDEST", + "path": "0" + }, + "68": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "PUSH1", + "path": "0", + "value": "0x40" + }, + "70": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "DUP1", + "path": "0" + }, + "71": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "MLOAD", + "path": "0" + }, + "72": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "SWAP2", + "path": "0" + }, + "73": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "DUP3", + "path": "0" + }, + "74": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "MSTORE", + "path": "0" + }, + "75": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "MLOAD", + "path": "0" + }, + "76": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "SWAP1", + "path": "0" + }, + "77": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "DUP2", + "path": "0" + }, + "78": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "SWAP1", + "path": "0" + }, + "79": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "SUB", + "path": "0" + }, + "80": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "82": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "ADD", + "path": "0" + }, + "83": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "SWAP1", + "path": "0" + }, + "84": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "RETURN", + "path": "0" + }, + "85": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "JUMPDEST", + "path": "0" + }, + "86": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "PUSH2", + "path": "0", + "value": "0x74" + }, + "89": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "PUSH1", + "path": "0", + "value": "0x4" + }, + "91": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "DUP1", + "path": "0" + }, + "92": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "CALLDATASIZE", + "path": "0" + }, + "93": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "SUB", + "path": "0" + }, + "94": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "96": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "DUP2", + "path": "0" + }, + "97": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "LT", + "path": "0" + }, + "98": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "ISZERO", + "path": "0" + }, + "99": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "PUSH2", + "path": "0", + "value": "0x6B" + }, + "102": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "JUMPI", + "path": "0" + }, + "103": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "105": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "DUP1", + "path": "0" + }, + "106": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "REVERT", + "path": "0" + }, + "107": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "JUMPDEST", + "path": "0" + }, + "108": { + "op": "POP" + }, + "109": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "CALLDATALOAD", + "path": "0" + }, + "110": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "ISZERO", + "path": "0" + }, + "111": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "ISZERO", + "path": "0" + }, + "112": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "PUSH2", + "path": "0", + "value": "0xE7" + }, + "115": { + "fn": "Foo.SetNext", + "jump": "i", + "offset": [ + 1246, + 1320 + ], + "op": "JUMP", + "path": "0" + }, + "116": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "JUMPDEST", + "path": "0" + }, + "117": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "STOP", + "path": "0" + }, + "118": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "JUMPDEST", + "path": "0" + }, + "119": { + "fn": "Foo.Bar", + "offset": [ + 142, + 154 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "121": { + "fn": "Foo.Bar", + "offset": [ + 174, + 193 + ], + "op": "PUSH2", + "path": "0", + "statement": 0, + "value": "0x80" + }, + "124": { + "fn": "Foo.Bar", + "offset": [ + 174, + 191 + ], + "op": "PUSH2", + "path": "0", + "value": "0x109" + }, + "127": { + "fn": "Foo.Bar", + "jump": "i", + "offset": [ + 174, + 193 + ], + "op": "JUMP", + "path": "0" + }, + "128": { + "fn": "Foo.Bar", + "offset": [ + 174, + 193 + ], + "op": "JUMPDEST", + "path": "0" + }, + "129": { + "fn": "Foo.Bar", + "offset": [ + 166, + 193 + ], + "op": "SWAP1", + "path": "0" + }, + "130": { + "fn": "Foo.Bar", + "offset": [ + 166, + 193 + ], + "op": "POP", + "path": "0" + }, + "131": { + "fn": "Foo.Bar", + "offset": [ + 209, + 210 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "133": { + "fn": "Foo.Bar", + "offset": [ + 209, + 210 + ], + "op": "SLOAD", + "path": "0" + }, + "134": { + "fn": "Foo.Bar", + "offset": [ + 214, + 216 + ], + "op": "PUSH1", + "path": "0", + "value": "0x13" + }, + "136": { + "fn": "Foo.Bar", + "offset": [ + 209, + 216 + ], + "op": "EQ", + "path": "0" + }, + "137": { + "fn": "Foo.Bar", + "offset": [ + 203, + 314 + ], + "op": "PUSH2", + "path": "0", + "value": "0xE4" + }, + "140": { + "fn": "Foo.Bar", + "offset": [ + 203, + 314 + ], + "op": "JUMPI", + "path": "0" + }, + "141": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "PUSH1", + "path": "0", + "statement": 1, + "value": "0x40" + }, + "143": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "DUP1", + "path": "0" + }, + "144": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "MLOAD", + "path": "0" + }, + "145": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "PUSH1", + "path": "0", + "value": "0x20" + }, + "147": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "DUP1", + "path": "0" + }, + "148": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "DUP3", + "path": "0" + }, + "149": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "MSTORE", + "path": "0" + }, + "150": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "PUSH1", + "path": "0", + "value": "0x13" + }, + "152": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "SWAP1", + "path": "0" + }, + "153": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "DUP3", + "path": "0" + }, + "154": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "ADD", + "path": "0" + }, + "155": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "MSTORE", + "path": "0" + }, + "156": { + "op": "PUSH19", + "value": "0xC0E88151A1A5CC81CDA1BDD5B190819985A5B" + }, + "176": { + "op": "PUSH1", + "value": "0x6A" + }, + "178": { + "op": "SHL" + }, + "179": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "DUP2", + "path": "0" + }, + "180": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "DUP4", + "path": "0" + }, + "181": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "ADD", + "path": "0" + }, + "182": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "MSTORE", + "path": "0" + }, + "183": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "SWAP1", + "path": "0" + }, + "184": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "MLOAD", + "path": "0" + }, + "185": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "PUSH32", + "path": "0", + "value": "0xB42604CB105A16C8F6DB8A41E6B00C0C1B4826465E8BC504B3EB3E88B3E6A4A0" + }, + "218": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "SWAP2", + "path": "0" + }, + "219": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "DUP2", + "path": "0" + }, + "220": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "SWAP1", + "path": "0" + }, + "221": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "SUB", + "path": "0" + }, + "222": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "PUSH1", + "path": "0", + "value": "0x60" + }, + "224": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "ADD", + "path": "0" + }, + "225": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "SWAP1", + "path": "0" + }, + "226": { + "fn": "Foo.Bar", + "offset": [ + 238, + 276 + ], + "op": "LOG1", + "path": "0" + }, + "227": { + "fn": "Foo.Bar", + "offset": [ + 290, + 303 + ], + "op": "INVALID", + "path": "0", + "statement": 2 + }, + "228": { + "fn": "Foo.Bar", + "offset": [ + 290, + 303 + ], + "op": "JUMPDEST", + "path": "0" + }, + "229": { + "fn": "Foo.Bar", + "offset": [ + 111, + 320 + ], + "op": "SWAP1", + "path": "0" + }, + "230": { + "fn": "Foo.Bar", + "jump": "o", + "offset": [ + 111, + 320 + ], + "op": "JUMP", + "path": "0" + }, + "231": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "JUMPDEST", + "path": "0" + }, + "232": { + "branch": 15, + "fn": "Foo.SetNext", + "offset": [ + 1303, + 1304 + ], + "op": "DUP1", + "path": "0", + "statement": 3 + }, + "233": { + "fn": "Foo.SetNext", + "offset": [ + 1303, + 1312 + ], + "op": "PUSH2", + "path": "0", + "value": "0xF3" + }, + "236": { + "branch": 15, + "fn": "Foo.SetNext", + "offset": [ + 1303, + 1312 + ], + "op": "JUMPI", + "path": "0" + }, + "237": { + "fn": "Foo.SetNext", + "offset": [ + 1311, + 1312 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "239": { + "fn": "Foo.SetNext", + "offset": [ + 1303, + 1312 + ], + "op": "PUSH2", + "path": "0", + "value": "0xF6" + }, + "242": { + "fn": "Foo.SetNext", + "offset": [ + 1303, + 1312 + ], + "op": "JUMP", + "path": "0" + }, + "243": { + "fn": "Foo.SetNext", + "offset": [ + 1303, + 1312 + ], + "op": "JUMPDEST", + "path": "0" + }, + "244": { + "fn": "Foo.SetNext", + "offset": [ + 1307, + 1308 + ], + "op": "PUSH1", + "path": "0", + "value": "0x1" + }, + "246": { + "fn": "Foo.SetNext", + "offset": [ + 1303, + 1312 + ], + "op": "JUMPDEST", + "path": "0" + }, + "247": { + "fn": "Foo.SetNext", + "offset": [ + 1292, + 1313 + ], + "op": "PUSH1", + "path": "0", + "value": "0xFF" + }, + "249": { + "fn": "Foo.SetNext", + "offset": [ + 1292, + 1313 + ], + "op": "AND", + "path": "0" + }, + "250": { + "fn": "Foo.SetNext", + "offset": [ + 1297, + 1298 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "252": { + "fn": "Foo.SetNext", + "offset": [ + 1297, + 1298 + ], + "op": "SLOAD", + "path": "0" + }, + "253": { + "fn": "Foo.SetNext", + "offset": [ + 1293, + 1294 + ], + "op": "PUSH1", + "path": "0", + "value": "0x2" + }, + "255": { + "fn": "Foo.SetNext", + "offset": [ + 1293, + 1298 + ], + "op": "MUL", + "path": "0" + }, + "256": { + "fn": "Foo.SetNext", + "offset": [ + 1292, + 1313 + ], + "op": "ADD", + "path": "0" + }, + "257": { + "fn": "Foo.SetNext", + "offset": [ + 1288, + 1289 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "259": { + "fn": "Foo.SetNext", + "offset": [ + 1288, + 1313 + ], + "op": "DUP2", + "path": "0" + }, + "260": { + "fn": "Foo.SetNext", + "offset": [ + 1288, + 1313 + ], + "op": "SWAP1", + "path": "0" + }, + "261": { + "fn": "Foo.SetNext", + "offset": [ + 1288, + 1313 + ], + "op": "SSTORE", + "path": "0" + }, + "262": { + "fn": "Foo.SetNext", + "offset": [ + 1288, + 1313 + ], + "op": "POP", + "path": "0" + }, + "263": { + "fn": "Foo.SetNext", + "offset": [ + 1246, + 1320 + ], + "op": "POP", + "path": "0" + }, + "264": { + "fn": "Foo.SetNext", + "jump": "o", + "offset": [ + 1246, + 1320 + ], + "op": "JUMP", + "path": "0" + }, + "265": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 326, + 1240 + ], + "op": "JUMPDEST", + "path": "0" + }, + "266": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 377, + 383 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "268": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 399, + 400 + ], + "op": "DUP1", + "path": "0" + }, + "269": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 399, + 400 + ], + "op": "SLOAD", + "path": "0" + }, + "270": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 404, + 406 + ], + "op": "PUSH1", + "path": "0", + "value": "0xA" + }, + "272": { + "branch": 16, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 399, + 406 + ], + "op": "EQ", + "path": "0" + }, + "273": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 395, + 468 + ], + "op": "ISZERO", + "path": "0" + }, + "274": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 395, + 468 + ], + "op": "PUSH2", + "path": "0", + "value": "0x117" + }, + "277": { + "branch": 16, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 395, + 468 + ], + "op": "JUMPI", + "path": "0" + }, + "278": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 422, + 435 + ], + "op": "INVALID", + "path": "0", + "statement": 4 + }, + "279": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 395, + 468 + ], + "op": "JUMPDEST", + "path": "0" + }, + "280": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 481, + 482 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "282": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 481, + 482 + ], + "op": "SLOAD", + "path": "0" + }, + "283": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 486, + 488 + ], + "op": "PUSH1", + "path": "0", + "value": "0x1E" + }, + "285": { + "branch": 17, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 481, + 488 + ], + "op": "EQ", + "path": "0" + }, + "286": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 477, + 550 + ], + "op": "ISZERO", + "path": "0" + }, + "287": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 477, + 550 + ], + "op": "PUSH2", + "path": "0", + "value": "0x124" + }, + "290": { + "branch": 17, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 477, + 550 + ], + "op": "JUMPI", + "path": "0" + }, + "291": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 504, + 517 + ], + "op": "INVALID", + "path": "0", + "statement": 5 + }, + "292": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 477, + 550 + ], + "op": "JUMPDEST", + "path": "0" + }, + "293": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 563, + 564 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "295": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 563, + 564 + ], + "op": "SLOAD", + "path": "0" + }, + "296": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 568, + 570 + ], + "op": "PUSH1", + "path": "0", + "value": "0x32" + }, + "298": { + "branch": 18, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 563, + 570 + ], + "op": "EQ", + "path": "0" + }, + "299": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 559, + 632 + ], + "op": "ISZERO", + "path": "0" + }, + "300": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 559, + 632 + ], + "op": "PUSH2", + "path": "0", + "value": "0x131" + }, + "303": { + "branch": 18, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 559, + 632 + ], + "op": "JUMPI", + "path": "0" + }, + "304": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 586, + 599 + ], + "op": "INVALID", + "path": "0", + "statement": 6 + }, + "305": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 559, + 632 + ], + "op": "JUMPDEST", + "path": "0" + }, + "306": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 645, + 646 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "308": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 645, + 646 + ], + "op": "SLOAD", + "path": "0" + }, + "309": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 650, + 652 + ], + "op": "PUSH1", + "path": "0", + "value": "0x46" + }, + "311": { + "branch": 19, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 645, + 652 + ], + "op": "EQ", + "path": "0" + }, + "312": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 641, + 714 + ], + "op": "ISZERO", + "path": "0" + }, + "313": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 641, + 714 + ], + "op": "PUSH2", + "path": "0", + "value": "0x13E" + }, + "316": { + "branch": 19, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 641, + 714 + ], + "op": "JUMPI", + "path": "0" + }, + "317": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 668, + 681 + ], + "op": "INVALID", + "path": "0", + "statement": 7 + }, + "318": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 641, + 714 + ], + "op": "JUMPDEST", + "path": "0" + }, + "319": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 727, + 728 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "321": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 727, + 728 + ], + "op": "SLOAD", + "path": "0" + }, + "322": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 732, + 734 + ], + "op": "PUSH1", + "path": "0", + "value": "0x5A" + }, + "324": { + "branch": 20, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 727, + 734 + ], + "op": "EQ", + "path": "0" + }, + "325": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 723, + 796 + ], + "op": "ISZERO", + "path": "0" + }, + "326": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 723, + 796 + ], + "op": "PUSH2", + "path": "0", + "value": "0x14B" + }, + "329": { + "branch": 20, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 723, + 796 + ], + "op": "JUMPI", + "path": "0" + }, + "330": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 750, + 763 + ], + "op": "INVALID", + "path": "0", + "statement": 8 + }, + "331": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 723, + 796 + ], + "op": "JUMPDEST", + "path": "0" + }, + "332": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 809, + 810 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "334": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 809, + 810 + ], + "op": "SLOAD", + "path": "0" + }, + "335": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 814, + 817 + ], + "op": "PUSH1", + "path": "0", + "value": "0x6E" + }, + "337": { + "branch": 21, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 809, + 817 + ], + "op": "EQ", + "path": "0" + }, + "338": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 805, + 880 + ], + "op": "ISZERO", + "path": "0" + }, + "339": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 805, + 880 + ], + "op": "PUSH2", + "path": "0", + "value": "0x158" + }, + "342": { + "branch": 21, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 805, + 880 + ], + "op": "JUMPI", + "path": "0" + }, + "343": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 833, + 846 + ], + "op": "INVALID", + "path": "0", + "statement": 9 + }, + "344": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 805, + 880 + ], + "op": "JUMPDEST", + "path": "0" + }, + "345": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 893, + 894 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "347": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 893, + 894 + ], + "op": "SLOAD", + "path": "0" + }, + "348": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 898, + 901 + ], + "op": "PUSH1", + "path": "0", + "value": "0x82" + }, + "350": { + "branch": 22, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 893, + 901 + ], + "op": "EQ", + "path": "0" + }, + "351": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 889, + 964 + ], + "op": "ISZERO", + "path": "0" + }, + "352": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 889, + 964 + ], + "op": "PUSH2", + "path": "0", + "value": "0x165" + }, + "355": { + "branch": 22, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 889, + 964 + ], + "op": "JUMPI", + "path": "0" + }, + "356": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 917, + 930 + ], + "op": "INVALID", + "path": "0", + "statement": 10 + }, + "357": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 889, + 964 + ], + "op": "JUMPDEST", + "path": "0" + }, + "358": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 977, + 978 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "360": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 977, + 978 + ], + "op": "SLOAD", + "path": "0" + }, + "361": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 982, + 985 + ], + "op": "PUSH1", + "path": "0", + "value": "0x96" + }, + "363": { + "branch": 23, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 977, + 985 + ], + "op": "EQ", + "path": "0" + }, + "364": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 973, + 1048 + ], + "op": "ISZERO", + "path": "0" + }, + "365": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 973, + 1048 + ], + "op": "PUSH2", + "path": "0", + "value": "0x172" + }, + "368": { + "branch": 23, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 973, + 1048 + ], + "op": "JUMPI", + "path": "0" + }, + "369": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1001, + 1014 + ], + "op": "INVALID", + "path": "0", + "statement": 11 + }, + "370": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 973, + 1048 + ], + "op": "JUMPDEST", + "path": "0" + }, + "371": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1061, + 1062 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "373": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1061, + 1062 + ], + "op": "SLOAD", + "path": "0" + }, + "374": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1066, + 1069 + ], + "op": "PUSH1", + "path": "0", + "value": "0xAA" + }, + "376": { + "branch": 24, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1061, + 1069 + ], + "op": "EQ", + "path": "0" + }, + "377": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1057, + 1132 + ], + "op": "ISZERO", + "path": "0" + }, + "378": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1057, + 1132 + ], + "op": "PUSH2", + "path": "0", + "value": "0x17F" + }, + "381": { + "branch": 24, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1057, + 1132 + ], + "op": "JUMPI", + "path": "0" + }, + "382": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1085, + 1098 + ], + "op": "INVALID", + "path": "0", + "statement": 12 + }, + "383": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1057, + 1132 + ], + "op": "JUMPDEST", + "path": "0" + }, + "384": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1145, + 1146 + ], + "op": "PUSH1", + "path": "0", + "value": "0x0" + }, + "386": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1145, + 1146 + ], + "op": "SLOAD", + "path": "0" + }, + "387": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1150, + 1153 + ], + "op": "PUSH1", + "path": "0", + "value": "0xBE" + }, + "389": { + "branch": 25, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1145, + 1153 + ], + "op": "EQ", + "path": "0" + }, + "390": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1141, + 1216 + ], + "op": "ISZERO", + "path": "0" + }, + "391": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1141, + 1216 + ], + "op": "PUSH2", + "path": "0", + "value": "0x18C" + }, + "394": { + "branch": 25, + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1141, + 1216 + ], + "op": "JUMPI", + "path": "0" + }, + "395": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1169, + 1182 + ], + "op": "INVALID", + "path": "0", + "statement": 13 + }, + "396": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1141, + 1216 + ], + "op": "JUMPDEST", + "path": "0" + }, + "397": { + "op": "POP" + }, + "398": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 1232, + 1233 + ], + "op": "PUSH1", + "path": "0", + "statement": 14, + "value": "0x0" + }, + "400": { + "fn": "Foo._original_Foo_Bar", + "offset": [ + 326, + 1240 + ], + "op": "SWAP1", + "path": "0" + }, + "401": { + "fn": "Foo._original_Foo_Bar", + "jump": "o", + "offset": [ + 326, + 1240 + ], + "op": "JUMP", + "path": "0" + } + }, + "sha1": "f5847f356bb154708ea3a08bb3f3f69696886b0c", + "source": "pragma solidity <0.8.0;\n\ncontract Foo {\n event AssertionFailed(string message);\n\n int256 private x;\n\n function Bar() public returns (int256 RET_0) {\n RET_0 = _original_Foo_Bar();\n if (!(x == 19)) {\n emit AssertionFailed(\"0: This should fail\");\n assert(false);\n }\n }\n\n function _original_Foo_Bar() private view returns (int256) {\n if (x == 10) {\n assert(false);\n return 1;\n }\n if (x == 30) {\n assert(false);\n return 3;\n }\n if (x == 50) {\n assert(false);\n return 5;\n }\n if (x == 70) {\n assert(false);\n return 7;\n }\n if (x == 90) {\n assert(false);\n return 9;\n }\n if (x == 110) {\n assert(false);\n return 11;\n }\n if (x == 130) {\n assert(false);\n return 13;\n }\n if (x == 150) {\n assert(false);\n return 15;\n }\n if (x == 170) {\n assert(false);\n return 17;\n }\n if (x == 190) {\n assert(false);\n return 19;\n }\n return 0;\n }\n\n function SetNext(bool b) public {\n x = (2 * x) + (b ? 1 : 0);\n }\n}", + "sourceMap": "25:1297:0:-:0;;;;;;;;;;;;;;;;;;;", + "sourcePath": "contracts/sample.sol", + "type": "contract" +} diff --git a/tests/testdata/faas-new-campaign-request.json b/tests/testdata/faas-new-campaign-request.json new file mode 100644 index 0000000..ae41ace --- /dev/null +++ b/tests/testdata/faas-new-campaign-request.json @@ -0,0 +1,2924 @@ +{ + "parameters": { + "discovery-probability-threshold": 0.0, + "num-cores": 1, + "assertion-checking-mode": 1 + }, + "name": "brownie_test_yqzeu", + "corpus": { + "address-under-test": "0x7277646075fa72737e1F6114654C5d9949a67dF2", + "steps": [ + { + "hash": "0x5b2213faa860f042be3d68c782ee5a1f45aea9505f874a1370a0c3163e13f3f8", + "nonce": "0x0", + "blockHash": "0x12effde2c3cb82e381e7e4232d3bf810920df83710faf07940a1c510a96d1740", + "blockNumber": "0x1", + "transactionIndex": "0x0", + "from": "0xe6559ce865436c9206c6a971ed34658a57e51f17", + "to": "", + "value": "0x0", + "gas": "0x6691b7", + "gasPrice": "0x0", + "input": "0x608060405234801561001057600080fd5b506101c8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063b0a378b01461003b578063df5b722714610055575b600080fd5b610043610076565b60408051918252519081900360200190f35b6100746004803603602081101561006b57600080fd5b503515156100e7565b005b6000610080610109565b90506000546013146100e457604080516020808252601390820152720c0e88151a1a5cc81cda1bdd5b190819985a5b606a1b8183015290517fb42604cb105a16c8f6db8a41e6b00c0c1b4826465e8bc504b3eb3e88b3e6a4a09181900360600190a1fe5b90565b806100f35760006100f6565b60015b60ff166000546002020160008190555050565b60008054600a141561011757fe5b600054601e141561012457fe5b6000546032141561013157fe5b6000546046141561013e57fe5b600054605a141561014b57fe5b600054606e141561015857fe5b6000546082141561016557fe5b6000546096141561017257fe5b60005460aa141561017f57fe5b60005460be141561018c57fe5b5060009056fea2646970667358221220d15c0974595ed5c9a5da68377d16635bfa92f13a2af22bf0b52f63632505f04664736f6c634300060c0033", + "v": "0x25", + "r": "0x8cb33aaf88705ef9b626e3b641c356c50c478912fb02ccddef9ab053fc83827b", + "s": "0x62e58b06e7c1decaedbdb8bfcdbddf69c56c5bfce6f27187ac587492686efd77" + } + ], + "other-addresses-under-test": [] + }, + "sources": { + "contracts/sample.sol": { + "fileIndex": "0", + "source": "pragma solidity <0.8.0;\n\ncontract Foo {\n event AssertionFailed(string message);\n\n int256 private x;\n\n function Bar() public returns (int256 RET_0) {\n RET_0 = _original_Foo_Bar();\n if (!(x == 19)) {\n emit AssertionFailed(\"0: This should fail\");\n assert(false);\n }\n }\n\n function _original_Foo_Bar() private view returns (int256) {\n if (x == 10) {\n assert(false);\n return 1;\n }\n if (x == 30) {\n assert(false);\n return 3;\n }\n if (x == 50) {\n assert(false);\n return 5;\n }\n if (x == 70) {\n assert(false);\n return 7;\n }\n if (x == 90) {\n assert(false);\n return 9;\n }\n if (x == 110) {\n assert(false);\n return 11;\n }\n if (x == 130) {\n assert(false);\n return 13;\n }\n if (x == 150) {\n assert(false);\n return 15;\n }\n if (x == 170) {\n assert(false);\n return 17;\n }\n if (x == 190) {\n assert(false);\n return 19;\n }\n return 0;\n }\n\n function SetNext(bool b) public {\n x = (2 * x) + (b ? 1 : 0);\n }\n}", + "ast": { + "absolutePath": "contracts/sample.sol", + "exportedSymbols": { + "Foo": [ + 171 + ] + }, + "id": 172, + "license": null, + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "<", + "0.8", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "0:23:0" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "documentation": null, + "fullyImplemented": true, + "id": 171, + "linearizedBaseContracts": [ + 171 + ], + "name": "Foo", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": null, + "id": 5, + "name": "AssertionFailed", + "nodeType": "EventDefinition", + "parameters": { + "id": 4, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 3, + "indexed": false, + "mutability": "mutable", + "name": "message", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 5, + "src": "66:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 2, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "66:6:0", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "65:16:0" + }, + "src": "44:38:0" + }, + { + "constant": false, + "id": 7, + "mutability": "mutable", + "name": "x", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 171, + "src": "88:16:0", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 6, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "88:6:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "private" + }, + { + "body": { + "id": 32, + "nodeType": "Block", + "src": "156:164:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 15, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 12, + "name": "RET_0", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10, + "src": "166:5:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 13, + "name": "_original_Foo_Bar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 151, + "src": "174:17:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_int256_$", + "typeString": "function () view returns (int256)" + } + }, + "id": 14, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "174:19:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "166:27:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 16, + "nodeType": "ExpressionStatement", + "src": "166:27:0" + }, + { + "condition": { + "argumentTypes": null, + "id": 21, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "207:10:0", + "subExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 19, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 17, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "209:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3139", + "id": 18, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "214:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_19_by_1", + "typeString": "int_const 19" + }, + "value": "19" + }, + "src": "209:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 20, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "208:9:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 31, + "nodeType": "IfStatement", + "src": "203:111:0", + "trueBody": { + "id": 30, + "nodeType": "Block", + "src": "219:95:0", + "statements": [ + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "303a20546869732073686f756c64206661696c", + "id": 23, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "254:21:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7379ea5b6329927764dc2a90425e24f5f69809aa582db010111d15cc830e8a08", + "typeString": "literal_string \"0: This should fail\"" + }, + "value": "0: This should fail" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_7379ea5b6329927764dc2a90425e24f5f69809aa582db010111d15cc830e8a08", + "typeString": "literal_string \"0: This should fail\"" + } + ], + "id": 22, + "name": "AssertionFailed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5, + "src": "238:15:0", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory)" + } + }, + "id": 24, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "238:38:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 25, + "nodeType": "EmitStatement", + "src": "233:43:0" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 27, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "297:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 26, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "290:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 28, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "290:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 29, + "nodeType": "ExpressionStatement", + "src": "290:13:0" + } + ] + } + } + ] + }, + "documentation": null, + "functionSelector": "b0a378b0", + "id": 33, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "Bar", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 8, + "nodeType": "ParameterList", + "parameters": [], + "src": "123:2:0" + }, + "returnParameters": { + "id": 11, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10, + "mutability": "mutable", + "name": "RET_0", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 33, + "src": "142:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 9, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "142:6:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "141:14:0" + }, + "scope": 171, + "src": "111:209:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 150, + "nodeType": "Block", + "src": "385:855:0", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 40, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 38, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "399:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3130", + "id": 39, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "404:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "src": "399:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 48, + "nodeType": "IfStatement", + "src": "395:73:0", + "trueBody": { + "id": 47, + "nodeType": "Block", + "src": "408:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 42, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "429:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 41, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "422:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 43, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "422:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 44, + "nodeType": "ExpressionStatement", + "src": "422:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "31", + "id": 45, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "456:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "functionReturnParameters": 37, + "id": 46, + "nodeType": "Return", + "src": "449:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 51, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 49, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "481:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3330", + "id": 50, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "486:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_30_by_1", + "typeString": "int_const 30" + }, + "value": "30" + }, + "src": "481:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 59, + "nodeType": "IfStatement", + "src": "477:73:0", + "trueBody": { + "id": 58, + "nodeType": "Block", + "src": "490:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 53, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "511:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 52, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "504:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 54, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "504:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 55, + "nodeType": "ExpressionStatement", + "src": "504:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "33", + "id": 56, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "538:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "functionReturnParameters": 37, + "id": 57, + "nodeType": "Return", + "src": "531:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 62, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 60, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "563:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3530", + "id": 61, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "568:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "src": "563:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 70, + "nodeType": "IfStatement", + "src": "559:73:0", + "trueBody": { + "id": 69, + "nodeType": "Block", + "src": "572:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 64, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "593:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 63, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "586:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 65, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "586:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 66, + "nodeType": "ExpressionStatement", + "src": "586:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "35", + "id": 67, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "620:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "functionReturnParameters": 37, + "id": 68, + "nodeType": "Return", + "src": "613:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 73, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 71, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "645:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3730", + "id": 72, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "650:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_70_by_1", + "typeString": "int_const 70" + }, + "value": "70" + }, + "src": "645:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 81, + "nodeType": "IfStatement", + "src": "641:73:0", + "trueBody": { + "id": 80, + "nodeType": "Block", + "src": "654:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 75, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "675:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 74, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "668:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 76, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "668:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 77, + "nodeType": "ExpressionStatement", + "src": "668:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "37", + "id": 78, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "702:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "functionReturnParameters": 37, + "id": 79, + "nodeType": "Return", + "src": "695:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 84, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 82, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "727:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3930", + "id": 83, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "732:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_90_by_1", + "typeString": "int_const 90" + }, + "value": "90" + }, + "src": "727:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 92, + "nodeType": "IfStatement", + "src": "723:73:0", + "trueBody": { + "id": 91, + "nodeType": "Block", + "src": "736:60:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 86, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "757:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 85, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "750:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 87, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "750:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 88, + "nodeType": "ExpressionStatement", + "src": "750:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "39", + "id": 89, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "784:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_9_by_1", + "typeString": "int_const 9" + }, + "value": "9" + }, + "functionReturnParameters": 37, + "id": 90, + "nodeType": "Return", + "src": "777:8:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 95, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 93, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "809:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313130", + "id": 94, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "814:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_110_by_1", + "typeString": "int_const 110" + }, + "value": "110" + }, + "src": "809:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 103, + "nodeType": "IfStatement", + "src": "805:75:0", + "trueBody": { + "id": 102, + "nodeType": "Block", + "src": "819:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 97, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "840:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 96, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "833:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 98, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "833:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 99, + "nodeType": "ExpressionStatement", + "src": "833:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3131", + "id": 100, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "867:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_11_by_1", + "typeString": "int_const 11" + }, + "value": "11" + }, + "functionReturnParameters": 37, + "id": 101, + "nodeType": "Return", + "src": "860:9:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 104, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "893:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313330", + "id": 105, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "898:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_130_by_1", + "typeString": "int_const 130" + }, + "value": "130" + }, + "src": "893:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 114, + "nodeType": "IfStatement", + "src": "889:75:0", + "trueBody": { + "id": 113, + "nodeType": "Block", + "src": "903:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 108, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "924:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 107, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "917:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "917:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 110, + "nodeType": "ExpressionStatement", + "src": "917:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3133", + "id": 111, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "951:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_13_by_1", + "typeString": "int_const 13" + }, + "value": "13" + }, + "functionReturnParameters": 37, + "id": 112, + "nodeType": "Return", + "src": "944:9:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 115, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "977:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313530", + "id": 116, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "982:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_150_by_1", + "typeString": "int_const 150" + }, + "value": "150" + }, + "src": "977:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 125, + "nodeType": "IfStatement", + "src": "973:75:0", + "trueBody": { + "id": 124, + "nodeType": "Block", + "src": "987:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 119, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1008:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 118, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "1001:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1001:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 121, + "nodeType": "ExpressionStatement", + "src": "1001:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3135", + "id": 122, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1035:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_15_by_1", + "typeString": "int_const 15" + }, + "value": "15" + }, + "functionReturnParameters": 37, + "id": 123, + "nodeType": "Return", + "src": "1028:9:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 126, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "1061:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313730", + "id": 127, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1066:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_170_by_1", + "typeString": "int_const 170" + }, + "value": "170" + }, + "src": "1061:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 136, + "nodeType": "IfStatement", + "src": "1057:75:0", + "trueBody": { + "id": 135, + "nodeType": "Block", + "src": "1071:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 130, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1092:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 129, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "1085:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1085:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 132, + "nodeType": "ExpressionStatement", + "src": "1085:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3137", + "id": 133, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1119:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_17_by_1", + "typeString": "int_const 17" + }, + "value": "17" + }, + "functionReturnParameters": 37, + "id": 134, + "nodeType": "Return", + "src": "1112:9:0" + } + ] + } + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 137, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "1145:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "313930", + "id": 138, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1150:3:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_190_by_1", + "typeString": "int_const 190" + }, + "value": "190" + }, + "src": "1145:8:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 147, + "nodeType": "IfStatement", + "src": "1141:75:0", + "trueBody": { + "id": 146, + "nodeType": "Block", + "src": "1155:61:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "66616c7365", + "id": 141, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1176:5:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 140, + "name": "assert", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -3, + "src": "1169:6:0", + "typeDescriptions": { + "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1169:13:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 143, + "nodeType": "ExpressionStatement", + "src": "1169:13:0" + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "3139", + "id": 144, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1203:2:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_19_by_1", + "typeString": "int_const 19" + }, + "value": "19" + }, + "functionReturnParameters": 37, + "id": 145, + "nodeType": "Return", + "src": "1196:9:0" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "hexValue": "30", + "id": 148, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1232:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 37, + "id": 149, + "nodeType": "Return", + "src": "1225:8:0" + } + ] + }, + "documentation": null, + "id": 151, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_original_Foo_Bar", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 34, + "nodeType": "ParameterList", + "parameters": [], + "src": "352:2:0" + }, + "returnParameters": { + "id": 37, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 36, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 151, + "src": "377:6:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 35, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "377:6:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "376:8:0" + }, + "scope": 171, + "src": "326:914:0", + "stateMutability": "view", + "virtual": false, + "visibility": "private" + }, + { + "body": { + "id": 169, + "nodeType": "Block", + "src": "1278:42:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 167, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 156, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "1288:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 166, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "hexValue": "32", + "id": 157, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1293:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "id": 158, + "name": "x", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7, + "src": "1297:1:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1293:5:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "id": 160, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1292:7:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "condition": { + "argumentTypes": null, + "id": 161, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 153, + "src": "1303:1:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 163, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1311:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "id": 164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "1303:9:0", + "trueExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 162, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1307:1:0", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "id": 165, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1302:11:0", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "1292:21:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1288:25:0", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 168, + "nodeType": "ExpressionStatement", + "src": "1288:25:0" + } + ] + }, + "documentation": null, + "functionSelector": "df5b7227", + "id": 170, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "SetNext", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 154, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 153, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 170, + "src": "1263:6:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 152, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1263:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1262:8:0" + }, + "returnParameters": { + "id": 155, + "nodeType": "ParameterList", + "parameters": [], + "src": "1278:0:0" + }, + "scope": 171, + "src": "1246:74:0", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + } + ], + "scope": 172, + "src": "25:1297:0" + } + ], + "src": "0:1322:0" + } + } + }, + "contracts": [ + { + "sourcePaths": { + "0": "contracts/sample.sol" + }, + "deployedSourceMap": "25:1297:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;111:209;;;:::i;:::-;;;;;;;;;;;;;;;;1246:74;;;;;;;;;;;;;;;;-1:-1:-1;1246:74:0;;;;:::i;:::-;;111:209;142:12;174:19;:17;:19::i;:::-;166:27;;209:1;;214:2;209:7;203:111;;238:38;;;;;;;;;;;;-1:-1:-1;;;238:38:0;;;;;;;;;;;;;;;290:13;;111:209;:::o;1246:74::-;1303:1;:9;;1311:1;1303:9;;;1307:1;1303:9;1292:21;;1297:1;;1293;:5;1292:21;1288:1;:25;;;;1246:74;:::o;326:914::-;377:6;399:1;;404:2;399:7;395:73;;;422:13;395:73;481:1;;486:2;481:7;477:73;;;504:13;477:73;563:1;;568:2;563:7;559:73;;;586:13;559:73;645:1;;650:2;645:7;641:73;;;668:13;641:73;727:1;;732:2;727:7;723:73;;;750:13;723:73;809:1;;814:3;809:8;805:75;;;833:13;805:75;893:1;;898:3;893:8;889:75;;;917:13;889:75;977:1;;982:3;977:8;973:75;;;1001:13;973:75;1061:1;;1066:3;1061:8;1057:75;;;1085:13;1057:75;1145:1;;1150:3;1145:8;1141:75;;;1169:13;1141:75;-1:-1:-1;1232:1:0;326:914;:::o", + "deployedBytecode": "608060405234801561001057600080fd5b50600436106100365760003560e01c8063b0a378b01461003b578063df5b722714610055575b600080fd5b610043610076565b60408051918252519081900360200190f35b6100746004803603602081101561006b57600080fd5b503515156100e7565b005b6000610080610109565b90506000546013146100e457604080516020808252601390820152720c0e88151a1a5cc81cda1bdd5b190819985a5b606a1b8183015290517fb42604cb105a16c8f6db8a41e6b00c0c1b4826465e8bc504b3eb3e88b3e6a4a09181900360600190a1fe5b90565b806100f35760006100f6565b60015b60ff166000546002020160008190555050565b60008054600a141561011757fe5b600054601e141561012457fe5b6000546032141561013157fe5b6000546046141561013e57fe5b600054605a141561014b57fe5b600054606e141561015857fe5b6000546082141561016557fe5b6000546096141561017257fe5b60005460aa141561017f57fe5b60005460be141561018c57fe5b5060009056fea2646970667358221220d15c0974595ed5c9a5da68377d16635bfa92f13a2af22bf0b52f63632505f04664736f6c634300060c0033", + "sourceMap": "25:1297:0:-:0;;;;;;;;;;;;;;;;;;;", + "bytecode": "608060405234801561001057600080fd5b506101c8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063b0a378b01461003b578063df5b722714610055575b600080fd5b610043610076565b60408051918252519081900360200190f35b6100746004803603602081101561006b57600080fd5b503515156100e7565b005b6000610080610109565b90506000546013146100e457604080516020808252601390820152720c0e88151a1a5cc81cda1bdd5b190819985a5b606a1b8183015290517fb42604cb105a16c8f6db8a41e6b00c0c1b4826465e8bc504b3eb3e88b3e6a4a09181900360600190a1fe5b90565b806100f35760006100f6565b60015b60ff166000546002020160008190555050565b60008054600a141561011757fe5b600054601e141561012457fe5b6000546032141561013157fe5b6000546046141561013e57fe5b600054605a141561014b57fe5b600054606e141561015857fe5b6000546082141561016557fe5b6000546096141561017257fe5b60005460aa141561017f57fe5b60005460be141561018c57fe5b5060009056fea2646970667358221220d15c0974595ed5c9a5da68377d16635bfa92f13a2af22bf0b52f63632505f04664736f6c634300060c0033", + "contractName": "Foo", + "mainSourceFile": "contracts/sample.sol" + } + ], + "instrumentation_metadata": { + "instrToOriginalMap": [ + [ + "0:23:0", + "0:23:0" + ], + [ + "25:1297:0", + "24:852:0" + ], + [ + "88:16:0", + "41:16:0" + ], + [ + "88:6:0", + "41:6:0" + ], + [ + "326:914:0", + "114:693:0" + ], + [ + "352:2:0", + "126:2:0" + ], + [ + "376:8:0", + "149:8:0" + ], + [ + "377:6:0", + "150:6:0" + ], + [ + "377:6:0", + "150:6:0" + ], + [ + "385:855:0", + "158:649:0" + ], + [ + "395:73:0", + "164:57:0" + ], + [ + "399:7:0", + "168:7:0" + ], + [ + "399:1:0", + "168:1:0" + ], + [ + "404:2:0", + "173:2:0" + ], + [ + "408:60:0", + "177:44:0" + ], + [ + "422:13:0", + "185:13:0" + ], + [ + "422:13:0", + "185:13:0" + ], + [ + "422:6:0", + "185:6:0" + ], + [ + "429:5:0", + "192:5:0" + ], + [ + "449:8:0", + "206:8:0" + ], + [ + "456:1:0", + "213:1:0" + ], + [ + "477:73:0", + "226:57:0" + ], + [ + "481:7:0", + "230:7:0" + ], + [ + "481:1:0", + "230:1:0" + ], + [ + "486:2:0", + "235:2:0" + ], + [ + "490:60:0", + "239:44:0" + ], + [ + "504:13:0", + "247:13:0" + ], + [ + "504:13:0", + "247:13:0" + ], + [ + "504:6:0", + "247:6:0" + ], + [ + "511:5:0", + "254:5:0" + ], + [ + "531:8:0", + "268:8:0" + ], + [ + "538:1:0", + "275:1:0" + ], + [ + "559:73:0", + "288:57:0" + ], + [ + "563:7:0", + "292:7:0" + ], + [ + "563:1:0", + "292:1:0" + ], + [ + "568:2:0", + "297:2:0" + ], + [ + "572:60:0", + "301:44:0" + ], + [ + "586:13:0", + "309:13:0" + ], + [ + "586:13:0", + "309:13:0" + ], + [ + "586:6:0", + "309:6:0" + ], + [ + "593:5:0", + "316:5:0" + ], + [ + "613:8:0", + "330:8:0" + ], + [ + "620:1:0", + "337:1:0" + ], + [ + "641:73:0", + "350:57:0" + ], + [ + "645:7:0", + "354:7:0" + ], + [ + "645:1:0", + "354:1:0" + ], + [ + "650:2:0", + "359:2:0" + ], + [ + "654:60:0", + "363:44:0" + ], + [ + "668:13:0", + "371:13:0" + ], + [ + "668:13:0", + "371:13:0" + ], + [ + "668:6:0", + "371:6:0" + ], + [ + "675:5:0", + "378:5:0" + ], + [ + "695:8:0", + "392:8:0" + ], + [ + "702:1:0", + "399:1:0" + ], + [ + "723:73:0", + "412:57:0" + ], + [ + "727:7:0", + "416:7:0" + ], + [ + "727:1:0", + "416:1:0" + ], + [ + "732:2:0", + "421:2:0" + ], + [ + "736:60:0", + "425:44:0" + ], + [ + "750:13:0", + "433:13:0" + ], + [ + "750:13:0", + "433:13:0" + ], + [ + "750:6:0", + "433:6:0" + ], + [ + "757:5:0", + "440:5:0" + ], + [ + "777:8:0", + "454:8:0" + ], + [ + "784:1:0", + "461:1:0" + ], + [ + "805:75:0", + "474:59:0" + ], + [ + "809:8:0", + "478:8:0" + ], + [ + "809:1:0", + "478:1:0" + ], + [ + "814:3:0", + "483:3:0" + ], + [ + "819:61:0", + "488:45:0" + ], + [ + "833:13:0", + "496:13:0" + ], + [ + "833:13:0", + "496:13:0" + ], + [ + "833:6:0", + "496:6:0" + ], + [ + "840:5:0", + "503:5:0" + ], + [ + "860:9:0", + "517:9:0" + ], + [ + "867:2:0", + "524:2:0" + ], + [ + "889:75:0", + "538:59:0" + ], + [ + "893:8:0", + "542:8:0" + ], + [ + "893:1:0", + "542:1:0" + ], + [ + "898:3:0", + "547:3:0" + ], + [ + "903:61:0", + "552:45:0" + ], + [ + "917:13:0", + "560:13:0" + ], + [ + "917:13:0", + "560:13:0" + ], + [ + "917:6:0", + "560:6:0" + ], + [ + "924:5:0", + "567:5:0" + ], + [ + "944:9:0", + "581:9:0" + ], + [ + "951:2:0", + "588:2:0" + ], + [ + "973:75:0", + "602:59:0" + ], + [ + "977:8:0", + "606:8:0" + ], + [ + "977:1:0", + "606:1:0" + ], + [ + "982:3:0", + "611:3:0" + ], + [ + "987:61:0", + "616:45:0" + ], + [ + "1001:13:0", + "624:13:0" + ], + [ + "1001:13:0", + "624:13:0" + ], + [ + "1001:6:0", + "624:6:0" + ], + [ + "1008:5:0", + "631:5:0" + ], + [ + "1028:9:0", + "645:9:0" + ], + [ + "1035:2:0", + "652:2:0" + ], + [ + "1057:75:0", + "666:59:0" + ], + [ + "1061:8:0", + "670:8:0" + ], + [ + "1061:1:0", + "670:1:0" + ], + [ + "1066:3:0", + "675:3:0" + ], + [ + "1071:61:0", + "680:45:0" + ], + [ + "1085:13:0", + "688:13:0" + ], + [ + "1085:13:0", + "688:13:0" + ], + [ + "1085:6:0", + "688:6:0" + ], + [ + "1092:5:0", + "695:5:0" + ], + [ + "1112:9:0", + "709:9:0" + ], + [ + "1119:2:0", + "716:2:0" + ], + [ + "1141:75:0", + "730:59:0" + ], + [ + "1145:8:0", + "734:8:0" + ], + [ + "1145:1:0", + "734:1:0" + ], + [ + "1150:3:0", + "739:3:0" + ], + [ + "1155:61:0", + "744:45:0" + ], + [ + "1169:13:0", + "752:13:0" + ], + [ + "1169:13:0", + "752:13:0" + ], + [ + "1169:6:0", + "752:6:0" + ], + [ + "1176:5:0", + "759:5:0" + ], + [ + "1196:9:0", + "773:9:0" + ], + [ + "1203:2:0", + "780:2:0" + ], + [ + "1225:8:0", + "794:8:0" + ], + [ + "1232:1:0", + "801:1:0" + ], + [ + "1246:74:0", + "810:64:0" + ], + [ + "1262:8:0", + "826:8:0" + ], + [ + "1263:6:0", + "827:6:0" + ], + [ + "1263:4:0", + "827:4:0" + ], + [ + "1278:42:0", + "842:32:0" + ], + [ + "1288:25:0", + "848:21:0" + ], + [ + "1288:25:0", + "848:21:0" + ], + [ + "1288:1:0", + "848:1:0" + ], + [ + "1292:21:0", + "852:17:0" + ], + [ + "1293:5:0", + "852:3:0" + ], + [ + "1293:1:0", + "852:1:0" + ], + [ + "1297:1:0", + "854:1:0" + ], + [ + "1302:11:0", + "858:11:0" + ], + [ + "1303:9:0", + "859:9:0" + ], + [ + "1303:1:0", + "859:1:0" + ], + [ + "1307:1:0", + "863:1:0" + ], + [ + "1311:1:0", + "867:1:0" + ], + [ + "207:10:0", + "65:46:0" + ] + ], + "otherInstrumentation": [ + "111:38:1", + "142:12:0", + "166:27:0" + ], + "propertyMap": [ + { + "id": 0, + "contract": "Foo", + "filename": "contracts/sample.sol", + "propertySource": "103:7:0", + "annotationSource": "65:46:0", + "target": "function", + "targetName": "Bar", + "debugEventSignature": "", + "message": "This should fail", + "instrumentationRanges": [ + "233:43:0", + "203:111:0" + ], + "checkRanges": [ + "207:10:0" + ] + } + ], + "originalSourceList": [ + "contracts/sample.sol.original" + ], + "instrSourceList": [ + "contracts/sample.sol.instrumented", + "/Users/boss/git/mythx/truffle-projects/brownie-test/contracts/__scribble_ReentrancyUtils.sol" + ] + } +} diff --git a/tests/testdata/faas-new-campaign-response.json b/tests/testdata/faas-new-campaign-response.json new file mode 100644 index 0000000..a51bbda --- /dev/null +++ b/tests/testdata/faas-new-campaign-response.json @@ -0,0 +1,10 @@ +{ + "name": "brownie_test_yqzeu", + "multiContract": true, + "project": "00000000-0000-0000-0000-000000000000", + "corpus": "720f76a1-3be1-4aaa-862f-9e3d28e352e5", + "numSources": 1, + "status": "idle", + "submittedAt": "2021-03-30T16:17:18.389281", + "id": "560ba03a-8744-4da6-aeaa-a62568ccbf44" +} diff --git a/tests/testdata/ganache-all-blocks.json b/tests/testdata/ganache-all-blocks.json new file mode 100644 index 0000000..c6c1219 --- /dev/null +++ b/tests/testdata/ganache-all-blocks.json @@ -0,0 +1,64 @@ +[ + { + "number": "0x0", + "hash": "0x5fb06a0cfea7d897030d5d122507c02125bae6152547ec9a857ab33923fb1026", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x858b97ef98a11ed050a9b3e6a90e96edeca9d85d069d761cf460715d52481d19", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "miner": "0x0000000000000000000000000000000000000000", + "difficulty": "0x0", + "totalDifficulty": "0x0", + "extraData": "0x", + "size": "0x3e8", + "gasLimit": "0x6691b7", + "gasUsed": "0x0", + "timestamp": "0x60620b4f", + "transactions": [], + "uncles": [] + }, + { + "number": "0x1", + "hash": "0x12effde2c3cb82e381e7e4232d3bf810920df83710faf07940a1c510a96d1740", + "parentHash": "0x5fb06a0cfea7d897030d5d122507c02125bae6152547ec9a857ab33923fb1026", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "transactionsRoot": "0xff2033a74277b53e99166be8add2e2023e944ffb0ca7ed79d3c9abbdb44def0b", + "stateRoot": "0x772badb796e4ac7d6acea3a09e968a7df24680762d9a0c9ef9ce731b4b8b88e0", + "receiptsRoot": "0xa982981c23d14b222a3d58b77205421a87004e6e2fd05c93a648f9dd350ea907", + "miner": "0x0000000000000000000000000000000000000000", + "difficulty": "0x0", + "totalDifficulty": "0x0", + "extraData": "0x", + "size": "0x3e8", + "gasLimit": "0x6691b7", + "gasUsed": "0x25069", + "timestamp": "0x60620b86", + "transactions": + [ + { + "hash": "0x5b2213faa860f042be3d68c782ee5a1f45aea9505f874a1370a0c3163e13f3f8", + "nonce": "0x0", + "blockHash": "0x12effde2c3cb82e381e7e4232d3bf810920df83710faf07940a1c510a96d1740", + "blockNumber": "0x1", + "transactionIndex": "0x0", + "from": "0xe6559ce865436c9206c6a971ed34658a57e51f17", + "to": null, + "value": "0x0", + "gas": "0x6691b7", + "gasPrice": "0x0", + "input": "0x608060405234801561001057600080fd5b506101c8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063b0a378b01461003b578063df5b722714610055575b600080fd5b610043610076565b60408051918252519081900360200190f35b6100746004803603602081101561006b57600080fd5b503515156100e7565b005b6000610080610109565b90506000546013146100e457604080516020808252601390820152720c0e88151a1a5cc81cda1bdd5b190819985a5b606a1b8183015290517fb42604cb105a16c8f6db8a41e6b00c0c1b4826465e8bc504b3eb3e88b3e6a4a09181900360600190a1fe5b90565b806100f35760006100f6565b60015b60ff166000546002020160008190555050565b60008054600a141561011757fe5b600054601e141561012457fe5b6000546032141561013157fe5b6000546046141561013e57fe5b600054605a141561014b57fe5b600054606e141561015857fe5b6000546082141561016557fe5b6000546096141561017257fe5b60005460aa141561017f57fe5b60005460be141561018c57fe5b5060009056fea2646970667358221220d15c0974595ed5c9a5da68377d16635bfa92f13a2af22bf0b52f63632505f04664736f6c634300060c0033", + "v": "0x25", + "r": "0x8cb33aaf88705ef9b626e3b641c356c50c478912fb02ccddef9ab053fc83827b", + "s": "0x62e58b06e7c1decaedbdb8bfcdbddf69c56c5bfce6f27187ac587492686efd77" + } + ], + "uncles": [] + } +] diff --git a/tests/testdata/group-list-response.json b/tests/testdata/group-list-response.json index 9043b54..c04e30a 100644 --- a/tests/testdata/group-list-response.json +++ b/tests/testdata/group-list-response.json @@ -32,7 +32,7 @@ "name": "test", "createdAt": "2019-11-19T15:39:17.714Z", "createdBy": "5cefb9a4f50eaf001757f57d", - "completedAt": null, + "completedAt": "2019-11-19T15:39:17.714Z", "progress": 100, "mainSourceFiles": [], "status": "sealed", @@ -55,7 +55,7 @@ "name": "", "createdAt": "2019-11-19T15:23:35.258Z", "createdBy": "5cefb9a4f50eaf001757f57d", - "completedAt": null, + "completedAt": "2019-11-19T15:39:17.714Z", "progress": 100, "mainSourceFiles": [], "status": "sealed", @@ -78,7 +78,7 @@ "name": "", "createdAt": "2019-11-19T15:23:02.506Z", "createdBy": "5cefb9a4f50eaf001757f57d", - "completedAt": null, + "completedAt": "2019-11-19T15:39:17.714Z", "progress": 100, "mainSourceFiles": [], "status": "sealed", @@ -101,7 +101,7 @@ "name": "", "createdAt": "2019-11-19T15:22:57.831Z", "createdBy": "5cefb9a4f50eaf001757f57d", - "completedAt": null, + "completedAt": "2019-11-19T15:39:17.714Z", "progress": 100, "mainSourceFiles": [], "status": "sealed", diff --git a/tests/testdata/group-list-simple.txt b/tests/testdata/group-list-simple.txt index 401ca85..0714f61 100644 --- a/tests/testdata/group-list-simple.txt +++ b/tests/testdata/group-list-simple.txt @@ -1,25 +1,25 @@ ID: 5dd415a72ef82f0012f2e3a0 Name: -Created on: 2019-11-19 16:17:43.426000+00:00 +Created on: 2019-11-19T16:17:43.426Z Status: opened ID: 5dd40ca50d861d001101e888 Name: test -Created on: 2019-11-19 15:39:17.714000+00:00 +Created on: 2019-11-19T15:39:17.714Z Status: sealed ID: 5dd408f7b1380a0011e8a166 Name: -Created on: 2019-11-19 15:23:35.258000+00:00 +Created on: 2019-11-19T15:23:35.258Z Status: sealed ID: 5dd408d6519bf1001254baf2 Name: -Created on: 2019-11-19 15:23:02.506000+00:00 +Created on: 2019-11-19T15:23:02.506Z Status: sealed ID: 5dd408d1b1380a0011e8a163 Name: -Created on: 2019-11-19 15:22:57.831000+00:00 +Created on: 2019-11-19T15:22:57.831Z Status: sealed diff --git a/tests/testdata/group-list-table.txt b/tests/testdata/group-list-table.txt index be6573f..1c62240 100644 --- a/tests/testdata/group-list-table.txt +++ b/tests/testdata/group-list-table.txt @@ -1,11 +1,11 @@ ╒══════════════════════════╤════════╤══════════════════════════════════════════════════════════╤══════════════════════════╕ -│ 5dd415a72ef82f0012f2e3a0 │ opened │ BECToken.sol,remythx-mbt385.sol,functiontypes-swc127.sol │ 2019-11-19 16:17:43+0000 │ +│ 5dd415a72ef82f0012f2e3a0 │ opened │ BECToken.sol,remythx-mbt385.sol,functiontypes-swc127.sol │ 2019-11-19T16:17:43.426Z │ ├──────────────────────────┼────────┼──────────────────────────────────────────────────────────┼──────────────────────────┤ -│ 5dd40ca50d861d001101e888 │ sealed │ │ 2019-11-19 15:39:17+0000 │ +│ 5dd40ca50d861d001101e888 │ sealed │ │ 2019-11-19T15:39:17.714Z │ ├──────────────────────────┼────────┼──────────────────────────────────────────────────────────┼──────────────────────────┤ -│ 5dd408f7b1380a0011e8a166 │ sealed │ │ 2019-11-19 15:23:35+0000 │ +│ 5dd408f7b1380a0011e8a166 │ sealed │ │ 2019-11-19T15:23:35.258Z │ ├──────────────────────────┼────────┼──────────────────────────────────────────────────────────┼──────────────────────────┤ -│ 5dd408d6519bf1001254baf2 │ sealed │ │ 2019-11-19 15:23:02+0000 │ +│ 5dd408d6519bf1001254baf2 │ sealed │ │ 2019-11-19T15:23:02.506Z │ ├──────────────────────────┼────────┼──────────────────────────────────────────────────────────┼──────────────────────────┤ -│ 5dd408d1b1380a0011e8a163 │ sealed │ │ 2019-11-19 15:22:57+0000 │ +│ 5dd408d1b1380a0011e8a163 │ sealed │ │ 2019-11-19T15:22:57.831Z │ ╘══════════════════════════╧════════╧══════════════════════════════════════════════════════════╧══════════════════════════╛ diff --git a/tests/testdata/group-status-response.json b/tests/testdata/group-status-response.json index 2fb87b0..8d2fd17 100644 --- a/tests/testdata/group-status-response.json +++ b/tests/testdata/group-status-response.json @@ -3,7 +3,7 @@ "name": "test", "createdAt": "2019-11-19T15:39:17.714Z", "createdBy": "5cefb9a4f50eaf001757f57d", - "completedAt": null, + "completedAt": "2019-09-05T20:34:27.606Z", "progress": 100, "mainSourceFiles": [], "status": "sealed", diff --git a/tests/testdata/group-status-simple.txt b/tests/testdata/group-status-simple.txt index 29540ee..8cea791 100644 --- a/tests/testdata/group-status-simple.txt +++ b/tests/testdata/group-status-simple.txt @@ -1,5 +1,5 @@ ID: 5dd40ca50d861d001101e888 Name: test -Created on: 2019-11-19 15:39:17.714000+00:00 +Created on: 2019-11-19T15:39:17.714Z Status: sealed diff --git a/tests/testdata/group-status-table.txt b/tests/testdata/group-status-table.txt index c42cbaa..fcfd34e 100644 --- a/tests/testdata/group-status-table.txt +++ b/tests/testdata/group-status-table.txt @@ -3,7 +3,7 @@ ├──────────────────────────────────┼──────────────────────────┤ │ Name │ test │ ├──────────────────────────────────┼──────────────────────────┤ -│ Creation Date │ 2019-11-19 15:39:17+0000 │ +│ Creation Date │ 2019-11-19T15:39:17.714Z │ ├──────────────────────────────────┼──────────────────────────┤ │ Created By │ 5cefb9a4f50eaf001757f57d │ ├──────────────────────────────────┼──────────────────────────┤ diff --git a/tests/testdata/hardhat-artifact.json b/tests/testdata/hardhat-artifact.json new file mode 100644 index 0000000..8f214ff --- /dev/null +++ b/tests/testdata/hardhat-artifact.json @@ -0,0 +1,30 @@ +{ + "MasterChefV2": { + "_format": "hh-sol-artifact-1", + "contractName": "MasterChefV2", + "sourceName": "contracts/MasterChefV2.sol", + "abi": [], + "bytecode": "0x60e06040523480156200001157600080fd5b50604051620031b7380380620031b7833981016040819052620000349162000097565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606093841b81166080529190921b1660a05260c052620000f7565b600080600060608486031215620000ac578283fd5b8351620000b981620000de565b6020850151909350620000cc81620000de565b80925050604084015190509250925092565b6001600160a01b0381168114620000f457600080fd5b50565b60805160601c60a05160601c60c05161305b6200015c60003980610d905280611303528061160e5280611cdd5250806108f55280611a075280611e51525080610ccf5280610d6352806112d65280611c065280611cb05280612157525061305b6000f3fe6080604052600436106101d85760003560e01c806361621aaa11610102578063ab560e1011610095578063d1abb90711610064578063d1abb90714610529578063d2423b5114610549578063e30c39781461056a578063edd8b1701461057f576101d8565b8063ab560e10146104bf578063ab7de098146104d4578063b0bcf42a146104f4578063c346253d14610509576101d8565b806388bba42f116100d157806388bba42f1461043c5780638da5cb5b1461045c5780638dbdbe6d1461047157806393f1a40b14610491576101d8565b806361621aaa146103c557806378ed5d1f146103da5780637c516e94146104075780637cd07e4714610427576101d8565b806319ab453c1161017a5780634e71e0c8116101495780634e71e0c81461034e5780634f70b15a1461036357806351eb05a61461037857806357a5b58c146103a5576101d8565b806319ab453c146102ce57806323cf3118146102ee5780632f940c701461030e578063454b06081461032e576101d8565b80631526fe27116101b65780631526fe271461024a57806317caf6f11461027957806318fccc761461028e578063195426ec146102ae576101d8565b8063078dfbe7146101dd578063081e3eda146101ff5780630ad58d2f1461022a575b600080fd5b3480156101e957600080fd5b506101fd6101f83660046125dd565b610594565b005b34801561020b57600080fd5b50610214610683565b6040516102219190612ee9565b60405180910390f35b34801561023657600080fd5b506101fd6102453660046128fc565b610689565b34801561025657600080fd5b5061026a610265366004612867565b610819565b60405161022193929190612ebf565b34801561028557600080fd5b5061021461085b565b34801561029a57600080fd5b506101fd6102a9366004612897565b610861565b3480156102ba57600080fd5b506102146102c9366004612897565b6109fb565b3480156102da57600080fd5b506101fd6102e93660046126cb565b610bf8565b3480156102fa57600080fd5b506101fd6103093660046126cb565b610e19565b34801561031a57600080fd5b506101fd610329366004612897565b610e65565b34801561033a57600080fd5b506101fd610349366004612867565b610f86565b34801561035a57600080fd5b506101fd611232565b34801561036f57600080fd5b506101fd6112bf565b34801561038457600080fd5b50610398610393366004612867565b611362565b6040516102219190612e86565b3480156103b157600080fd5b506101fd6103c0366004612670565b6115dc565b3480156103d157600080fd5b5061021461160c565b3480156103e657600080fd5b506103fa6103f5366004612867565b611630565b60405161022191906129ca565b34801561041357600080fd5b506101fd610422366004612703565b611657565b34801561043357600080fd5b506103fa6116cb565b34801561044857600080fd5b506101fd610457366004612929565b6116da565b34801561046857600080fd5b506103fa611847565b34801561047d57600080fd5b506101fd61048c3660046128fc565b611856565b34801561049d57600080fd5b506104b16104ac366004612897565b6119e1565b604051610221929190612f31565b3480156104cb57600080fd5b506103fa611a05565b3480156104e057600080fd5b506101fd6104ef3660046128c6565b611a29565b34801561050057600080fd5b50610214611c02565b34801561051557600080fd5b506103fa610524366004612867565b611d76565b34801561053557600080fd5b506101fd6105443660046128fc565b611d83565b61055c610557366004612627565b611fb6565b604051610221929190612a5c565b34801561057657600080fd5b506103fa612146565b34801561058b57600080fd5b506103fa612155565b6000546001600160a01b031633146105c75760405162461bcd60e51b81526004016105be90612cfe565b60405180910390fd5b8115610662576001600160a01b0383161515806105e15750805b6105fd5760405162461bcd60e51b81526004016105be90612c18565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b03199182161790915560018054909116905561067e565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b610691612575565b61069a84611362565b600085815260066020908152604080832033845290915290208151919250906106ec9064e8d4a51000906106d89087906001600160801b0316612179565b816106df57fe5b60018401549190046121b6565b600182015580546106fd9085612203565b815560058054600091908790811061071157fe5b6000918252602090912001546001600160a01b0316905080156107975781546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291610764918a9133918a9160009190600401612ef2565b600060405180830381600087803b15801561077e57600080fd5b505af1158015610792573d6000803e3d6000fd5b505050505b6107c58486600489815481106107a957fe5b6000918252602090912001546001600160a01b03169190612226565b836001600160a01b031686336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516108099190612ee9565b60405180910390a4505050505050565b6003818154811061082657fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60075481565b610869612575565b61087283611362565b6000848152600660209081526040808320338452909152812082518154939450909264e8d4a51000916108ae91906001600160801b0316612179565b816108b557fe5b04905060006108d96108d48460010154846121b690919063ffffffff16565b612314565b600184018390559050801561091c5761091c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b60006005878154811061092b57fe5b6000918252602090912001546001600160a01b0316905080156109b05783546040516345fb1ba160e11b81526001600160a01b03831691638bf637429161097d918b9133918c91899190600401612ef2565b600060405180830381600087803b15801561099757600080fd5b505af11580156109ab573d6000803e3d6000fd5b505050505b86336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954846040516109ea9190612ee9565b60405180910390a350505050505050565b6000610a05612575565b60038481548110610a1257fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600683528385206001600160a01b0389168652909252918320825160048054949650919492169288908110610a9057fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610ac99030906004016129ca565b60206040518083038186803b158015610ae157600080fd5b505afa158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b19919061287f565b905083602001516001600160401b031643118015610b3657508015155b15610bbf576000610b5d85602001516001600160401b03164361220390919063ffffffff16565b90506000600754610b8d87604001516001600160401b0316610b87610b80611c02565b8690612179565b90612179565b81610b9457fe5b049050610bba83610baa8364e8d4a51000612179565b81610bb157fe5b8691900461233a565b935050505b60018301548354610bed916108d49164e8d4a5100090610bdf9087612179565b81610be657fe5b04906121b6565b979650505050505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610c279033906004016129ca565b60206040518083038186803b158015610c3f57600080fd5b505afa158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c77919061287f565b905080610c965760405162461bcd60e51b81526004016105be90612b5d565b610cab6001600160a01b03831633308461235d565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610cf9907f0000000000000000000000000000000000000000000000000000000000000000908590600401612a43565b602060405180830381600087803b158015610d1357600080fd5b505af1158015610d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b91906126af565b50604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb15890610dba907f0000000000000000000000000000000000000000000000000000000000000000908590600401612f31565b600060405180830381600087803b158015610dd457600080fd5b505af1158015610de8573d6000803e3d6000fd5b50506040517f98a9bd3b7a617581fc53b1e2992534e0e0cb5091c9d44aa1a7fc978f706caa83925060009150a15050565b6000546001600160a01b03163314610e435760405162461bcd60e51b81526004016105be90612cfe565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526006602090815260408083203384529091528120805482825560018201839055600580549293919286908110610e9c57fe5b6000918252602090912001546001600160a01b031690508015610f21576040516345fb1ba160e11b81526001600160a01b03821690638bf6374290610eee908890339089906000908190600401612ef2565b600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050505b610f338483600488815481106107a957fe5b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b85604051610f779190612ee9565b60405180910390a45050505050565b6002546001600160a01b0316610fae5760405162461bcd60e51b81526004016105be90612d9f565b600060048281548110610fbd57fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190610ff89030906004016129ca565b60206040518083038186803b15801561101057600080fd5b505afa158015611024573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611048919061287f565b60025460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b39261107d9216908590600401612a43565b602060405180830381600087803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906126af565b5060025460405163ce5494bb60e01b81526000916001600160a01b03169063ce5494bb906111019086906004016129ca565b602060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115391906126e7565b6040516370a0823160e01b81529091506001600160a01b038216906370a08231906111829030906004016129ca565b60206040518083038186803b15801561119a57600080fd5b505afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d2919061287f565b82146111f05760405162461bcd60e51b81526004016105be90612c47565b80600485815481106111fe57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050565b6001546001600160a01b031633811461125d5760405162461bcd60e51b81526004016105be90612d33565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb1589061132e907f000000000000000000000000000000000000000000000000000000000000000090600090600401612f31565b600060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b50505050565b61136a612575565b6003828154811061137757fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b909104169082015291504311156115d7576000600483815481106113d957fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906114129030906004016129ca565b60206040518083038186803b15801561142a57600080fd5b505afa15801561143e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611462919061287f565b905080156114fb57600061148c83602001516001600160401b03164361220390919063ffffffff16565b905060006007546114af85604001516001600160401b0316610b87610b80611c02565b816114b657fe5b0490506114ed6114dc846114cf8464e8d4a51000612179565b816114d657fe5b0461244e565b85516001600160801b031690612477565b6001600160801b0316845250505b611504436124a6565b6001600160401b03166020830152600380548391908590811061152357fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad353926115cd9290918691612f3f565b60405180910390a2505b919050565b8060005b8181101561135c576116038484838181106115f757fe5b90506020020135611362565b506001016115e0565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004818154811061163d57fe5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf9061168f908a908a908a908a908a908a908a90600401612a02565b600060405180830381600087803b1580156116a957600080fd5b505af11580156116bd573d6000803e3d6000fd5b505050505050505050505050565b6002546001600160a01b031681565b6000546001600160a01b031633146117045760405162461bcd60e51b81526004016105be90612cfe565b6117438361173d6003878154811061171857fe5b60009182526020909120015460075490600160c01b90046001600160401b0316612203565b9061233a565b60075561174f836124a6565b6003858154811061175c57fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555080156117d05781600585815481106117a157fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b806117fc57600584815481106117e257fe5b6000918252602090912001546001600160a01b03166117fe565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e18658584604051611839929190612f21565b60405180910390a350505050565b6000546001600160a01b031681565b61185e612575565b61186784611362565b60008581526006602090815260408083206001600160a01b03871684529091529020805491925090611899908561233a565b815581516118d09064e8d4a51000906118bc9087906001600160801b0316612179565b816118c357fe5b60018401549190046124cf565b81600101819055506000600586815481106118e757fe5b6000918252602090912001546001600160a01b03169050801561196d5781546040516345fb1ba160e11b81526001600160a01b03831691638bf637429161193a918a918991829160009190600401612ef2565b600060405180830381600087803b15801561195457600080fd5b505af1158015611968573d6000803e3d6000fd5b505050505b61199d33308760048a8154811061198057fe5b6000918252602090912001546001600160a01b031692919061235d565b836001600160a01b031686336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47886040516108099190612ee9565b60066020908152600092835260408084209091529082529020805460019091015482565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314611a535760405162461bcd60e51b81526004016105be90612cfe565b6007544390611a62908561233a565b6007556004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b038087166001600160a01b03199283161790925560058054938401815560009081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0909301805492861692909116919091179055604080516060810190915290815260039060208101611b0f846124a6565b6001600160401b03168152602001611b26876124a6565b6001600160401b039081169091528254600181810185556000948552602094859020845192018054958501516040909501518416600160c01b026001600160c01b0395909416600160801b0267ffffffffffffffff60801b196001600160801b039094166001600160801b0319909716969096179290921694909417929092161790556004546001600160a01b038085169290861691611bc591612203565b7f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e587604051611bf49190612ee9565b60405180910390a450505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5d57600080fd5b505afa158015611c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c95919061287f565b604051631526fe2760e01b8152611d69906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631526fe2790611d05907f000000000000000000000000000000000000000000000000000000000000000090600401612ee9565b60806040518083038186803b158015611d1d57600080fd5b505afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d559190612815565b6020015168056bc75e2d6310000090612179565b81611d7057fe5b04905090565b6005818154811061163d57fe5b611d8b612575565b611d9484611362565b6000858152600660209081526040808320338452909152812082518154939450909264e8d4a5100091611dd091906001600160801b0316612179565b81611dd757fe5b0490506000611df66108d48460010154846121b690919063ffffffff16565b9050611e3164e8d4a51000611e2186600001516001600160801b03168961217990919063ffffffff16565b81611e2857fe5b849190046121b6565b60018401558254611e429087612203565b8355611e786001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b600060058881548110611e8757fe5b6000918252602090912001546001600160a01b031690508015611f0c5783546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291611ed9918c9133918c91899190600401612ef2565b600060405180830381600087803b158015611ef357600080fd5b505af1158015611f07573d6000803e3d6000fd5b505050505b611f1e868860048b815481106107a957fe5b856001600160a01b031688336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328a604051611f629190612ee9565b60405180910390a487336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051611fa49190612ee9565b60405180910390a35050505050505050565b606080836001600160401b0381118015611fcf57600080fd5b50604051908082528060200260200182016040528015611ff9578160200160208202803683370190505b509150836001600160401b038111801561201257600080fd5b5060405190808252806020026020018201604052801561204657816020015b60608152602001906001900390816120315790505b50905060005b8481101561213d57600060603088888581811061206557fe5b90506020028101906120779190612f69565b60405161208592919061299e565b600060405180830381855af49150503d80600081146120c0576040519150601f19603f3d011682016040523d82523d6000602084013e6120c5565b606091505b509150915081806120d4575085155b6120dd82612515565b906120fb5760405162461bcd60e51b81526004016105be9190612af6565b508185848151811061210957fe5b6020026020010190151590811515815250508084848151811061212857fe5b6020908102919091010152505060010161204c565b50935093915050565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008115806121945750508082028282828161219157fe5b04145b6121b05760405162461bcd60e51b81526004016105be90612e4f565b92915050565b60008183038183128015906121cb5750838113155b806121e057506000831280156121e057508381135b6121fc5760405162461bcd60e51b81526004016105be90612dd6565b9392505050565b808203828111156121b05760405162461bcd60e51b81526004016105be90612b09565b60006060846001600160a01b031663a9059cbb858560405160240161224c929190612a43565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161228591906129ae565b6000604051808303816000865af19150503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b50915091508180156122f15750805115806122f15750808060200190518101906122f191906126af565b61230d5760405162461bcd60e51b81526004016105be90612ba0565b5050505050565b6000808212156123365760405162461bcd60e51b81526004016105be90612b38565b5090565b818101818110156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006060856001600160a01b03166323b872dd868686604051602401612385939291906129de565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516123be91906129ae565b6000604051808303816000865af19150503d80600081146123fb576040519150601f19603f3d011682016040523d82523d6000602084013e612400565b606091505b509150915081801561242a57508051158061242a57508080602001905181019061242a91906126af565b6124465760405162461bcd60e51b81526004016105be90612e1a565b505050505050565b60006001600160801b038211156123365760405162461bcd60e51b81526004016105be90612c90565b8181016001600160801b0380831690821610156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006001600160401b038211156123365760405162461bcd60e51b81526004016105be90612d68565b60008282018183128015906124e45750838112155b806124f957506000831280156124f957508381125b6121fc5760405162461bcd60e51b81526004016105be90612bd7565b606060448251101561255b575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526115d7565b600482019150818060200190518101906121b0919061278a565b604080516060810182526000808252602082018190529181019190915290565b60008083601f8401126125a6578182fd5b5081356001600160401b038111156125bc578182fd5b60208301915083602080830285010111156125d657600080fd5b9250929050565b6000806000606084860312156125f1578283fd5b83356125fc81612fff565b9250602084013561260c81613017565b9150604084013561261c81613017565b809150509250925092565b60008060006040848603121561263b578283fd5b83356001600160401b03811115612650578384fd5b61265c86828701612595565b909450925050602084013561261c81613017565b60008060208385031215612682578182fd5b82356001600160401b03811115612697578283fd5b6126a385828601612595565b90969095509350505050565b6000602082840312156126c0578081fd5b81516121fc81613017565b6000602082840312156126dc578081fd5b81356121fc81612fff565b6000602082840312156126f8578081fd5b81516121fc81612fff565b600080600080600080600080610100898b03121561271f578384fd5b883561272a81612fff565b9750602089013561273a81612fff565b9650604089013561274a81612fff565b9550606089013594506080890135935060a089013560ff8116811461276d578384fd5b979a969950949793969295929450505060c08201359160e0013590565b60006020828403121561279b578081fd5b81516001600160401b03808211156127b1578283fd5b818401915084601f8301126127c4578283fd5b8151818111156127d2578384fd5b6127e5601f8201601f1916602001612fad565b91508082528560208285010111156127fb578384fd5b61280c816020840160208601612fd3565b50949350505050565b600060808284031215612826578081fd5b6128306080612fad565b825161283b81612fff565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215612878578081fd5b5035919050565b600060208284031215612890578081fd5b5051919050565b600080604083850312156128a9578182fd5b8235915060208301356128bb81612fff565b809150509250929050565b6000806000606084860312156128da578081fd5b8335925060208401356128ec81612fff565b9150604084013561261c81612fff565b600080600060608486031215612910578081fd5b8335925060208401359150604084013561261c81612fff565b6000806000806080858703121561293e578182fd5b8435935060208501359250604085013561295781612fff565b9150606085013561296781613017565b939692955090935050565b6000815180845261298a816020860160208601612fd3565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600082516129c0818460208701612fd3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015612a97578151151584529284019290840190600101612a79565b50505083810382850152808551612aae8184612ee9565b91508192508381028201848801865b83811015612ae7578583038552612ad5838351612972565b94870194925090860190600101612abd565b50909998505050505050505050565b6000602082526121fc6020830184612972565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b60208082526023908201527f4d61737465724368656656323a2042616c616e6365206d75737420657863656560408201526206420360ec1b606082015260800190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526029908201527f4d61737465724368656656323a206d696772617465642062616c616e6365206d6040820152680eae6e840dac2e8c6d60bb1b606082015260800190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b6020808252601d908201527f4d61737465724368656656323a206e6f206d69677261746f7220736574000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612f7f578283fd5b8301803591506001600160401b03821115612f98578283fd5b6020019150368190038213156125d657600080fd5b6040518181016001600160401b0381118282101715612fcb57600080fd5b604052919050565b60005b83811015612fee578181015183820152602001612fd6565b8381111561135c5750506000910152565b6001600160a01b038116811461301457600080fd5b50565b801515811461301457600080fdfea2646970667358221220814e5dfdee606b9ff8357a8c99c275bc5bee65fd89e04f2e557682da8ccc9f4264736f6c634300060c0033", + "deployedBytecode": "0x6080604052600436106101d85760003560e01c806361621aaa11610102578063ab560e1011610095578063d1abb90711610064578063d1abb90714610529578063d2423b5114610549578063e30c39781461056a578063edd8b1701461057f576101d8565b8063ab560e10146104bf578063ab7de098146104d4578063b0bcf42a146104f4578063c346253d14610509576101d8565b806388bba42f116100d157806388bba42f1461043c5780638da5cb5b1461045c5780638dbdbe6d1461047157806393f1a40b14610491576101d8565b806361621aaa146103c557806378ed5d1f146103da5780637c516e94146104075780637cd07e4714610427576101d8565b806319ab453c1161017a5780634e71e0c8116101495780634e71e0c81461034e5780634f70b15a1461036357806351eb05a61461037857806357a5b58c146103a5576101d8565b806319ab453c146102ce57806323cf3118146102ee5780632f940c701461030e578063454b06081461032e576101d8565b80631526fe27116101b65780631526fe271461024a57806317caf6f11461027957806318fccc761461028e578063195426ec146102ae576101d8565b8063078dfbe7146101dd578063081e3eda146101ff5780630ad58d2f1461022a575b600080fd5b3480156101e957600080fd5b506101fd6101f83660046125dd565b610594565b005b34801561020b57600080fd5b50610214610683565b6040516102219190612ee9565b60405180910390f35b34801561023657600080fd5b506101fd6102453660046128fc565b610689565b34801561025657600080fd5b5061026a610265366004612867565b610819565b60405161022193929190612ebf565b34801561028557600080fd5b5061021461085b565b34801561029a57600080fd5b506101fd6102a9366004612897565b610861565b3480156102ba57600080fd5b506102146102c9366004612897565b6109fb565b3480156102da57600080fd5b506101fd6102e93660046126cb565b610bf8565b3480156102fa57600080fd5b506101fd6103093660046126cb565b610e19565b34801561031a57600080fd5b506101fd610329366004612897565b610e65565b34801561033a57600080fd5b506101fd610349366004612867565b610f86565b34801561035a57600080fd5b506101fd611232565b34801561036f57600080fd5b506101fd6112bf565b34801561038457600080fd5b50610398610393366004612867565b611362565b6040516102219190612e86565b3480156103b157600080fd5b506101fd6103c0366004612670565b6115dc565b3480156103d157600080fd5b5061021461160c565b3480156103e657600080fd5b506103fa6103f5366004612867565b611630565b60405161022191906129ca565b34801561041357600080fd5b506101fd610422366004612703565b611657565b34801561043357600080fd5b506103fa6116cb565b34801561044857600080fd5b506101fd610457366004612929565b6116da565b34801561046857600080fd5b506103fa611847565b34801561047d57600080fd5b506101fd61048c3660046128fc565b611856565b34801561049d57600080fd5b506104b16104ac366004612897565b6119e1565b604051610221929190612f31565b3480156104cb57600080fd5b506103fa611a05565b3480156104e057600080fd5b506101fd6104ef3660046128c6565b611a29565b34801561050057600080fd5b50610214611c02565b34801561051557600080fd5b506103fa610524366004612867565b611d76565b34801561053557600080fd5b506101fd6105443660046128fc565b611d83565b61055c610557366004612627565b611fb6565b604051610221929190612a5c565b34801561057657600080fd5b506103fa612146565b34801561058b57600080fd5b506103fa612155565b6000546001600160a01b031633146105c75760405162461bcd60e51b81526004016105be90612cfe565b60405180910390fd5b8115610662576001600160a01b0383161515806105e15750805b6105fd5760405162461bcd60e51b81526004016105be90612c18565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b03199182161790915560018054909116905561067e565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b610691612575565b61069a84611362565b600085815260066020908152604080832033845290915290208151919250906106ec9064e8d4a51000906106d89087906001600160801b0316612179565b816106df57fe5b60018401549190046121b6565b600182015580546106fd9085612203565b815560058054600091908790811061071157fe5b6000918252602090912001546001600160a01b0316905080156107975781546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291610764918a9133918a9160009190600401612ef2565b600060405180830381600087803b15801561077e57600080fd5b505af1158015610792573d6000803e3d6000fd5b505050505b6107c58486600489815481106107a957fe5b6000918252602090912001546001600160a01b03169190612226565b836001600160a01b031686336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516108099190612ee9565b60405180910390a4505050505050565b6003818154811061082657fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60075481565b610869612575565b61087283611362565b6000848152600660209081526040808320338452909152812082518154939450909264e8d4a51000916108ae91906001600160801b0316612179565b816108b557fe5b04905060006108d96108d48460010154846121b690919063ffffffff16565b612314565b600184018390559050801561091c5761091c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b60006005878154811061092b57fe5b6000918252602090912001546001600160a01b0316905080156109b05783546040516345fb1ba160e11b81526001600160a01b03831691638bf637429161097d918b9133918c91899190600401612ef2565b600060405180830381600087803b15801561099757600080fd5b505af11580156109ab573d6000803e3d6000fd5b505050505b86336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954846040516109ea9190612ee9565b60405180910390a350505050505050565b6000610a05612575565b60038481548110610a1257fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600683528385206001600160a01b0389168652909252918320825160048054949650919492169288908110610a9057fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610ac99030906004016129ca565b60206040518083038186803b158015610ae157600080fd5b505afa158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b19919061287f565b905083602001516001600160401b031643118015610b3657508015155b15610bbf576000610b5d85602001516001600160401b03164361220390919063ffffffff16565b90506000600754610b8d87604001516001600160401b0316610b87610b80611c02565b8690612179565b90612179565b81610b9457fe5b049050610bba83610baa8364e8d4a51000612179565b81610bb157fe5b8691900461233a565b935050505b60018301548354610bed916108d49164e8d4a5100090610bdf9087612179565b81610be657fe5b04906121b6565b979650505050505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610c279033906004016129ca565b60206040518083038186803b158015610c3f57600080fd5b505afa158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c77919061287f565b905080610c965760405162461bcd60e51b81526004016105be90612b5d565b610cab6001600160a01b03831633308461235d565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610cf9907f0000000000000000000000000000000000000000000000000000000000000000908590600401612a43565b602060405180830381600087803b158015610d1357600080fd5b505af1158015610d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b91906126af565b50604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb15890610dba907f0000000000000000000000000000000000000000000000000000000000000000908590600401612f31565b600060405180830381600087803b158015610dd457600080fd5b505af1158015610de8573d6000803e3d6000fd5b50506040517f98a9bd3b7a617581fc53b1e2992534e0e0cb5091c9d44aa1a7fc978f706caa83925060009150a15050565b6000546001600160a01b03163314610e435760405162461bcd60e51b81526004016105be90612cfe565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526006602090815260408083203384529091528120805482825560018201839055600580549293919286908110610e9c57fe5b6000918252602090912001546001600160a01b031690508015610f21576040516345fb1ba160e11b81526001600160a01b03821690638bf6374290610eee908890339089906000908190600401612ef2565b600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050505b610f338483600488815481106107a957fe5b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b85604051610f779190612ee9565b60405180910390a45050505050565b6002546001600160a01b0316610fae5760405162461bcd60e51b81526004016105be90612d9f565b600060048281548110610fbd57fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190610ff89030906004016129ca565b60206040518083038186803b15801561101057600080fd5b505afa158015611024573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611048919061287f565b60025460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b39261107d9216908590600401612a43565b602060405180830381600087803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906126af565b5060025460405163ce5494bb60e01b81526000916001600160a01b03169063ce5494bb906111019086906004016129ca565b602060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115391906126e7565b6040516370a0823160e01b81529091506001600160a01b038216906370a08231906111829030906004016129ca565b60206040518083038186803b15801561119a57600080fd5b505afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d2919061287f565b82146111f05760405162461bcd60e51b81526004016105be90612c47565b80600485815481106111fe57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050565b6001546001600160a01b031633811461125d5760405162461bcd60e51b81526004016105be90612d33565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb1589061132e907f000000000000000000000000000000000000000000000000000000000000000090600090600401612f31565b600060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b50505050565b61136a612575565b6003828154811061137757fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b909104169082015291504311156115d7576000600483815481106113d957fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906114129030906004016129ca565b60206040518083038186803b15801561142a57600080fd5b505afa15801561143e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611462919061287f565b905080156114fb57600061148c83602001516001600160401b03164361220390919063ffffffff16565b905060006007546114af85604001516001600160401b0316610b87610b80611c02565b816114b657fe5b0490506114ed6114dc846114cf8464e8d4a51000612179565b816114d657fe5b0461244e565b85516001600160801b031690612477565b6001600160801b0316845250505b611504436124a6565b6001600160401b03166020830152600380548391908590811061152357fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad353926115cd9290918691612f3f565b60405180910390a2505b919050565b8060005b8181101561135c576116038484838181106115f757fe5b90506020020135611362565b506001016115e0565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004818154811061163d57fe5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf9061168f908a908a908a908a908a908a908a90600401612a02565b600060405180830381600087803b1580156116a957600080fd5b505af11580156116bd573d6000803e3d6000fd5b505050505050505050505050565b6002546001600160a01b031681565b6000546001600160a01b031633146117045760405162461bcd60e51b81526004016105be90612cfe565b6117438361173d6003878154811061171857fe5b60009182526020909120015460075490600160c01b90046001600160401b0316612203565b9061233a565b60075561174f836124a6565b6003858154811061175c57fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555080156117d05781600585815481106117a157fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b806117fc57600584815481106117e257fe5b6000918252602090912001546001600160a01b03166117fe565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e18658584604051611839929190612f21565b60405180910390a350505050565b6000546001600160a01b031681565b61185e612575565b61186784611362565b60008581526006602090815260408083206001600160a01b03871684529091529020805491925090611899908561233a565b815581516118d09064e8d4a51000906118bc9087906001600160801b0316612179565b816118c357fe5b60018401549190046124cf565b81600101819055506000600586815481106118e757fe5b6000918252602090912001546001600160a01b03169050801561196d5781546040516345fb1ba160e11b81526001600160a01b03831691638bf637429161193a918a918991829160009190600401612ef2565b600060405180830381600087803b15801561195457600080fd5b505af1158015611968573d6000803e3d6000fd5b505050505b61199d33308760048a8154811061198057fe5b6000918252602090912001546001600160a01b031692919061235d565b836001600160a01b031686336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47886040516108099190612ee9565b60066020908152600092835260408084209091529082529020805460019091015482565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314611a535760405162461bcd60e51b81526004016105be90612cfe565b6007544390611a62908561233a565b6007556004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b038087166001600160a01b03199283161790925560058054938401815560009081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0909301805492861692909116919091179055604080516060810190915290815260039060208101611b0f846124a6565b6001600160401b03168152602001611b26876124a6565b6001600160401b039081169091528254600181810185556000948552602094859020845192018054958501516040909501518416600160c01b026001600160c01b0395909416600160801b0267ffffffffffffffff60801b196001600160801b039094166001600160801b0319909716969096179290921694909417929092161790556004546001600160a01b038085169290861691611bc591612203565b7f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e587604051611bf49190612ee9565b60405180910390a450505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5d57600080fd5b505afa158015611c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c95919061287f565b604051631526fe2760e01b8152611d69906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631526fe2790611d05907f000000000000000000000000000000000000000000000000000000000000000090600401612ee9565b60806040518083038186803b158015611d1d57600080fd5b505afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d559190612815565b6020015168056bc75e2d6310000090612179565b81611d7057fe5b04905090565b6005818154811061163d57fe5b611d8b612575565b611d9484611362565b6000858152600660209081526040808320338452909152812082518154939450909264e8d4a5100091611dd091906001600160801b0316612179565b81611dd757fe5b0490506000611df66108d48460010154846121b690919063ffffffff16565b9050611e3164e8d4a51000611e2186600001516001600160801b03168961217990919063ffffffff16565b81611e2857fe5b849190046121b6565b60018401558254611e429087612203565b8355611e786001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b600060058881548110611e8757fe5b6000918252602090912001546001600160a01b031690508015611f0c5783546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291611ed9918c9133918c91899190600401612ef2565b600060405180830381600087803b158015611ef357600080fd5b505af1158015611f07573d6000803e3d6000fd5b505050505b611f1e868860048b815481106107a957fe5b856001600160a01b031688336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328a604051611f629190612ee9565b60405180910390a487336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051611fa49190612ee9565b60405180910390a35050505050505050565b606080836001600160401b0381118015611fcf57600080fd5b50604051908082528060200260200182016040528015611ff9578160200160208202803683370190505b509150836001600160401b038111801561201257600080fd5b5060405190808252806020026020018201604052801561204657816020015b60608152602001906001900390816120315790505b50905060005b8481101561213d57600060603088888581811061206557fe5b90506020028101906120779190612f69565b60405161208592919061299e565b600060405180830381855af49150503d80600081146120c0576040519150601f19603f3d011682016040523d82523d6000602084013e6120c5565b606091505b509150915081806120d4575085155b6120dd82612515565b906120fb5760405162461bcd60e51b81526004016105be9190612af6565b508185848151811061210957fe5b6020026020010190151590811515815250508084848151811061212857fe5b6020908102919091010152505060010161204c565b50935093915050565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008115806121945750508082028282828161219157fe5b04145b6121b05760405162461bcd60e51b81526004016105be90612e4f565b92915050565b60008183038183128015906121cb5750838113155b806121e057506000831280156121e057508381135b6121fc5760405162461bcd60e51b81526004016105be90612dd6565b9392505050565b808203828111156121b05760405162461bcd60e51b81526004016105be90612b09565b60006060846001600160a01b031663a9059cbb858560405160240161224c929190612a43565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161228591906129ae565b6000604051808303816000865af19150503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b50915091508180156122f15750805115806122f15750808060200190518101906122f191906126af565b61230d5760405162461bcd60e51b81526004016105be90612ba0565b5050505050565b6000808212156123365760405162461bcd60e51b81526004016105be90612b38565b5090565b818101818110156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006060856001600160a01b03166323b872dd868686604051602401612385939291906129de565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516123be91906129ae565b6000604051808303816000865af19150503d80600081146123fb576040519150601f19603f3d011682016040523d82523d6000602084013e612400565b606091505b509150915081801561242a57508051158061242a57508080602001905181019061242a91906126af565b6124465760405162461bcd60e51b81526004016105be90612e1a565b505050505050565b60006001600160801b038211156123365760405162461bcd60e51b81526004016105be90612c90565b8181016001600160801b0380831690821610156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006001600160401b038211156123365760405162461bcd60e51b81526004016105be90612d68565b60008282018183128015906124e45750838112155b806124f957506000831280156124f957508381125b6121fc5760405162461bcd60e51b81526004016105be90612bd7565b606060448251101561255b575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526115d7565b600482019150818060200190518101906121b0919061278a565b604080516060810182526000808252602082018190529181019190915290565b60008083601f8401126125a6578182fd5b5081356001600160401b038111156125bc578182fd5b60208301915083602080830285010111156125d657600080fd5b9250929050565b6000806000606084860312156125f1578283fd5b83356125fc81612fff565b9250602084013561260c81613017565b9150604084013561261c81613017565b809150509250925092565b60008060006040848603121561263b578283fd5b83356001600160401b03811115612650578384fd5b61265c86828701612595565b909450925050602084013561261c81613017565b60008060208385031215612682578182fd5b82356001600160401b03811115612697578283fd5b6126a385828601612595565b90969095509350505050565b6000602082840312156126c0578081fd5b81516121fc81613017565b6000602082840312156126dc578081fd5b81356121fc81612fff565b6000602082840312156126f8578081fd5b81516121fc81612fff565b600080600080600080600080610100898b03121561271f578384fd5b883561272a81612fff565b9750602089013561273a81612fff565b9650604089013561274a81612fff565b9550606089013594506080890135935060a089013560ff8116811461276d578384fd5b979a969950949793969295929450505060c08201359160e0013590565b60006020828403121561279b578081fd5b81516001600160401b03808211156127b1578283fd5b818401915084601f8301126127c4578283fd5b8151818111156127d2578384fd5b6127e5601f8201601f1916602001612fad565b91508082528560208285010111156127fb578384fd5b61280c816020840160208601612fd3565b50949350505050565b600060808284031215612826578081fd5b6128306080612fad565b825161283b81612fff565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215612878578081fd5b5035919050565b600060208284031215612890578081fd5b5051919050565b600080604083850312156128a9578182fd5b8235915060208301356128bb81612fff565b809150509250929050565b6000806000606084860312156128da578081fd5b8335925060208401356128ec81612fff565b9150604084013561261c81612fff565b600080600060608486031215612910578081fd5b8335925060208401359150604084013561261c81612fff565b6000806000806080858703121561293e578182fd5b8435935060208501359250604085013561295781612fff565b9150606085013561296781613017565b939692955090935050565b6000815180845261298a816020860160208601612fd3565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600082516129c0818460208701612fd3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015612a97578151151584529284019290840190600101612a79565b50505083810382850152808551612aae8184612ee9565b91508192508381028201848801865b83811015612ae7578583038552612ad5838351612972565b94870194925090860190600101612abd565b50909998505050505050505050565b6000602082526121fc6020830184612972565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b60208082526023908201527f4d61737465724368656656323a2042616c616e6365206d75737420657863656560408201526206420360ec1b606082015260800190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526029908201527f4d61737465724368656656323a206d696772617465642062616c616e6365206d6040820152680eae6e840dac2e8c6d60bb1b606082015260800190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b6020808252601d908201527f4d61737465724368656656323a206e6f206d69677261746f7220736574000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612f7f578283fd5b8301803591506001600160401b03821115612f98578283fd5b6020019150368190038213156125d657600080fd5b6040518181016001600160401b0381118282101715612fcb57600080fd5b604052919050565b60005b83811015612fee578181015183820152602001612fd6565b8381111561135c5750506000910152565b6001600160a01b038116811461301457600080fd5b50565b801515811461301457600080fdfea2646970667358221220814e5dfdee606b9ff8357a8c99c275bc5bee65fd89e04f2e557682da8ccc9f4264736f6c634300060c0033", + "linkReferences": {}, + "deployedLinkReferences": {} + }, + "MasterChefV2.dbg": { + "_format": "hh-sol-dbg-1", + "buildInfo": "../../build-info/b78e6e91d6666dbbf407d4a383cd8177.json" + }, + "IMigratorChef": { + "_format": "hh-sol-artifact-1", + "contractName": "IMigratorChef", + "sourceName": "contracts/MasterChefV2.sol", + "abi": [], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} + }, + "IMigratorChef.dbg": { + "_format": "hh-sol-dbg-1", + "buildInfo": "../../build-info/b78e6e91d6666dbbf407d4a383cd8177.json" + } +} diff --git a/tests/testdata/hardhat-build-info-artifact.json b/tests/testdata/hardhat-build-info-artifact.json new file mode 100644 index 0000000..26fdedd --- /dev/null +++ b/tests/testdata/hardhat-build-info-artifact.json @@ -0,0 +1,35098 @@ +{ + "id": "b78e6e91d6666dbbf407d4a383cd8177", + "_format": "hh-sol-build-info-1", + "solcVersion": "0.6.12", + "solcLongVersion": "0.6.12+commit.27d51765", + "input": { + "language": "Solidity", + "sources": { + "contracts/interfaces/IMasterChef.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.6.12;\npragma experimental ABIEncoderV2;\nimport \"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\";\n\ninterface IMasterChef {\n using BoringERC20 for IERC20;\n struct UserInfo {\n uint256 amount; // How many LP tokens the user has provided.\n uint256 rewardDebt; // Reward debt. See explanation below.\n }\n\n struct PoolInfo {\n IERC20 lpToken; // Address of LP token contract.\n uint256 allocPoint; // How many allocation points assigned to this pool. SUSHI to distribute per block.\n uint256 lastRewardBlock; // Last block number that SUSHI distribution occurs.\n uint256 accSushiPerShare; // Accumulated SUSHI per share, times 1e12. See below.\n }\n\n function poolInfo(uint256 pid) external view returns (IMasterChef.PoolInfo memory);\n function totalAllocPoint() external view returns (uint256);\n function deposit(uint256 _pid, uint256 _amount) external;\n}\n" + }, + "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol": { + "content": "// SPDX-License-Identifier: UNLICENSED\r\npragma solidity 0.6.12;\r\n\r\nimport \"../interfaces/IERC20.sol\";\r\n\r\nlibrary BoringERC20 {\r\n function safeSymbol(IERC20 token) internal view returns(string memory) {\r\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));\r\n return success && data.length > 0 ? abi.decode(data, (string)) : \"???\";\r\n }\r\n\r\n function safeName(IERC20 token) internal view returns(string memory) {\r\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));\r\n return success && data.length > 0 ? abi.decode(data, (string)) : \"???\";\r\n }\r\n\r\n function safeDecimals(IERC20 token) internal view returns (uint8) {\r\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));\r\n return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;\r\n }\r\n\r\n function safeTransfer(IERC20 token, address to, uint256 amount) internal {\r\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount));\r\n require(success && (data.length == 0 || abi.decode(data, (bool))), \"BoringERC20: Transfer failed\");\r\n }\r\n\r\n function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {\r\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount));\r\n require(success && (data.length == 0 || abi.decode(data, (bool))), \"BoringERC20: TransferFrom failed\");\r\n }\r\n}" + }, + "contracts/MasterChefV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.6.12;\npragma experimental ABIEncoderV2;\n\nimport \"@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol\";\nimport \"@boringcrypto/boring-solidity/contracts/BoringBatchable.sol\";\nimport \"@boringcrypto/boring-solidity/contracts/BoringOwnable.sol\";\nimport \"./libraries/SignedSafeMath.sol\";\nimport \"./interfaces/IRewarder.sol\";\nimport \"./interfaces/IMasterChef.sol\";\n\ninterface IMigratorChef {\n // Take the current LP token address and return the new LP token address.\n // Migrator should have full access to the caller's LP token.\n function migrate(IERC20 token) external returns (IERC20);\n}\n\n/// @notice The (older) MasterChef contract gives out a constant number of SUSHI tokens per block.\n/// It is the only address with minting rights for SUSHI.\n/// The idea for this MasterChef V2 (MCV2) contract is therefore to be the owner of a dummy token\n/// that is deposited into the MasterChef V1 (MCV1) contract.\n/// The allocation point for this pool on MCV1 is the total allocation point for all pools that receive double incentives.\ncontract MasterChefV2 is BoringOwnable, BoringBatchable {\n using BoringMath for uint256;\n using BoringMath128 for uint128;\n using BoringERC20 for IERC20;\n using SignedSafeMath for int256;\n\n /// @notice Info of each MCV2 user.\n /// `amount` LP token amount the user has provided.\n /// `rewardDebt` The amount of SUSHI entitled to the user.\n struct UserInfo {\n uint256 amount;\n int256 rewardDebt;\n }\n\n /// @notice Info of each MCV2 pool.\n /// `allocPoint` The amount of allocation points assigned to the pool.\n /// Also known as the amount of SUSHI to distribute per block.\n struct PoolInfo {\n uint128 accSushiPerShare;\n uint64 lastRewardBlock;\n uint64 allocPoint;\n }\n\n /// @notice Address of MCV1 contract.\n IMasterChef public immutable MASTER_CHEF;\n /// @notice Address of SUSHI contract.\n IERC20 public immutable SUSHI;\n /// @notice The index of MCV2 master pool in MCV1.\n uint256 public immutable MASTER_PID;\n // @notice The migrator contract. It has a lot of power. Can only be set through governance (owner).\n IMigratorChef public migrator;\n\n /// @notice Info of each MCV2 pool.\n PoolInfo[] public poolInfo;\n /// @notice Address of the LP token for each MCV2 pool.\n IERC20[] public lpToken;\n /// @notice Address of each `IRewarder` contract in MCV2.\n IRewarder[] public rewarder;\n\n /// @notice Info of each user that stakes LP tokens.\n mapping (uint256 => mapping (address => UserInfo)) public userInfo;\n /// @dev Total allocation points. Must be the sum of all allocation points in all pools.\n uint256 public totalAllocPoint;\n\n uint256 private constant MASTERCHEF_SUSHI_PER_BLOCK = 1e20;\n uint256 private constant ACC_SUSHI_PRECISION = 1e12;\n\n event Deposit(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\n event Withdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\n event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\n event Harvest(address indexed user, uint256 indexed pid, uint256 amount);\n event LogPoolAddition(uint256 indexed pid, uint256 allocPoint, IERC20 indexed lpToken, IRewarder indexed rewarder);\n event LogSetPool(uint256 indexed pid, uint256 allocPoint, IRewarder indexed rewarder, bool overwrite);\n event LogUpdatePool(uint256 indexed pid, uint64 lastRewardBlock, uint256 lpSupply, uint256 accSushiPerShare);\n event LogInit();\n\n /// @param _MASTER_CHEF The SushiSwap MCV1 contract address.\n /// @param _sushi The SUSHI token contract address.\n /// @param _MASTER_PID The pool ID of the dummy token on the base MCV1 contract.\n constructor(IMasterChef _MASTER_CHEF, IERC20 _sushi, uint256 _MASTER_PID) public {\n MASTER_CHEF = _MASTER_CHEF;\n SUSHI = _sushi;\n MASTER_PID = _MASTER_PID;\n }\n\n /// @notice Deposits a dummy token to `MASTER_CHEF` MCV1. This is required because MCV1 holds the minting rights for SUSHI.\n /// Any balance of transaction sender in `dummyToken` is transferred.\n /// The allocation point for the pool on MCV1 is the total allocation point for all pools that receive double incentives.\n /// @param dummyToken The address of the ERC-20 token to deposit into MCV1.\n function init(IERC20 dummyToken) external {\n uint256 balance = dummyToken.balanceOf(msg.sender);\n require(balance != 0, \"MasterChefV2: Balance must exceed 0\");\n dummyToken.safeTransferFrom(msg.sender, address(this), balance);\n dummyToken.approve(address(MASTER_CHEF), balance);\n MASTER_CHEF.deposit(MASTER_PID, balance);\n emit LogInit();\n }\n\n /// @notice Returns the number of MCV2 pools.\n function poolLength() public view returns (uint256 pools) {\n pools = poolInfo.length;\n }\n\n /// @notice Add a new LP to the pool. Can only be called by the owner.\n /// DO NOT add the same LP token more than once. Rewards will be messed up if you do.\n /// @param allocPoint AP of the new pool.\n /// @param _lpToken Address of the LP ERC-20 token.\n /// @param _rewarder Address of the rewarder delegate.\n function add(uint256 allocPoint, IERC20 _lpToken, IRewarder _rewarder) public onlyOwner {\n uint256 lastRewardBlock = block.number;\n totalAllocPoint = totalAllocPoint.add(allocPoint);\n lpToken.push(_lpToken);\n rewarder.push(_rewarder);\n\n poolInfo.push(PoolInfo({\n allocPoint: allocPoint.to64(),\n lastRewardBlock: lastRewardBlock.to64(),\n accSushiPerShare: 0\n }));\n emit LogPoolAddition(lpToken.length.sub(1), allocPoint, _lpToken, _rewarder);\n }\n\n /// @notice Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\n /// @param _pid The index of the pool. See `poolInfo`.\n /// @param _allocPoint New AP of the pool.\n /// @param _rewarder Address of the rewarder delegate.\n /// @param overwrite True if _rewarder should be `set`. Otherwise `_rewarder` is ignored.\n function set(uint256 _pid, uint256 _allocPoint, IRewarder _rewarder, bool overwrite) public onlyOwner {\n totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);\n poolInfo[_pid].allocPoint = _allocPoint.to64();\n if (overwrite) { rewarder[_pid] = _rewarder; }\n emit LogSetPool(_pid, _allocPoint, overwrite ? _rewarder : rewarder[_pid], overwrite);\n }\n\n /// @notice Set the `migrator` contract. Can only be called by the owner.\n /// @param _migrator The contract address to set.\n function setMigrator(IMigratorChef _migrator) public onlyOwner {\n migrator = _migrator;\n }\n\n /// @notice Migrate LP token to another LP contract through the `migrator` contract.\n /// @param _pid The index of the pool. See `poolInfo`.\n function migrate(uint256 _pid) public {\n require(address(migrator) != address(0), \"MasterChefV2: no migrator set\");\n IERC20 _lpToken = lpToken[_pid];\n uint256 bal = _lpToken.balanceOf(address(this));\n _lpToken.approve(address(migrator), bal);\n IERC20 newLpToken = migrator.migrate(_lpToken);\n require(bal == newLpToken.balanceOf(address(this)), \"MasterChefV2: migrated balance must match\");\n lpToken[_pid] = newLpToken;\n }\n\n /// @notice View function to see pending SUSHI on frontend.\n /// @param _pid The index of the pool. See `poolInfo`.\n /// @param _user Address of user.\n /// @return pending SUSHI reward for a given user.\n function pendingSushi(uint256 _pid, address _user) external view returns (uint256 pending) {\n PoolInfo memory pool = poolInfo[_pid];\n UserInfo storage user = userInfo[_pid][_user];\n uint256 accSushiPerShare = pool.accSushiPerShare;\n uint256 lpSupply = lpToken[_pid].balanceOf(address(this));\n if (block.number > pool.lastRewardBlock && lpSupply != 0) {\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\n uint256 sushiReward = blocks.mul(sushiPerBlock()).mul(pool.allocPoint) / totalAllocPoint;\n accSushiPerShare = accSushiPerShare.add(sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply);\n }\n pending = int256(user.amount.mul(accSushiPerShare) / ACC_SUSHI_PRECISION).sub(user.rewardDebt).toUInt256();\n }\n\n /// @notice Update reward variables for all pools. Be careful of gas spending!\n /// @param pids Pool IDs of all to be updated. Make sure to update all active pools.\n function massUpdatePools(uint256[] calldata pids) external {\n uint256 len = pids.length;\n for (uint256 i = 0; i < len; ++i) {\n updatePool(pids[i]);\n }\n }\n\n /// @notice Calculates and returns the `amount` of SUSHI per block.\n function sushiPerBlock() public view returns (uint256 amount) {\n amount = uint256(MASTERCHEF_SUSHI_PER_BLOCK)\n .mul(MASTER_CHEF.poolInfo(MASTER_PID).allocPoint) / MASTER_CHEF.totalAllocPoint();\n }\n\n /// @notice Update reward variables of the given pool.\n /// @param pid The index of the pool. See `poolInfo`.\n /// @return pool Returns the pool that was updated.\n function updatePool(uint256 pid) public returns (PoolInfo memory pool) {\n pool = poolInfo[pid];\n if (block.number > pool.lastRewardBlock) {\n uint256 lpSupply = lpToken[pid].balanceOf(address(this));\n if (lpSupply > 0) {\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\n uint256 sushiReward = blocks.mul(sushiPerBlock()).mul(pool.allocPoint) / totalAllocPoint;\n pool.accSushiPerShare = pool.accSushiPerShare.add((sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply).to128());\n }\n pool.lastRewardBlock = block.number.to64();\n poolInfo[pid] = pool;\n emit LogUpdatePool(pid, pool.lastRewardBlock, lpSupply, pool.accSushiPerShare);\n }\n }\n\n /// @notice Deposit LP tokens to MCV2 for SUSHI allocation.\n /// @param pid The index of the pool. See `poolInfo`.\n /// @param amount LP token amount to deposit.\n /// @param to The receiver of `amount` deposit benefit.\n function deposit(uint256 pid, uint256 amount, address to) public {\n PoolInfo memory pool = updatePool(pid);\n UserInfo storage user = userInfo[pid][to];\n\n // Effects\n user.amount = user.amount.add(amount);\n user.rewardDebt = user.rewardDebt.add(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\n\n // Interactions\n IRewarder _rewarder = rewarder[pid];\n if (address(_rewarder) != address(0)) {\n _rewarder.onSushiReward(pid, to, to, 0, user.amount);\n }\n\n lpToken[pid].safeTransferFrom(msg.sender, address(this), amount);\n\n emit Deposit(msg.sender, pid, amount, to);\n }\n\n /// @notice Withdraw LP tokens from MCV2.\n /// @param pid The index of the pool. See `poolInfo`.\n /// @param amount LP token amount to withdraw.\n /// @param to Receiver of the LP tokens.\n function withdraw(uint256 pid, uint256 amount, address to) public {\n PoolInfo memory pool = updatePool(pid);\n UserInfo storage user = userInfo[pid][msg.sender];\n\n // Effects\n user.rewardDebt = user.rewardDebt.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\n user.amount = user.amount.sub(amount);\n\n // Interactions\n IRewarder _rewarder = rewarder[pid];\n if (address(_rewarder) != address(0)) {\n _rewarder.onSushiReward(pid, msg.sender, to, 0, user.amount);\n }\n \n lpToken[pid].safeTransfer(to, amount);\n\n emit Withdraw(msg.sender, pid, amount, to);\n }\n\n /// @notice Harvest proceeds for transaction sender to `to`.\n /// @param pid The index of the pool. See `poolInfo`.\n /// @param to Receiver of SUSHI rewards.\n function harvest(uint256 pid, address to) public {\n PoolInfo memory pool = updatePool(pid);\n UserInfo storage user = userInfo[pid][msg.sender];\n int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION);\n uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256();\n\n // Effects\n user.rewardDebt = accumulatedSushi;\n\n // Interactions\n if (_pendingSushi != 0) {\n SUSHI.safeTransfer(to, _pendingSushi);\n }\n \n IRewarder _rewarder = rewarder[pid];\n if (address(_rewarder) != address(0)) {\n _rewarder.onSushiReward( pid, msg.sender, to, _pendingSushi, user.amount);\n }\n\n emit Harvest(msg.sender, pid, _pendingSushi);\n }\n \n /// @notice Withdraw LP tokens from MCV2 and harvest proceeds for transaction sender to `to`.\n /// @param pid The index of the pool. See `poolInfo`.\n /// @param amount LP token amount to withdraw.\n /// @param to Receiver of the LP tokens and SUSHI rewards.\n function withdrawAndHarvest(uint256 pid, uint256 amount, address to) public {\n PoolInfo memory pool = updatePool(pid);\n UserInfo storage user = userInfo[pid][msg.sender];\n int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION);\n uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256();\n\n // Effects\n user.rewardDebt = accumulatedSushi.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\n user.amount = user.amount.sub(amount);\n \n // Interactions\n SUSHI.safeTransfer(to, _pendingSushi);\n\n IRewarder _rewarder = rewarder[pid];\n if (address(_rewarder) != address(0)) {\n _rewarder.onSushiReward(pid, msg.sender, to, _pendingSushi, user.amount);\n }\n\n lpToken[pid].safeTransfer(to, amount);\n\n emit Withdraw(msg.sender, pid, amount, to);\n emit Harvest(msg.sender, pid, _pendingSushi);\n }\n\n /// @notice Harvests SUSHI from `MASTER_CHEF` MCV1 and pool `MASTER_PID` to this MCV2 contract.\n function harvestFromMasterChef() public {\n MASTER_CHEF.deposit(MASTER_PID, 0);\n }\n\n /// @notice Withdraw without caring about rewards. EMERGENCY ONLY.\n /// @param pid The index of the pool. See `poolInfo`.\n /// @param to Receiver of the LP tokens.\n function emergencyWithdraw(uint256 pid, address to) public {\n UserInfo storage user = userInfo[pid][msg.sender];\n uint256 amount = user.amount;\n user.amount = 0;\n user.rewardDebt = 0;\n\n IRewarder _rewarder = rewarder[pid];\n if (address(_rewarder) != address(0)) {\n _rewarder.onSushiReward(pid, msg.sender, to, 0, 0);\n }\n\n // Note: transfer can fail or succeed if `amount` is zero.\n lpToken[pid].safeTransfer(to, amount);\n emit EmergencyWithdraw(msg.sender, pid, amount, to);\n }\n}\n" + }, + "contracts/libraries/SignedSafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.6.12;\n\nlibrary SignedSafeMath {\n int256 constant private _INT256_MIN = -2**255;\n\n /**\n * @dev Returns the multiplication of two signed integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(int256 a, int256 b) internal pure returns (int256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) {\n return 0;\n }\n\n require(!(a == -1 && b == _INT256_MIN), \"SignedSafeMath: multiplication overflow\");\n\n int256 c = a * b;\n require(c / a == b, \"SignedSafeMath: multiplication overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the integer division of two signed integers. Reverts on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(int256 a, int256 b) internal pure returns (int256) {\n require(b != 0, \"SignedSafeMath: division by zero\");\n require(!(b == -1 && a == _INT256_MIN), \"SignedSafeMath: division overflow\");\n\n int256 c = a / b;\n\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two signed integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a - b;\n require((b >= 0 && c <= a) || (b < 0 && c > a), \"SignedSafeMath: subtraction overflow\");\n\n return c;\n }\n\n /**\n * @dev Returns the addition of two signed integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(int256 a, int256 b) internal pure returns (int256) {\n int256 c = a + b;\n require((b >= 0 && c >= a) || (b < 0 && c < a), \"SignedSafeMath: addition overflow\");\n\n return c;\n }\n\n function toUInt256(int256 a) internal pure returns (uint256) {\n require(a >= 0, \"Integer < 0\");\n return uint256(a);\n }\n}" + }, + "contracts/interfaces/IRewarder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.6.12;\nimport \"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\";\ninterface IRewarder {\n using BoringERC20 for IERC20;\n function onSushiReward(uint256 pid, address user, address recipient, uint256 sushiAmount, uint256 newLpAmount) external;\n function pendingTokens(uint256 pid, address user, uint256 sushiAmount) external returns (IERC20[] memory, uint256[] memory);\n}\n" + }, + "contracts/mocks/ComplexRewarder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.6.12;\npragma experimental ABIEncoderV2;\nimport \"../interfaces/IRewarder.sol\";\nimport \"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\";\nimport \"@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol\";\nimport \"@boringcrypto/boring-solidity/contracts/BoringOwnable.sol\";\nimport \"../MasterChefV2.sol\";\n\n/// @author @0xKeno\ncontract ComplexRewarder is IRewarder, BoringOwnable{\n using BoringMath for uint256;\n using BoringMath128 for uint128;\n using BoringERC20 for IERC20;\n\n IERC20 private immutable rewardToken;\n\n /// @notice Info of each MCV2 user.\n /// `amount` LP token amount the user has provided.\n /// `rewardDebt` The amount of SUSHI entitled to the user.\n struct UserInfo {\n uint256 amount;\n uint256 rewardDebt;\n }\n\n /// @notice Info of each MCV2 pool.\n /// `allocPoint` The amount of allocation points assigned to the pool.\n /// Also known as the amount of SUSHI to distribute per block.\n struct PoolInfo {\n uint128 accSushiPerShare;\n uint64 lastRewardBlock;\n uint64 allocPoint;\n }\n\n /// @notice Info of each pool.\n mapping (uint256 => PoolInfo) public poolInfo;\n\n uint256[] public poolIds;\n\n /// @notice Info of each user that stakes LP tokens.\n mapping (uint256 => mapping (address => UserInfo)) public userInfo;\n /// @dev Total allocation points. Must be the sum of all allocation points in all pools.\n uint256 totalAllocPoint;\n\n uint256 public tokenPerBlock;\n uint256 private constant ACC_TOKEN_PRECISION = 1e12;\n\n address private immutable MASTERCHEF_V2;\n\n event LogOnReward(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\n event LogPoolAddition(uint256 indexed pid, uint256 allocPoint);\n event LogSetPool(uint256 indexed pid, uint256 allocPoint);\n event LogUpdatePool(uint256 indexed pid, uint64 lastRewardBlock, uint256 lpSupply, uint256 accSushiPerShare);\n event LogInit();\n\n constructor (IERC20 _rewardToken, uint256 _tokenPerBlock, address _MASTERCHEF_V2) public {\n rewardToken = _rewardToken;\n tokenPerBlock = _tokenPerBlock;\n MASTERCHEF_V2 = _MASTERCHEF_V2;\n }\n\n\n function onSushiReward (uint256 pid, address _user, address to, uint256, uint256 lpToken) onlyMCV2 override external {\n PoolInfo memory pool = updatePool(pid);\n UserInfo storage user = userInfo[pid][_user];\n uint256 pending;\n if (user.amount > 0) {\n pending =\n (user.amount.mul(pool.accSushiPerShare) / ACC_TOKEN_PRECISION).sub(\n user.rewardDebt\n );\n rewardToken.safeTransfer(to, pending);\n }\n user.amount = lpToken;\n user.rewardDebt = lpToken.mul(pool.accSushiPerShare) / ACC_TOKEN_PRECISION;\n emit LogOnReward(_user, pid, pending, to);\n }\n \n function pendingTokens(uint256 pid, address user, uint256) override external returns (IERC20[] memory rewardTokens, uint256[] memory rewardAmounts) {\n IERC20[] memory _rewardTokens = new IERC20[](1);\n _rewardTokens[0] = (rewardToken);\n uint256[] memory _rewardAmounts = new uint256[](1);\n _rewardAmounts[0] = pendingToken(pid, user);\n return (_rewardTokens, _rewardAmounts);\n }\n\n modifier onlyMCV2 {\n require(\n msg.sender == MASTERCHEF_V2,\n \"Only MCV2 can call this function.\"\n );\n _;\n }\n\n /// @notice Returns the number of MCV2 pools.\n function poolLength() public view returns (uint256 pools) {\n pools = poolIds.length;\n }\n\n /// @notice Add a new LP to the pool. Can only be called by the owner.\n /// DO NOT add the same LP token more than once. Rewards will be messed up if you do.\n /// @param allocPoint AP of the new pool.\n /// @param _pid Pid on MCV2\n function add(uint256 allocPoint, uint256 _pid) public onlyOwner {\n require(poolInfo[_pid].lastRewardBlock == 0, \"Pool already exists\");\n uint256 lastRewardBlock = block.number;\n totalAllocPoint = totalAllocPoint.add(allocPoint);\n\n poolInfo[_pid] = PoolInfo({\n allocPoint: allocPoint.to64(),\n lastRewardBlock: lastRewardBlock.to64(),\n accSushiPerShare: 0\n });\n poolIds.push(_pid);\n emit LogPoolAddition(_pid, allocPoint);\n }\n\n /// @notice Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\n /// @param _pid The index of the pool. See `poolInfo`.\n /// @param _allocPoint New AP of the pool.\n function set(uint256 _pid, uint256 _allocPoint) public onlyOwner {\n totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);\n poolInfo[_pid].allocPoint = _allocPoint.to64();\n emit LogSetPool(_pid, _allocPoint);\n }\n\n /// @notice View function to see pending Token\n /// @param _pid The index of the pool. See `poolInfo`.\n /// @param _user Address of user.\n /// @return pending SUSHI reward for a given user.\n function pendingToken(uint256 _pid, address _user) public view returns (uint256 pending) {\n PoolInfo memory pool = poolInfo[_pid];\n UserInfo storage user = userInfo[_pid][_user];\n uint256 accSushiPerShare = pool.accSushiPerShare;\n uint256 lpSupply = MasterChefV2(MASTERCHEF_V2).lpToken(_pid).balanceOf(MASTERCHEF_V2);\n if (block.number > pool.lastRewardBlock && lpSupply != 0) {\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\n uint256 sushiReward = blocks.mul(tokenPerBlock).mul(pool.allocPoint) / totalAllocPoint;\n accSushiPerShare = accSushiPerShare.add(sushiReward.mul(ACC_TOKEN_PRECISION) / lpSupply);\n }\n pending = (user.amount.mul(accSushiPerShare) / ACC_TOKEN_PRECISION).sub(user.rewardDebt);\n }\n\n /// @notice Update reward variables for all pools. Be careful of gas spending!\n /// @param pids Pool IDs of all to be updated. Make sure to update all active pools.\n function massUpdatePools(uint256[] calldata pids) external {\n uint256 len = pids.length;\n for (uint256 i = 0; i < len; ++i) {\n updatePool(pids[i]);\n }\n }\n\n /// @notice Update reward variables of the given pool.\n /// @param pid The index of the pool. See `poolInfo`.\n /// @return pool Returns the pool that was updated.\n function updatePool(uint256 pid) public returns (PoolInfo memory pool) {\n pool = poolInfo[pid];\n if (block.number > pool.lastRewardBlock) {\n uint256 lpSupply = MasterChefV2(MASTERCHEF_V2).lpToken(pid).balanceOf(MASTERCHEF_V2);\n\n if (lpSupply > 0) {\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\n uint256 sushiReward = blocks.mul(tokenPerBlock).mul(pool.allocPoint) / totalAllocPoint;\n pool.accSushiPerShare = pool.accSushiPerShare.add((sushiReward.mul(ACC_TOKEN_PRECISION) / lpSupply).to128());\n }\n pool.lastRewardBlock = block.number.to64();\n poolInfo[pid] = pool;\n emit LogUpdatePool(pid, pool.lastRewardBlock, lpSupply, pool.accSushiPerShare);\n }\n }\n\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } + }, + "output": { + "contracts": { + "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol": { + "BoringERC20": { + "abi": [], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c2fe6f51bba98a39f828757f181ad2e5b35badf658bc93bc2e7f7a833dda063764736f6c634300060c0033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC2 INVALID PUSH16 0x51BBA98A39F828757F181AD2E5B35BAD 0xF6 PC 0xBC SWAP4 0xBC 0x2E PUSH32 0x7A833DDA063764736F6C634300060C0033000000000000000000000000000000 ", + "sourceMap": "105:1493:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c2fe6f51bba98a39f828757f181ad2e5b35badf658bc93bc2e7f7a833dda063764736f6c634300060c0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC2 INVALID PUSH16 0x51BBA98A39F828757F181AD2E5B35BAD 0xF6 PC 0xBC SWAP4 0xBC 0x2E PUSH32 0x7A833DDA063764736F6C634300060C0033000000000000000000000000000000 ", + "sourceMap": "105:1493:3:-:0;;;;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "17200", + "executionCost": "97", + "totalCost": "17297" + }, + "internal": { + "safeDecimals(contract IERC20)": "infinite", + "safeName(contract IERC20)": "infinite", + "safeSymbol(contract IERC20)": "infinite", + "safeTransfer(contract IERC20,address,uint256)": "infinite", + "safeTransferFrom(contract IERC20,address,address,uint256)": "infinite" + } + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\":\"BoringERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\npragma solidity 0.6.12;\\r\\n\\r\\ninterface IERC20 {\\r\\n function totalSupply() external view returns (uint256);\\r\\n function balanceOf(address account) external view returns (uint256);\\r\\n function allowance(address owner, address spender) external view returns (uint256);\\r\\n function approve(address spender, uint256 amount) external returns (bool);\\r\\n event Transfer(address indexed from, address indexed to, uint256 value);\\r\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\r\\n\\r\\n // EIP 2612\\r\\n function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;\\r\\n}\",\"keccak256\":\"0x8004f86e4536cca55b8eeb2621fe18e1ee57d779396ddef50bce5bf70fb59867\",\"license\":\"MIT\"},\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"../interfaces/IERC20.sol\\\";\\r\\n\\r\\nlibrary BoringERC20 {\\r\\n function safeSymbol(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeName(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeDecimals(IERC20 token) internal view returns (uint8) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));\\r\\n return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;\\r\\n }\\r\\n\\r\\n function safeTransfer(IERC20 token, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\r\\n }\\r\\n\\r\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: TransferFrom failed\\\");\\r\\n }\\r\\n}\",\"keccak256\":\"0x69f1ccf716991e5d6d64dc0e3bc3828fd1990bc18400d680b1aa1960675daaaa\",\"license\":\"UNLICENSED\"}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "contracts/MasterChefV2.sol": { + "IMigratorChef": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + } + ], + "name": "migrate", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "migrate(address)": "ce5494bb" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"migrate\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/MasterChefV2.sol\":\"IMigratorChef\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@boringcrypto/boring-solidity/contracts/BoringBatchable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\r\\n// Audit on 5-Jan-2021 by Keno and BoringCrypto\\r\\n\\r\\n// P1 - P3: OK\\r\\npragma solidity 0.6.12;\\r\\npragma experimental ABIEncoderV2;\\r\\n// solhint-disable avoid-low-level-calls\\r\\n\\r\\nimport \\\"./libraries/BoringERC20.sol\\\";\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BaseBoringBatchable {\\r\\n function _getRevertMsg(bytes memory _returnData) internal pure returns (string memory) {\\r\\n // If the _res length is less than 68, then the transaction failed silently (without a revert message)\\r\\n if (_returnData.length < 68) return \\\"Transaction reverted silently\\\";\\r\\n\\r\\n assembly {\\r\\n // Slice the sighash.\\r\\n _returnData := add(_returnData, 0x04)\\r\\n }\\r\\n return abi.decode(_returnData, (string)); // All that remains is the revert string\\r\\n } \\r\\n \\r\\n // F3 - F9: OK\\r\\n // F1: External is ok here because this is the batch function, adding it to a batch makes no sense\\r\\n // F2: Calls in the batch may be payable, delegatecall operates in the same context, so each call in the batch has access to msg.value\\r\\n // C1 - C21: OK\\r\\n // C3: The length of the loop is fully under user control, so can't be exploited\\r\\n // C7: Delegatecall is only used on the same contract, so it's safe\\r\\n function batch(bytes[] calldata calls, bool revertOnFail) external payable returns(bool[] memory successes, bytes[] memory results) {\\r\\n // Interactions\\r\\n successes = new bool[](calls.length);\\r\\n results = new bytes[](calls.length);\\r\\n for (uint256 i = 0; i < calls.length; i++) {\\r\\n (bool success, bytes memory result) = address(this).delegatecall(calls[i]);\\r\\n require(success || !revertOnFail, _getRevertMsg(result));\\r\\n successes[i] = success;\\r\\n results[i] = result;\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BoringBatchable is BaseBoringBatchable {\\r\\n // F1 - F9: OK\\r\\n // F6: Parameters can be used front-run the permit and the user's permit will fail (due to nonce or other revert)\\r\\n // if part of a batch this could be used to grief once as the second call would not need the permit\\r\\n // C1 - C21: OK\\r\\n function permitToken(IERC20 token, address from, address to, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\r\\n // Interactions\\r\\n // X1 - X5\\r\\n token.permit(from, to, amount, deadline, v, r, s);\\r\\n }\\r\\n}\",\"keccak256\":\"0xe0b0316b015447ee28c6b7d96c4347b410a66e5d26e922ef3bcccc22f3b4d590\",\"license\":\"UNLICENSED\"},\"@boringcrypto/boring-solidity/contracts/BoringOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\n// Audit on 5-Jan-2021 by Keno and BoringCrypto\\r\\n\\r\\n// P1 - P3: OK\\r\\npragma solidity 0.6.12;\\r\\n\\r\\n// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol\\r\\n// Edited by BoringCrypto\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BoringOwnableData {\\r\\n // V1 - V5: OK\\r\\n address public owner;\\r\\n // V1 - V5: OK\\r\\n address public pendingOwner;\\r\\n}\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BoringOwnable is BoringOwnableData {\\r\\n // E1: OK\\r\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\r\\n\\r\\n constructor () public {\\r\\n owner = msg.sender;\\r\\n emit OwnershipTransferred(address(0), msg.sender);\\r\\n }\\r\\n\\r\\n // F1 - F9: OK\\r\\n // C1 - C21: OK\\r\\n function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner {\\r\\n if (direct) {\\r\\n // Checks\\r\\n require(newOwner != address(0) || renounce, \\\"Ownable: zero address\\\");\\r\\n\\r\\n // Effects\\r\\n emit OwnershipTransferred(owner, newOwner);\\r\\n owner = newOwner;\\r\\n pendingOwner = address(0);\\r\\n } else {\\r\\n // Effects\\r\\n pendingOwner = newOwner;\\r\\n }\\r\\n }\\r\\n\\r\\n // F1 - F9: OK\\r\\n // C1 - C21: OK\\r\\n function claimOwnership() public {\\r\\n address _pendingOwner = pendingOwner;\\r\\n \\r\\n // Checks\\r\\n require(msg.sender == _pendingOwner, \\\"Ownable: caller != pending owner\\\");\\r\\n\\r\\n // Effects\\r\\n emit OwnershipTransferred(owner, _pendingOwner);\\r\\n owner = _pendingOwner;\\r\\n pendingOwner = address(0);\\r\\n }\\r\\n\\r\\n // M1 - M5: OK\\r\\n // C1 - C21: OK\\r\\n modifier onlyOwner() {\\r\\n require(msg.sender == owner, \\\"Ownable: caller is not the owner\\\");\\r\\n _;\\r\\n }\\r\\n}\",\"keccak256\":\"0xfafb586b248c1c697227f5745397562cfe5be2f04e19fb80fc79fc94e3afaba1\",\"license\":\"MIT\"},\"@boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\npragma solidity 0.6.12;\\r\\n\\r\\ninterface IERC20 {\\r\\n function totalSupply() external view returns (uint256);\\r\\n function balanceOf(address account) external view returns (uint256);\\r\\n function allowance(address owner, address spender) external view returns (uint256);\\r\\n function approve(address spender, uint256 amount) external returns (bool);\\r\\n event Transfer(address indexed from, address indexed to, uint256 value);\\r\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\r\\n\\r\\n // EIP 2612\\r\\n function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;\\r\\n}\",\"keccak256\":\"0x8004f86e4536cca55b8eeb2621fe18e1ee57d779396ddef50bce5bf70fb59867\",\"license\":\"MIT\"},\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"../interfaces/IERC20.sol\\\";\\r\\n\\r\\nlibrary BoringERC20 {\\r\\n function safeSymbol(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeName(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeDecimals(IERC20 token) internal view returns (uint8) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));\\r\\n return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;\\r\\n }\\r\\n\\r\\n function safeTransfer(IERC20 token, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\r\\n }\\r\\n\\r\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: TransferFrom failed\\\");\\r\\n }\\r\\n}\",\"keccak256\":\"0x69f1ccf716991e5d6d64dc0e3bc3828fd1990bc18400d680b1aa1960675daaaa\",\"license\":\"UNLICENSED\"},\"@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\npragma solidity 0.6.12;\\r\\n// a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)\\r\\nlibrary BoringMath {\\r\\n function add(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {require(b == 0 || (c = a * b)/b == a, \\\"BoringMath: Mul Overflow\\\");}\\r\\n function to128(uint256 a) internal pure returns (uint128 c) {\\r\\n require(a <= uint128(-1), \\\"BoringMath: uint128 Overflow\\\");\\r\\n c = uint128(a);\\r\\n }\\r\\n function to64(uint256 a) internal pure returns (uint64 c) {\\r\\n require(a <= uint64(-1), \\\"BoringMath: uint64 Overflow\\\");\\r\\n c = uint64(a);\\r\\n }\\r\\n function to32(uint256 a) internal pure returns (uint32 c) {\\r\\n require(a <= uint32(-1), \\\"BoringMath: uint32 Overflow\\\");\\r\\n c = uint32(a);\\r\\n }\\r\\n}\\r\\n\\r\\nlibrary BoringMath128 {\\r\\n function add(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n}\\r\\n\\r\\nlibrary BoringMath64 {\\r\\n function add(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n}\\r\\n\\r\\nlibrary BoringMath32 {\\r\\n function add(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n}\",\"keccak256\":\"0x2d0e99483c5618251d4b52e8551918253bf044c63e0d09a2f1f652671f9ff762\",\"license\":\"MIT\"},\"contracts/MasterChefV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol\\\";\\nimport \\\"@boringcrypto/boring-solidity/contracts/BoringBatchable.sol\\\";\\nimport \\\"@boringcrypto/boring-solidity/contracts/BoringOwnable.sol\\\";\\nimport \\\"./libraries/SignedSafeMath.sol\\\";\\nimport \\\"./interfaces/IRewarder.sol\\\";\\nimport \\\"./interfaces/IMasterChef.sol\\\";\\n\\ninterface IMigratorChef {\\n // Take the current LP token address and return the new LP token address.\\n // Migrator should have full access to the caller's LP token.\\n function migrate(IERC20 token) external returns (IERC20);\\n}\\n\\n/// @notice The (older) MasterChef contract gives out a constant number of SUSHI tokens per block.\\n/// It is the only address with minting rights for SUSHI.\\n/// The idea for this MasterChef V2 (MCV2) contract is therefore to be the owner of a dummy token\\n/// that is deposited into the MasterChef V1 (MCV1) contract.\\n/// The allocation point for this pool on MCV1 is the total allocation point for all pools that receive double incentives.\\ncontract MasterChefV2 is BoringOwnable, BoringBatchable {\\n using BoringMath for uint256;\\n using BoringMath128 for uint128;\\n using BoringERC20 for IERC20;\\n using SignedSafeMath for int256;\\n\\n /// @notice Info of each MCV2 user.\\n /// `amount` LP token amount the user has provided.\\n /// `rewardDebt` The amount of SUSHI entitled to the user.\\n struct UserInfo {\\n uint256 amount;\\n int256 rewardDebt;\\n }\\n\\n /// @notice Info of each MCV2 pool.\\n /// `allocPoint` The amount of allocation points assigned to the pool.\\n /// Also known as the amount of SUSHI to distribute per block.\\n struct PoolInfo {\\n uint128 accSushiPerShare;\\n uint64 lastRewardBlock;\\n uint64 allocPoint;\\n }\\n\\n /// @notice Address of MCV1 contract.\\n IMasterChef public immutable MASTER_CHEF;\\n /// @notice Address of SUSHI contract.\\n IERC20 public immutable SUSHI;\\n /// @notice The index of MCV2 master pool in MCV1.\\n uint256 public immutable MASTER_PID;\\n // @notice The migrator contract. It has a lot of power. Can only be set through governance (owner).\\n IMigratorChef public migrator;\\n\\n /// @notice Info of each MCV2 pool.\\n PoolInfo[] public poolInfo;\\n /// @notice Address of the LP token for each MCV2 pool.\\n IERC20[] public lpToken;\\n /// @notice Address of each `IRewarder` contract in MCV2.\\n IRewarder[] public rewarder;\\n\\n /// @notice Info of each user that stakes LP tokens.\\n mapping (uint256 => mapping (address => UserInfo)) public userInfo;\\n /// @dev Total allocation points. Must be the sum of all allocation points in all pools.\\n uint256 public totalAllocPoint;\\n\\n uint256 private constant MASTERCHEF_SUSHI_PER_BLOCK = 1e20;\\n uint256 private constant ACC_SUSHI_PRECISION = 1e12;\\n\\n event Deposit(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event Withdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event Harvest(address indexed user, uint256 indexed pid, uint256 amount);\\n event LogPoolAddition(uint256 indexed pid, uint256 allocPoint, IERC20 indexed lpToken, IRewarder indexed rewarder);\\n event LogSetPool(uint256 indexed pid, uint256 allocPoint, IRewarder indexed rewarder, bool overwrite);\\n event LogUpdatePool(uint256 indexed pid, uint64 lastRewardBlock, uint256 lpSupply, uint256 accSushiPerShare);\\n event LogInit();\\n\\n /// @param _MASTER_CHEF The SushiSwap MCV1 contract address.\\n /// @param _sushi The SUSHI token contract address.\\n /// @param _MASTER_PID The pool ID of the dummy token on the base MCV1 contract.\\n constructor(IMasterChef _MASTER_CHEF, IERC20 _sushi, uint256 _MASTER_PID) public {\\n MASTER_CHEF = _MASTER_CHEF;\\n SUSHI = _sushi;\\n MASTER_PID = _MASTER_PID;\\n }\\n\\n /// @notice Deposits a dummy token to `MASTER_CHEF` MCV1. This is required because MCV1 holds the minting rights for SUSHI.\\n /// Any balance of transaction sender in `dummyToken` is transferred.\\n /// The allocation point for the pool on MCV1 is the total allocation point for all pools that receive double incentives.\\n /// @param dummyToken The address of the ERC-20 token to deposit into MCV1.\\n function init(IERC20 dummyToken) external {\\n uint256 balance = dummyToken.balanceOf(msg.sender);\\n require(balance != 0, \\\"MasterChefV2: Balance must exceed 0\\\");\\n dummyToken.safeTransferFrom(msg.sender, address(this), balance);\\n dummyToken.approve(address(MASTER_CHEF), balance);\\n MASTER_CHEF.deposit(MASTER_PID, balance);\\n emit LogInit();\\n }\\n\\n /// @notice Returns the number of MCV2 pools.\\n function poolLength() public view returns (uint256 pools) {\\n pools = poolInfo.length;\\n }\\n\\n /// @notice Add a new LP to the pool. Can only be called by the owner.\\n /// DO NOT add the same LP token more than once. Rewards will be messed up if you do.\\n /// @param allocPoint AP of the new pool.\\n /// @param _lpToken Address of the LP ERC-20 token.\\n /// @param _rewarder Address of the rewarder delegate.\\n function add(uint256 allocPoint, IERC20 _lpToken, IRewarder _rewarder) public onlyOwner {\\n uint256 lastRewardBlock = block.number;\\n totalAllocPoint = totalAllocPoint.add(allocPoint);\\n lpToken.push(_lpToken);\\n rewarder.push(_rewarder);\\n\\n poolInfo.push(PoolInfo({\\n allocPoint: allocPoint.to64(),\\n lastRewardBlock: lastRewardBlock.to64(),\\n accSushiPerShare: 0\\n }));\\n emit LogPoolAddition(lpToken.length.sub(1), allocPoint, _lpToken, _rewarder);\\n }\\n\\n /// @notice Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n /// @param _allocPoint New AP of the pool.\\n /// @param _rewarder Address of the rewarder delegate.\\n /// @param overwrite True if _rewarder should be `set`. Otherwise `_rewarder` is ignored.\\n function set(uint256 _pid, uint256 _allocPoint, IRewarder _rewarder, bool overwrite) public onlyOwner {\\n totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);\\n poolInfo[_pid].allocPoint = _allocPoint.to64();\\n if (overwrite) { rewarder[_pid] = _rewarder; }\\n emit LogSetPool(_pid, _allocPoint, overwrite ? _rewarder : rewarder[_pid], overwrite);\\n }\\n\\n /// @notice Set the `migrator` contract. Can only be called by the owner.\\n /// @param _migrator The contract address to set.\\n function setMigrator(IMigratorChef _migrator) public onlyOwner {\\n migrator = _migrator;\\n }\\n\\n /// @notice Migrate LP token to another LP contract through the `migrator` contract.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n function migrate(uint256 _pid) public {\\n require(address(migrator) != address(0), \\\"MasterChefV2: no migrator set\\\");\\n IERC20 _lpToken = lpToken[_pid];\\n uint256 bal = _lpToken.balanceOf(address(this));\\n _lpToken.approve(address(migrator), bal);\\n IERC20 newLpToken = migrator.migrate(_lpToken);\\n require(bal == newLpToken.balanceOf(address(this)), \\\"MasterChefV2: migrated balance must match\\\");\\n lpToken[_pid] = newLpToken;\\n }\\n\\n /// @notice View function to see pending SUSHI on frontend.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n /// @param _user Address of user.\\n /// @return pending SUSHI reward for a given user.\\n function pendingSushi(uint256 _pid, address _user) external view returns (uint256 pending) {\\n PoolInfo memory pool = poolInfo[_pid];\\n UserInfo storage user = userInfo[_pid][_user];\\n uint256 accSushiPerShare = pool.accSushiPerShare;\\n uint256 lpSupply = lpToken[_pid].balanceOf(address(this));\\n if (block.number > pool.lastRewardBlock && lpSupply != 0) {\\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\\n uint256 sushiReward = blocks.mul(sushiPerBlock()).mul(pool.allocPoint) / totalAllocPoint;\\n accSushiPerShare = accSushiPerShare.add(sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply);\\n }\\n pending = int256(user.amount.mul(accSushiPerShare) / ACC_SUSHI_PRECISION).sub(user.rewardDebt).toUInt256();\\n }\\n\\n /// @notice Update reward variables for all pools. Be careful of gas spending!\\n /// @param pids Pool IDs of all to be updated. Make sure to update all active pools.\\n function massUpdatePools(uint256[] calldata pids) external {\\n uint256 len = pids.length;\\n for (uint256 i = 0; i < len; ++i) {\\n updatePool(pids[i]);\\n }\\n }\\n\\n /// @notice Calculates and returns the `amount` of SUSHI per block.\\n function sushiPerBlock() public view returns (uint256 amount) {\\n amount = uint256(MASTERCHEF_SUSHI_PER_BLOCK)\\n .mul(MASTER_CHEF.poolInfo(MASTER_PID).allocPoint) / MASTER_CHEF.totalAllocPoint();\\n }\\n\\n /// @notice Update reward variables of the given pool.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @return pool Returns the pool that was updated.\\n function updatePool(uint256 pid) public returns (PoolInfo memory pool) {\\n pool = poolInfo[pid];\\n if (block.number > pool.lastRewardBlock) {\\n uint256 lpSupply = lpToken[pid].balanceOf(address(this));\\n if (lpSupply > 0) {\\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\\n uint256 sushiReward = blocks.mul(sushiPerBlock()).mul(pool.allocPoint) / totalAllocPoint;\\n pool.accSushiPerShare = pool.accSushiPerShare.add((sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply).to128());\\n }\\n pool.lastRewardBlock = block.number.to64();\\n poolInfo[pid] = pool;\\n emit LogUpdatePool(pid, pool.lastRewardBlock, lpSupply, pool.accSushiPerShare);\\n }\\n }\\n\\n /// @notice Deposit LP tokens to MCV2 for SUSHI allocation.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param amount LP token amount to deposit.\\n /// @param to The receiver of `amount` deposit benefit.\\n function deposit(uint256 pid, uint256 amount, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][to];\\n\\n // Effects\\n user.amount = user.amount.add(amount);\\n user.rewardDebt = user.rewardDebt.add(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\\n\\n // Interactions\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, to, to, 0, user.amount);\\n }\\n\\n lpToken[pid].safeTransferFrom(msg.sender, address(this), amount);\\n\\n emit Deposit(msg.sender, pid, amount, to);\\n }\\n\\n /// @notice Withdraw LP tokens from MCV2.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param amount LP token amount to withdraw.\\n /// @param to Receiver of the LP tokens.\\n function withdraw(uint256 pid, uint256 amount, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][msg.sender];\\n\\n // Effects\\n user.rewardDebt = user.rewardDebt.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\\n user.amount = user.amount.sub(amount);\\n\\n // Interactions\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, msg.sender, to, 0, user.amount);\\n }\\n \\n lpToken[pid].safeTransfer(to, amount);\\n\\n emit Withdraw(msg.sender, pid, amount, to);\\n }\\n\\n /// @notice Harvest proceeds for transaction sender to `to`.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param to Receiver of SUSHI rewards.\\n function harvest(uint256 pid, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][msg.sender];\\n int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION);\\n uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256();\\n\\n // Effects\\n user.rewardDebt = accumulatedSushi;\\n\\n // Interactions\\n if (_pendingSushi != 0) {\\n SUSHI.safeTransfer(to, _pendingSushi);\\n }\\n \\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward( pid, msg.sender, to, _pendingSushi, user.amount);\\n }\\n\\n emit Harvest(msg.sender, pid, _pendingSushi);\\n }\\n \\n /// @notice Withdraw LP tokens from MCV2 and harvest proceeds for transaction sender to `to`.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param amount LP token amount to withdraw.\\n /// @param to Receiver of the LP tokens and SUSHI rewards.\\n function withdrawAndHarvest(uint256 pid, uint256 amount, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][msg.sender];\\n int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION);\\n uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256();\\n\\n // Effects\\n user.rewardDebt = accumulatedSushi.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\\n user.amount = user.amount.sub(amount);\\n \\n // Interactions\\n SUSHI.safeTransfer(to, _pendingSushi);\\n\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, msg.sender, to, _pendingSushi, user.amount);\\n }\\n\\n lpToken[pid].safeTransfer(to, amount);\\n\\n emit Withdraw(msg.sender, pid, amount, to);\\n emit Harvest(msg.sender, pid, _pendingSushi);\\n }\\n\\n /// @notice Harvests SUSHI from `MASTER_CHEF` MCV1 and pool `MASTER_PID` to this MCV2 contract.\\n function harvestFromMasterChef() public {\\n MASTER_CHEF.deposit(MASTER_PID, 0);\\n }\\n\\n /// @notice Withdraw without caring about rewards. EMERGENCY ONLY.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param to Receiver of the LP tokens.\\n function emergencyWithdraw(uint256 pid, address to) public {\\n UserInfo storage user = userInfo[pid][msg.sender];\\n uint256 amount = user.amount;\\n user.amount = 0;\\n user.rewardDebt = 0;\\n\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, msg.sender, to, 0, 0);\\n }\\n\\n // Note: transfer can fail or succeed if `amount` is zero.\\n lpToken[pid].safeTransfer(to, amount);\\n emit EmergencyWithdraw(msg.sender, pid, amount, to);\\n }\\n}\\n\",\"keccak256\":\"0x2048c5e7b174e2f8f931045df32b1d56f09f488cfac3c87632b9730e0aba9bc3\",\"license\":\"MIT\"},\"contracts/interfaces/IMasterChef.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\\\";\\n\\ninterface IMasterChef {\\n using BoringERC20 for IERC20;\\n struct UserInfo {\\n uint256 amount; // How many LP tokens the user has provided.\\n uint256 rewardDebt; // Reward debt. See explanation below.\\n }\\n\\n struct PoolInfo {\\n IERC20 lpToken; // Address of LP token contract.\\n uint256 allocPoint; // How many allocation points assigned to this pool. SUSHI to distribute per block.\\n uint256 lastRewardBlock; // Last block number that SUSHI distribution occurs.\\n uint256 accSushiPerShare; // Accumulated SUSHI per share, times 1e12. See below.\\n }\\n\\n function poolInfo(uint256 pid) external view returns (IMasterChef.PoolInfo memory);\\n function totalAllocPoint() external view returns (uint256);\\n function deposit(uint256 _pid, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xbbb2138d7b8be86b5d0bed347ab7f6d2d3e66043393abc882ad37a75fdd860d3\",\"license\":\"MIT\"},\"contracts/interfaces/IRewarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\\\";\\ninterface IRewarder {\\n using BoringERC20 for IERC20;\\n function onSushiReward(uint256 pid, address user, address recipient, uint256 sushiAmount, uint256 newLpAmount) external;\\n function pendingTokens(uint256 pid, address user, uint256 sushiAmount) external returns (IERC20[] memory, uint256[] memory);\\n}\\n\",\"keccak256\":\"0xf9fa549b5fe5d156c908a3ca612b1acd219666dbadc195d9bea4dd34d3cec94a\",\"license\":\"MIT\"},\"contracts/libraries/SignedSafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\n\\nlibrary SignedSafeMath {\\n int256 constant private _INT256_MIN = -2**255;\\n\\n /**\\n * @dev Returns the multiplication of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(int256 a, int256 b) internal pure returns (int256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) {\\n return 0;\\n }\\n\\n require(!(a == -1 && b == _INT256_MIN), \\\"SignedSafeMath: multiplication overflow\\\");\\n\\n int256 c = a * b;\\n require(c / a == b, \\\"SignedSafeMath: multiplication overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two signed integers. Reverts on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(int256 a, int256 b) internal pure returns (int256) {\\n require(b != 0, \\\"SignedSafeMath: division by zero\\\");\\n require(!(b == -1 && a == _INT256_MIN), \\\"SignedSafeMath: division overflow\\\");\\n\\n int256 c = a / b;\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(int256 a, int256 b) internal pure returns (int256) {\\n int256 c = a - b;\\n require((b >= 0 && c <= a) || (b < 0 && c > a), \\\"SignedSafeMath: subtraction overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the addition of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(int256 a, int256 b) internal pure returns (int256) {\\n int256 c = a + b;\\n require((b >= 0 && c >= a) || (b < 0 && c < a), \\\"SignedSafeMath: addition overflow\\\");\\n\\n return c;\\n }\\n\\n function toUInt256(int256 a) internal pure returns (uint256) {\\n require(a >= 0, \\\"Integer < 0\\\");\\n return uint256(a);\\n }\\n}\",\"keccak256\":\"0x4991beb21b224dfcdc3d251e0a60fdc304d4f6b699b2c35d08f3974e5b84c86a\",\"license\":\"MIT\"}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "MasterChefV2": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IMasterChef", + "name": "_MASTER_CHEF", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "_sushi", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_MASTER_PID", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "EmergencyWithdraw", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Harvest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "LogInit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "allocPoint", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "contract IERC20", + "name": "lpToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IRewarder", + "name": "rewarder", + "type": "address" + } + ], + "name": "LogPoolAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "allocPoint", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "contract IRewarder", + "name": "rewarder", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "overwrite", + "type": "bool" + } + ], + "name": "LogSetPool", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "lastRewardBlock", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpSupply", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accSushiPerShare", + "type": "uint256" + } + ], + "name": "LogUpdatePool", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "MASTER_CHEF", + "outputs": [ + { + "internalType": "contract IMasterChef", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MASTER_PID", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SUSHI", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "allocPoint", + "type": "uint256" + }, + { + "internalType": "contract IERC20", + "name": "_lpToken", + "type": "address" + }, + { + "internalType": "contract IRewarder", + "name": "_rewarder", + "type": "address" + } + ], + "name": "add", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "calls", + "type": "bytes[]" + }, + { + "internalType": "bool", + "name": "revertOnFail", + "type": "bool" + } + ], + "name": "batch", + "outputs": [ + { + "internalType": "bool[]", + "name": "successes", + "type": "bool[]" + }, + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "claimOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "emergencyWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "harvest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "harvestFromMasterChef", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "dummyToken", + "type": "address" + } + ], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "lpToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "pids", + "type": "uint256[]" + } + ], + "name": "massUpdatePools", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_pid", + "type": "uint256" + } + ], + "name": "migrate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "migrator", + "outputs": [ + { + "internalType": "contract IMigratorChef", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_pid", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_user", + "type": "address" + } + ], + "name": "pendingSushi", + "outputs": [ + { + "internalType": "uint256", + "name": "pending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permitToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "poolInfo", + "outputs": [ + { + "internalType": "uint128", + "name": "accSushiPerShare", + "type": "uint128" + }, + { + "internalType": "uint64", + "name": "lastRewardBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "allocPoint", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poolLength", + "outputs": [ + { + "internalType": "uint256", + "name": "pools", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "rewarder", + "outputs": [ + { + "internalType": "contract IRewarder", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_pid", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_allocPoint", + "type": "uint256" + }, + { + "internalType": "contract IRewarder", + "name": "_rewarder", + "type": "address" + }, + { + "internalType": "bool", + "name": "overwrite", + "type": "bool" + } + ], + "name": "set", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IMigratorChef", + "name": "_migrator", + "type": "address" + } + ], + "name": "setMigrator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "sushiPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAllocPoint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + }, + { + "internalType": "bool", + "name": "direct", + "type": "bool" + }, + { + "internalType": "bool", + "name": "renounce", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + } + ], + "name": "updatePool", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "accSushiPerShare", + "type": "uint128" + }, + { + "internalType": "uint64", + "name": "lastRewardBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "allocPoint", + "type": "uint64" + } + ], + "internalType": "struct MasterChefV2.PoolInfo", + "name": "pool", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "userInfo", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "rewardDebt", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "withdrawAndHarvest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "add(uint256,address,address)": { + "params": { + "_lpToken": "Address of the LP ERC-20 token.", + "_rewarder": "Address of the rewarder delegate.", + "allocPoint": "AP of the new pool." + } + }, + "constructor": { + "params": { + "_MASTER_CHEF": "The SushiSwap MCV1 contract address.", + "_MASTER_PID": "The pool ID of the dummy token on the base MCV1 contract.", + "_sushi": "The SUSHI token contract address." + } + }, + "deposit(uint256,uint256,address)": { + "params": { + "amount": "LP token amount to deposit.", + "pid": "The index of the pool. See `poolInfo`.", + "to": "The receiver of `amount` deposit benefit." + } + }, + "emergencyWithdraw(uint256,address)": { + "params": { + "pid": "The index of the pool. See `poolInfo`.", + "to": "Receiver of the LP tokens." + } + }, + "harvest(uint256,address)": { + "params": { + "pid": "The index of the pool. See `poolInfo`.", + "to": "Receiver of SUSHI rewards." + } + }, + "init(address)": { + "params": { + "dummyToken": "The address of the ERC-20 token to deposit into MCV1." + } + }, + "massUpdatePools(uint256[])": { + "params": { + "pids": "Pool IDs of all to be updated. Make sure to update all active pools." + } + }, + "migrate(uint256)": { + "params": { + "_pid": "The index of the pool. See `poolInfo`." + } + }, + "pendingSushi(uint256,address)": { + "params": { + "_pid": "The index of the pool. See `poolInfo`.", + "_user": "Address of user." + }, + "returns": { + "pending": "SUSHI reward for a given user." + } + }, + "set(uint256,uint256,address,bool)": { + "params": { + "_allocPoint": "New AP of the pool.", + "_pid": "The index of the pool. See `poolInfo`.", + "_rewarder": "Address of the rewarder delegate.", + "overwrite": "True if _rewarder should be `set`. Otherwise `_rewarder` is ignored." + } + }, + "setMigrator(address)": { + "params": { + "_migrator": "The contract address to set." + } + }, + "updatePool(uint256)": { + "params": { + "pid": "The index of the pool. See `poolInfo`." + }, + "returns": { + "pool": "Returns the pool that was updated." + } + }, + "withdraw(uint256,uint256,address)": { + "params": { + "amount": "LP token amount to withdraw.", + "pid": "The index of the pool. See `poolInfo`.", + "to": "Receiver of the LP tokens." + } + }, + "withdrawAndHarvest(uint256,uint256,address)": { + "params": { + "amount": "LP token amount to withdraw.", + "pid": "The index of the pool. See `poolInfo`.", + "to": "Receiver of the LP tokens and SUSHI rewards." + } + } + }, + "stateVariables": { + "totalAllocPoint": { + "details": "Total allocation points. Must be the sum of all allocation points in all pools." + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60e06040523480156200001157600080fd5b50604051620031b7380380620031b7833981016040819052620000349162000097565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606093841b81166080529190921b1660a05260c052620000f7565b600080600060608486031215620000ac578283fd5b8351620000b981620000de565b6020850151909350620000cc81620000de565b80925050604084015190509250925092565b6001600160a01b0381168114620000f457600080fd5b50565b60805160601c60a05160601c60c05161305b6200015c60003980610d905280611303528061160e5280611cdd5250806108f55280611a075280611e51525080610ccf5280610d6352806112d65280611c065280611cb05280612157525061305b6000f3fe6080604052600436106101d85760003560e01c806361621aaa11610102578063ab560e1011610095578063d1abb90711610064578063d1abb90714610529578063d2423b5114610549578063e30c39781461056a578063edd8b1701461057f576101d8565b8063ab560e10146104bf578063ab7de098146104d4578063b0bcf42a146104f4578063c346253d14610509576101d8565b806388bba42f116100d157806388bba42f1461043c5780638da5cb5b1461045c5780638dbdbe6d1461047157806393f1a40b14610491576101d8565b806361621aaa146103c557806378ed5d1f146103da5780637c516e94146104075780637cd07e4714610427576101d8565b806319ab453c1161017a5780634e71e0c8116101495780634e71e0c81461034e5780634f70b15a1461036357806351eb05a61461037857806357a5b58c146103a5576101d8565b806319ab453c146102ce57806323cf3118146102ee5780632f940c701461030e578063454b06081461032e576101d8565b80631526fe27116101b65780631526fe271461024a57806317caf6f11461027957806318fccc761461028e578063195426ec146102ae576101d8565b8063078dfbe7146101dd578063081e3eda146101ff5780630ad58d2f1461022a575b600080fd5b3480156101e957600080fd5b506101fd6101f83660046125dd565b610594565b005b34801561020b57600080fd5b50610214610683565b6040516102219190612ee9565b60405180910390f35b34801561023657600080fd5b506101fd6102453660046128fc565b610689565b34801561025657600080fd5b5061026a610265366004612867565b610819565b60405161022193929190612ebf565b34801561028557600080fd5b5061021461085b565b34801561029a57600080fd5b506101fd6102a9366004612897565b610861565b3480156102ba57600080fd5b506102146102c9366004612897565b6109fb565b3480156102da57600080fd5b506101fd6102e93660046126cb565b610bf8565b3480156102fa57600080fd5b506101fd6103093660046126cb565b610e19565b34801561031a57600080fd5b506101fd610329366004612897565b610e65565b34801561033a57600080fd5b506101fd610349366004612867565b610f86565b34801561035a57600080fd5b506101fd611232565b34801561036f57600080fd5b506101fd6112bf565b34801561038457600080fd5b50610398610393366004612867565b611362565b6040516102219190612e86565b3480156103b157600080fd5b506101fd6103c0366004612670565b6115dc565b3480156103d157600080fd5b5061021461160c565b3480156103e657600080fd5b506103fa6103f5366004612867565b611630565b60405161022191906129ca565b34801561041357600080fd5b506101fd610422366004612703565b611657565b34801561043357600080fd5b506103fa6116cb565b34801561044857600080fd5b506101fd610457366004612929565b6116da565b34801561046857600080fd5b506103fa611847565b34801561047d57600080fd5b506101fd61048c3660046128fc565b611856565b34801561049d57600080fd5b506104b16104ac366004612897565b6119e1565b604051610221929190612f31565b3480156104cb57600080fd5b506103fa611a05565b3480156104e057600080fd5b506101fd6104ef3660046128c6565b611a29565b34801561050057600080fd5b50610214611c02565b34801561051557600080fd5b506103fa610524366004612867565b611d76565b34801561053557600080fd5b506101fd6105443660046128fc565b611d83565b61055c610557366004612627565b611fb6565b604051610221929190612a5c565b34801561057657600080fd5b506103fa612146565b34801561058b57600080fd5b506103fa612155565b6000546001600160a01b031633146105c75760405162461bcd60e51b81526004016105be90612cfe565b60405180910390fd5b8115610662576001600160a01b0383161515806105e15750805b6105fd5760405162461bcd60e51b81526004016105be90612c18565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b03199182161790915560018054909116905561067e565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b610691612575565b61069a84611362565b600085815260066020908152604080832033845290915290208151919250906106ec9064e8d4a51000906106d89087906001600160801b0316612179565b816106df57fe5b60018401549190046121b6565b600182015580546106fd9085612203565b815560058054600091908790811061071157fe5b6000918252602090912001546001600160a01b0316905080156107975781546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291610764918a9133918a9160009190600401612ef2565b600060405180830381600087803b15801561077e57600080fd5b505af1158015610792573d6000803e3d6000fd5b505050505b6107c58486600489815481106107a957fe5b6000918252602090912001546001600160a01b03169190612226565b836001600160a01b031686336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516108099190612ee9565b60405180910390a4505050505050565b6003818154811061082657fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60075481565b610869612575565b61087283611362565b6000848152600660209081526040808320338452909152812082518154939450909264e8d4a51000916108ae91906001600160801b0316612179565b816108b557fe5b04905060006108d96108d48460010154846121b690919063ffffffff16565b612314565b600184018390559050801561091c5761091c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b60006005878154811061092b57fe5b6000918252602090912001546001600160a01b0316905080156109b05783546040516345fb1ba160e11b81526001600160a01b03831691638bf637429161097d918b9133918c91899190600401612ef2565b600060405180830381600087803b15801561099757600080fd5b505af11580156109ab573d6000803e3d6000fd5b505050505b86336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954846040516109ea9190612ee9565b60405180910390a350505050505050565b6000610a05612575565b60038481548110610a1257fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600683528385206001600160a01b0389168652909252918320825160048054949650919492169288908110610a9057fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610ac99030906004016129ca565b60206040518083038186803b158015610ae157600080fd5b505afa158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b19919061287f565b905083602001516001600160401b031643118015610b3657508015155b15610bbf576000610b5d85602001516001600160401b03164361220390919063ffffffff16565b90506000600754610b8d87604001516001600160401b0316610b87610b80611c02565b8690612179565b90612179565b81610b9457fe5b049050610bba83610baa8364e8d4a51000612179565b81610bb157fe5b8691900461233a565b935050505b60018301548354610bed916108d49164e8d4a5100090610bdf9087612179565b81610be657fe5b04906121b6565b979650505050505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610c279033906004016129ca565b60206040518083038186803b158015610c3f57600080fd5b505afa158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c77919061287f565b905080610c965760405162461bcd60e51b81526004016105be90612b5d565b610cab6001600160a01b03831633308461235d565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610cf9907f0000000000000000000000000000000000000000000000000000000000000000908590600401612a43565b602060405180830381600087803b158015610d1357600080fd5b505af1158015610d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b91906126af565b50604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb15890610dba907f0000000000000000000000000000000000000000000000000000000000000000908590600401612f31565b600060405180830381600087803b158015610dd457600080fd5b505af1158015610de8573d6000803e3d6000fd5b50506040517f98a9bd3b7a617581fc53b1e2992534e0e0cb5091c9d44aa1a7fc978f706caa83925060009150a15050565b6000546001600160a01b03163314610e435760405162461bcd60e51b81526004016105be90612cfe565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526006602090815260408083203384529091528120805482825560018201839055600580549293919286908110610e9c57fe5b6000918252602090912001546001600160a01b031690508015610f21576040516345fb1ba160e11b81526001600160a01b03821690638bf6374290610eee908890339089906000908190600401612ef2565b600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050505b610f338483600488815481106107a957fe5b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b85604051610f779190612ee9565b60405180910390a45050505050565b6002546001600160a01b0316610fae5760405162461bcd60e51b81526004016105be90612d9f565b600060048281548110610fbd57fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190610ff89030906004016129ca565b60206040518083038186803b15801561101057600080fd5b505afa158015611024573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611048919061287f565b60025460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b39261107d9216908590600401612a43565b602060405180830381600087803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906126af565b5060025460405163ce5494bb60e01b81526000916001600160a01b03169063ce5494bb906111019086906004016129ca565b602060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115391906126e7565b6040516370a0823160e01b81529091506001600160a01b038216906370a08231906111829030906004016129ca565b60206040518083038186803b15801561119a57600080fd5b505afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d2919061287f565b82146111f05760405162461bcd60e51b81526004016105be90612c47565b80600485815481106111fe57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050565b6001546001600160a01b031633811461125d5760405162461bcd60e51b81526004016105be90612d33565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb1589061132e907f000000000000000000000000000000000000000000000000000000000000000090600090600401612f31565b600060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b50505050565b61136a612575565b6003828154811061137757fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b909104169082015291504311156115d7576000600483815481106113d957fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906114129030906004016129ca565b60206040518083038186803b15801561142a57600080fd5b505afa15801561143e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611462919061287f565b905080156114fb57600061148c83602001516001600160401b03164361220390919063ffffffff16565b905060006007546114af85604001516001600160401b0316610b87610b80611c02565b816114b657fe5b0490506114ed6114dc846114cf8464e8d4a51000612179565b816114d657fe5b0461244e565b85516001600160801b031690612477565b6001600160801b0316845250505b611504436124a6565b6001600160401b03166020830152600380548391908590811061152357fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad353926115cd9290918691612f3f565b60405180910390a2505b919050565b8060005b8181101561135c576116038484838181106115f757fe5b90506020020135611362565b506001016115e0565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004818154811061163d57fe5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf9061168f908a908a908a908a908a908a908a90600401612a02565b600060405180830381600087803b1580156116a957600080fd5b505af11580156116bd573d6000803e3d6000fd5b505050505050505050505050565b6002546001600160a01b031681565b6000546001600160a01b031633146117045760405162461bcd60e51b81526004016105be90612cfe565b6117438361173d6003878154811061171857fe5b60009182526020909120015460075490600160c01b90046001600160401b0316612203565b9061233a565b60075561174f836124a6565b6003858154811061175c57fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555080156117d05781600585815481106117a157fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b806117fc57600584815481106117e257fe5b6000918252602090912001546001600160a01b03166117fe565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e18658584604051611839929190612f21565b60405180910390a350505050565b6000546001600160a01b031681565b61185e612575565b61186784611362565b60008581526006602090815260408083206001600160a01b03871684529091529020805491925090611899908561233a565b815581516118d09064e8d4a51000906118bc9087906001600160801b0316612179565b816118c357fe5b60018401549190046124cf565b81600101819055506000600586815481106118e757fe5b6000918252602090912001546001600160a01b03169050801561196d5781546040516345fb1ba160e11b81526001600160a01b03831691638bf637429161193a918a918991829160009190600401612ef2565b600060405180830381600087803b15801561195457600080fd5b505af1158015611968573d6000803e3d6000fd5b505050505b61199d33308760048a8154811061198057fe5b6000918252602090912001546001600160a01b031692919061235d565b836001600160a01b031686336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47886040516108099190612ee9565b60066020908152600092835260408084209091529082529020805460019091015482565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314611a535760405162461bcd60e51b81526004016105be90612cfe565b6007544390611a62908561233a565b6007556004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b038087166001600160a01b03199283161790925560058054938401815560009081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0909301805492861692909116919091179055604080516060810190915290815260039060208101611b0f846124a6565b6001600160401b03168152602001611b26876124a6565b6001600160401b039081169091528254600181810185556000948552602094859020845192018054958501516040909501518416600160c01b026001600160c01b0395909416600160801b0267ffffffffffffffff60801b196001600160801b039094166001600160801b0319909716969096179290921694909417929092161790556004546001600160a01b038085169290861691611bc591612203565b7f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e587604051611bf49190612ee9565b60405180910390a450505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5d57600080fd5b505afa158015611c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c95919061287f565b604051631526fe2760e01b8152611d69906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631526fe2790611d05907f000000000000000000000000000000000000000000000000000000000000000090600401612ee9565b60806040518083038186803b158015611d1d57600080fd5b505afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d559190612815565b6020015168056bc75e2d6310000090612179565b81611d7057fe5b04905090565b6005818154811061163d57fe5b611d8b612575565b611d9484611362565b6000858152600660209081526040808320338452909152812082518154939450909264e8d4a5100091611dd091906001600160801b0316612179565b81611dd757fe5b0490506000611df66108d48460010154846121b690919063ffffffff16565b9050611e3164e8d4a51000611e2186600001516001600160801b03168961217990919063ffffffff16565b81611e2857fe5b849190046121b6565b60018401558254611e429087612203565b8355611e786001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b600060058881548110611e8757fe5b6000918252602090912001546001600160a01b031690508015611f0c5783546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291611ed9918c9133918c91899190600401612ef2565b600060405180830381600087803b158015611ef357600080fd5b505af1158015611f07573d6000803e3d6000fd5b505050505b611f1e868860048b815481106107a957fe5b856001600160a01b031688336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328a604051611f629190612ee9565b60405180910390a487336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051611fa49190612ee9565b60405180910390a35050505050505050565b606080836001600160401b0381118015611fcf57600080fd5b50604051908082528060200260200182016040528015611ff9578160200160208202803683370190505b509150836001600160401b038111801561201257600080fd5b5060405190808252806020026020018201604052801561204657816020015b60608152602001906001900390816120315790505b50905060005b8481101561213d57600060603088888581811061206557fe5b90506020028101906120779190612f69565b60405161208592919061299e565b600060405180830381855af49150503d80600081146120c0576040519150601f19603f3d011682016040523d82523d6000602084013e6120c5565b606091505b509150915081806120d4575085155b6120dd82612515565b906120fb5760405162461bcd60e51b81526004016105be9190612af6565b508185848151811061210957fe5b6020026020010190151590811515815250508084848151811061212857fe5b6020908102919091010152505060010161204c565b50935093915050565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008115806121945750508082028282828161219157fe5b04145b6121b05760405162461bcd60e51b81526004016105be90612e4f565b92915050565b60008183038183128015906121cb5750838113155b806121e057506000831280156121e057508381135b6121fc5760405162461bcd60e51b81526004016105be90612dd6565b9392505050565b808203828111156121b05760405162461bcd60e51b81526004016105be90612b09565b60006060846001600160a01b031663a9059cbb858560405160240161224c929190612a43565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161228591906129ae565b6000604051808303816000865af19150503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b50915091508180156122f15750805115806122f15750808060200190518101906122f191906126af565b61230d5760405162461bcd60e51b81526004016105be90612ba0565b5050505050565b6000808212156123365760405162461bcd60e51b81526004016105be90612b38565b5090565b818101818110156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006060856001600160a01b03166323b872dd868686604051602401612385939291906129de565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516123be91906129ae565b6000604051808303816000865af19150503d80600081146123fb576040519150601f19603f3d011682016040523d82523d6000602084013e612400565b606091505b509150915081801561242a57508051158061242a57508080602001905181019061242a91906126af565b6124465760405162461bcd60e51b81526004016105be90612e1a565b505050505050565b60006001600160801b038211156123365760405162461bcd60e51b81526004016105be90612c90565b8181016001600160801b0380831690821610156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006001600160401b038211156123365760405162461bcd60e51b81526004016105be90612d68565b60008282018183128015906124e45750838112155b806124f957506000831280156124f957508381125b6121fc5760405162461bcd60e51b81526004016105be90612bd7565b606060448251101561255b575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526115d7565b600482019150818060200190518101906121b0919061278a565b604080516060810182526000808252602082018190529181019190915290565b60008083601f8401126125a6578182fd5b5081356001600160401b038111156125bc578182fd5b60208301915083602080830285010111156125d657600080fd5b9250929050565b6000806000606084860312156125f1578283fd5b83356125fc81612fff565b9250602084013561260c81613017565b9150604084013561261c81613017565b809150509250925092565b60008060006040848603121561263b578283fd5b83356001600160401b03811115612650578384fd5b61265c86828701612595565b909450925050602084013561261c81613017565b60008060208385031215612682578182fd5b82356001600160401b03811115612697578283fd5b6126a385828601612595565b90969095509350505050565b6000602082840312156126c0578081fd5b81516121fc81613017565b6000602082840312156126dc578081fd5b81356121fc81612fff565b6000602082840312156126f8578081fd5b81516121fc81612fff565b600080600080600080600080610100898b03121561271f578384fd5b883561272a81612fff565b9750602089013561273a81612fff565b9650604089013561274a81612fff565b9550606089013594506080890135935060a089013560ff8116811461276d578384fd5b979a969950949793969295929450505060c08201359160e0013590565b60006020828403121561279b578081fd5b81516001600160401b03808211156127b1578283fd5b818401915084601f8301126127c4578283fd5b8151818111156127d2578384fd5b6127e5601f8201601f1916602001612fad565b91508082528560208285010111156127fb578384fd5b61280c816020840160208601612fd3565b50949350505050565b600060808284031215612826578081fd5b6128306080612fad565b825161283b81612fff565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215612878578081fd5b5035919050565b600060208284031215612890578081fd5b5051919050565b600080604083850312156128a9578182fd5b8235915060208301356128bb81612fff565b809150509250929050565b6000806000606084860312156128da578081fd5b8335925060208401356128ec81612fff565b9150604084013561261c81612fff565b600080600060608486031215612910578081fd5b8335925060208401359150604084013561261c81612fff565b6000806000806080858703121561293e578182fd5b8435935060208501359250604085013561295781612fff565b9150606085013561296781613017565b939692955090935050565b6000815180845261298a816020860160208601612fd3565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600082516129c0818460208701612fd3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015612a97578151151584529284019290840190600101612a79565b50505083810382850152808551612aae8184612ee9565b91508192508381028201848801865b83811015612ae7578583038552612ad5838351612972565b94870194925090860190600101612abd565b50909998505050505050505050565b6000602082526121fc6020830184612972565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b60208082526023908201527f4d61737465724368656656323a2042616c616e6365206d75737420657863656560408201526206420360ec1b606082015260800190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526029908201527f4d61737465724368656656323a206d696772617465642062616c616e6365206d6040820152680eae6e840dac2e8c6d60bb1b606082015260800190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b6020808252601d908201527f4d61737465724368656656323a206e6f206d69677261746f7220736574000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612f7f578283fd5b8301803591506001600160401b03821115612f98578283fd5b6020019150368190038213156125d657600080fd5b6040518181016001600160401b0381118282101715612fcb57600080fd5b604052919050565b60005b83811015612fee578181015183820152602001612fd6565b8381111561135c5750506000910152565b6001600160a01b038116811461301457600080fd5b50565b801515811461301457600080fdfea2646970667358221220814e5dfdee606b9ff8357a8c99c275bc5bee65fd89e04f2e557682da8ccc9f4264736f6c634300060c0033", + "opcodes": "PUSH1 0xE0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x31B7 CODESIZE SUB DUP1 PUSH3 0x31B7 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x97 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP4 DUP5 SHL DUP2 AND PUSH1 0x80 MSTORE SWAP2 SWAP1 SWAP3 SHL AND PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH3 0xF7 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH3 0xAC JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD PUSH3 0xB9 DUP2 PUSH3 0xDE JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP4 POP PUSH3 0xCC DUP2 PUSH3 0xDE JUMP JUMPDEST DUP1 SWAP3 POP POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH1 0xC0 MLOAD PUSH2 0x305B PUSH3 0x15C PUSH1 0x0 CODECOPY DUP1 PUSH2 0xD90 MSTORE DUP1 PUSH2 0x1303 MSTORE DUP1 PUSH2 0x160E MSTORE DUP1 PUSH2 0x1CDD MSTORE POP DUP1 PUSH2 0x8F5 MSTORE DUP1 PUSH2 0x1A07 MSTORE DUP1 PUSH2 0x1E51 MSTORE POP DUP1 PUSH2 0xCCF MSTORE DUP1 PUSH2 0xD63 MSTORE DUP1 PUSH2 0x12D6 MSTORE DUP1 PUSH2 0x1C06 MSTORE DUP1 PUSH2 0x1CB0 MSTORE DUP1 PUSH2 0x2157 MSTORE POP PUSH2 0x305B PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1D8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x61621AAA GT PUSH2 0x102 JUMPI DUP1 PUSH4 0xAB560E10 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xD1ABB907 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xD1ABB907 EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xD2423B51 EQ PUSH2 0x549 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x56A JUMPI DUP1 PUSH4 0xEDD8B170 EQ PUSH2 0x57F JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0xAB560E10 EQ PUSH2 0x4BF JUMPI DUP1 PUSH4 0xAB7DE098 EQ PUSH2 0x4D4 JUMPI DUP1 PUSH4 0xB0BCF42A EQ PUSH2 0x4F4 JUMPI DUP1 PUSH4 0xC346253D EQ PUSH2 0x509 JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x88BBA42F GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x88BBA42F EQ PUSH2 0x43C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x8DBDBE6D EQ PUSH2 0x471 JUMPI DUP1 PUSH4 0x93F1A40B EQ PUSH2 0x491 JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x61621AAA EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78ED5D1F EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7C516E94 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0x7CD07E47 EQ PUSH2 0x427 JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x19AB453C GT PUSH2 0x17A JUMPI DUP1 PUSH4 0x4E71E0C8 GT PUSH2 0x149 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x4F70B15A EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x51EB05A6 EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0x57A5B58C EQ PUSH2 0x3A5 JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x19AB453C EQ PUSH2 0x2CE JUMPI DUP1 PUSH4 0x23CF3118 EQ PUSH2 0x2EE JUMPI DUP1 PUSH4 0x2F940C70 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x454B0608 EQ PUSH2 0x32E JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x1526FE27 GT PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x1526FE27 EQ PUSH2 0x24A JUMPI DUP1 PUSH4 0x17CAF6F1 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x18FCCC76 EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0x195426EC EQ PUSH2 0x2AE JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x78DFBE7 EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0x81E3EDA EQ PUSH2 0x1FF JUMPI DUP1 PUSH4 0xAD58D2F EQ PUSH2 0x22A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x1F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x25DD JUMP JUMPDEST PUSH2 0x594 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x683 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x245 CALLDATASIZE PUSH1 0x4 PUSH2 0x28FC JUMP JUMPDEST PUSH2 0x689 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26A PUSH2 0x265 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0x819 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2EBF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x85B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x2A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2897 JUMP JUMPDEST PUSH2 0x861 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x2C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2897 JUMP JUMPDEST PUSH2 0x9FB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x2E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x26CB JUMP JUMPDEST PUSH2 0xBF8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x309 CALLDATASIZE PUSH1 0x4 PUSH2 0x26CB JUMP JUMPDEST PUSH2 0xE19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x329 CALLDATASIZE PUSH1 0x4 PUSH2 0x2897 JUMP JUMPDEST PUSH2 0xE65 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0xF86 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x1232 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x12BF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x398 PUSH2 0x393 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP2 SWAP1 PUSH2 0x2E86 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2670 JUMP JUMPDEST PUSH2 0x15DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x160C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x3F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP2 SWAP1 PUSH2 0x29CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x422 CALLDATASIZE PUSH1 0x4 PUSH2 0x2703 JUMP JUMPDEST PUSH2 0x1657 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x16CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x448 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x457 CALLDATASIZE PUSH1 0x4 PUSH2 0x2929 JUMP JUMPDEST PUSH2 0x16DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x468 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x1847 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x48C CALLDATASIZE PUSH1 0x4 PUSH2 0x28FC JUMP JUMPDEST PUSH2 0x1856 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B1 PUSH2 0x4AC CALLDATASIZE PUSH1 0x4 PUSH2 0x2897 JUMP JUMPDEST PUSH2 0x19E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP3 SWAP2 SWAP1 PUSH2 0x2F31 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x1A05 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x4EF CALLDATASIZE PUSH1 0x4 PUSH2 0x28C6 JUMP JUMPDEST PUSH2 0x1A29 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x500 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x1C02 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x515 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0x1D76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x535 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x544 CALLDATASIZE PUSH1 0x4 PUSH2 0x28FC JUMP JUMPDEST PUSH2 0x1D83 JUMP JUMPDEST PUSH2 0x55C PUSH2 0x557 CALLDATASIZE PUSH1 0x4 PUSH2 0x2627 JUMP JUMPDEST PUSH2 0x1FB6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP3 SWAP2 SWAP1 PUSH2 0x2A5C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x2146 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x662 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO DUP1 PUSH2 0x5E1 JUMPI POP DUP1 JUMPDEST PUSH2 0x5FD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2C18 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x691 PUSH2 0x2575 JUMP JUMPDEST PUSH2 0x69A DUP5 PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP2 MLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x6EC SWAP1 PUSH5 0xE8D4A51000 SWAP1 PUSH2 0x6D8 SWAP1 DUP8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x6DF JUMPI INVALID JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD SWAP2 SWAP1 DIV PUSH2 0x21B6 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SSTORE DUP1 SLOAD PUSH2 0x6FD SWAP1 DUP6 PUSH2 0x2203 JUMP JUMPDEST DUP2 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x0 SWAP2 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x711 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0x797 JUMPI DUP2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x8BF63742 SWAP2 PUSH2 0x764 SWAP2 DUP11 SWAP2 CALLER SWAP2 DUP11 SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x792 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x7C5 DUP5 DUP7 PUSH1 0x4 DUP10 DUP2 SLOAD DUP2 LT PUSH2 0x7A9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x2226 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8166BF25F8A2B7ED3C85049207DA4358D16EDBED977D23FA2EE6F0DDE3EC2132 DUP9 PUSH1 0x40 MLOAD PUSH2 0x809 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x826 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV AND DUP4 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x869 PUSH2 0x2575 JUMP JUMPDEST PUSH2 0x872 DUP4 PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP3 MLOAD DUP2 SLOAD SWAP4 SWAP5 POP SWAP1 SWAP3 PUSH5 0xE8D4A51000 SWAP2 PUSH2 0x8AE SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x8B5 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH1 0x0 PUSH2 0x8D9 PUSH2 0x8D4 DUP5 PUSH1 0x1 ADD SLOAD DUP5 PUSH2 0x21B6 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x2314 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP4 SWAP1 SSTORE SWAP1 POP DUP1 ISZERO PUSH2 0x91C JUMPI PUSH2 0x91C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP7 DUP4 PUSH2 0x2226 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 DUP8 DUP2 SLOAD DUP2 LT PUSH2 0x92B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0x9B0 JUMPI DUP4 SLOAD PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x8BF63742 SWAP2 PUSH2 0x97D SWAP2 DUP12 SWAP2 CALLER SWAP2 DUP13 SWAP2 DUP10 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP7 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x71BAB65CED2E5750775A0613BE067DF48EF06CF92A496EBF7663AE0660924954 DUP5 PUSH1 0x40 MLOAD PUSH2 0x9EA SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA05 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xA12 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE SWAP2 SWAP1 SWAP4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP4 DIV DUP2 AND DUP5 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP3 DIV SWAP1 SWAP2 AND DUP3 DUP6 ADD MSTORE DUP9 DUP6 MSTORE PUSH1 0x6 DUP4 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP7 MSTORE SWAP1 SWAP3 MSTORE SWAP2 DUP4 KECCAK256 DUP3 MLOAD PUSH1 0x4 DUP1 SLOAD SWAP5 SWAP7 POP SWAP2 SWAP5 SWAP3 AND SWAP3 DUP9 SWAP1 DUP2 LT PUSH2 0xA90 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xAC9 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAF5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB19 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER GT DUP1 ISZERO PUSH2 0xB36 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xBBF JUMPI PUSH1 0x0 PUSH2 0xB5D DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER PUSH2 0x2203 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x7 SLOAD PUSH2 0xB8D DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0xB87 PUSH2 0xB80 PUSH2 0x1C02 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x2179 JUMP JUMPDEST SWAP1 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0xB94 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xBBA DUP4 PUSH2 0xBAA DUP4 PUSH5 0xE8D4A51000 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0xBB1 JUMPI INVALID JUMPDEST DUP7 SWAP2 SWAP1 DIV PUSH2 0x233A JUMP JUMPDEST SWAP4 POP POP POP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD DUP4 SLOAD PUSH2 0xBED SWAP2 PUSH2 0x8D4 SWAP2 PUSH5 0xE8D4A51000 SWAP1 PUSH2 0xBDF SWAP1 DUP8 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0xBE6 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0x21B6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xC27 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC77 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0xC96 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2B5D JUMP JUMPDEST PUSH2 0xCAB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x235D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH2 0xCF9 SWAP1 PUSH32 0x0 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2A43 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD4B SWAP2 SWAP1 PUSH2 0x26AF JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x1C57762B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xE2BBB158 SWAP1 PUSH2 0xDBA SWAP1 PUSH32 0x0 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F31 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x98A9BD3B7A617581FC53B1E2992534E0E0CB5091C9D44AA1A7FC978F706CAA83 SWAP3 POP PUSH1 0x0 SWAP2 POP LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE43 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CFE JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP3 DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD SWAP3 SWAP4 SWAP2 SWAP3 DUP7 SWAP1 DUP2 LT PUSH2 0xE9C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0xF21 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x8BF63742 SWAP1 PUSH2 0xEEE SWAP1 DUP9 SWAP1 CALLER SWAP1 DUP10 SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF1C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0xF33 DUP5 DUP4 PUSH1 0x4 DUP9 DUP2 SLOAD DUP2 LT PUSH2 0x7A9 JUMPI INVALID JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2CAC5E20E1541D836381527A43F651851E302817B71DC8E810284E69210C1C6B DUP6 PUSH1 0x40 MLOAD PUSH2 0xF77 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2D9F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xFBD JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP DUP3 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xFF8 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1010 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1024 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1048 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP3 PUSH4 0x95EA7B3 SWAP3 PUSH2 0x107D SWAP3 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2A43 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1097 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10CF SWAP2 SWAP1 PUSH2 0x26AF JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0xCE5494BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xCE5494BB SWAP1 PUSH2 0x1101 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x111B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x112F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1153 SWAP2 SWAP1 PUSH2 0x26E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1182 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x119A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11D2 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST DUP3 EQ PUSH2 0x11F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2C47 JUMP JUMPDEST DUP1 PUSH1 0x4 DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x11FE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x125D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2D33 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1C57762B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xE2BBB158 SWAP1 PUSH2 0x132E SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F31 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x135C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x136A PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1377 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE SWAP3 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP5 DUP5 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP2 DIV AND SWAP1 DUP3 ADD MSTORE SWAP2 POP NUMBER GT ISZERO PUSH2 0x15D7 JUMPI PUSH1 0x0 PUSH1 0x4 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x13D9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1412 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x142A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x143E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1462 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x14FB JUMPI PUSH1 0x0 PUSH2 0x148C DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER PUSH2 0x2203 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x7 SLOAD PUSH2 0x14AF DUP6 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0xB87 PUSH2 0xB80 PUSH2 0x1C02 JUMP JUMPDEST DUP2 PUSH2 0x14B6 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x14ED PUSH2 0x14DC DUP5 PUSH2 0x14CF DUP5 PUSH5 0xE8D4A51000 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x14D6 JUMPI INVALID JUMPDEST DIV PUSH2 0x244E JUMP JUMPDEST DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 PUSH2 0x2477 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP5 MSTORE POP POP JUMPDEST PUSH2 0x1504 NUMBER PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x3 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x1523 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD SWAP2 ADD DUP1 SLOAD DUP5 DUP5 ADD MLOAD PUSH1 0x40 SWAP6 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT AND PUSH1 0x1 PUSH1 0x80 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP5 DUP6 AND MUL OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB AND PUSH1 0x1 PUSH1 0xC0 SHL SWAP4 SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP4 ADD MLOAD DUP4 MLOAD SWAP2 MLOAD DUP6 SWAP3 PUSH32 0xFC9545022A542541AD085D091FB09A2AB36FEE366A4576AB63714EA907AD353 SWAP3 PUSH2 0x15CD SWAP3 SWAP1 SWAP2 DUP7 SWAP2 PUSH2 0x2F3F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x135C JUMPI PUSH2 0x1603 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0x15F7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x1362 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x15E0 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x4 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x163D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD505ACCF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH2 0x168F SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x2A02 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16BD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1704 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CFE JUMP JUMPDEST PUSH2 0x1743 DUP4 PUSH2 0x173D PUSH1 0x3 DUP8 DUP2 SLOAD DUP2 LT PUSH2 0x1718 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x7 SLOAD SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0x2203 JUMP JUMPDEST SWAP1 PUSH2 0x233A JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x174F DUP4 PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x3 DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x175C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 ADD PUSH1 0x18 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP1 ISZERO PUSH2 0x17D0 JUMPI DUP2 PUSH1 0x5 DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x17A1 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP JUMPDEST DUP1 PUSH2 0x17FC JUMPI PUSH1 0x5 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x17E2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x17FE JUMP JUMPDEST DUP2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH32 0x95895A6AB1DF54420D241B55243258A33E61B2194DB66C1179EC521AAE8E1865 DUP6 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1839 SWAP3 SWAP2 SWAP1 PUSH2 0x2F21 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x185E PUSH2 0x2575 JUMP JUMPDEST PUSH2 0x1867 DUP5 PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1899 SWAP1 DUP6 PUSH2 0x233A JUMP JUMPDEST DUP2 SSTORE DUP2 MLOAD PUSH2 0x18D0 SWAP1 PUSH5 0xE8D4A51000 SWAP1 PUSH2 0x18BC SWAP1 DUP8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x18C3 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD SWAP2 SWAP1 DIV PUSH2 0x24CF JUMP JUMPDEST DUP2 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x5 DUP7 DUP2 SLOAD DUP2 LT PUSH2 0x18E7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0x196D JUMPI DUP2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x8BF63742 SWAP2 PUSH2 0x193A SWAP2 DUP11 SWAP2 DUP10 SWAP2 DUP3 SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1968 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x199D CALLER ADDRESS DUP8 PUSH1 0x4 DUP11 DUP2 SLOAD DUP2 LT PUSH2 0x1980 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 SWAP1 PUSH2 0x235D JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2D7E648DD130FC184D383E55BB126AC4C9C60E8F94BF05ACDF557BA2D540B47 DUP9 PUSH1 0x40 MLOAD PUSH2 0x809 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD DUP3 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A53 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CFE JUMP JUMPDEST PUSH1 0x7 SLOAD NUMBER SWAP1 PUSH2 0x1A62 SWAP1 DUP6 PUSH2 0x233A JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 DUP2 ADD SWAP1 SWAP3 SSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x5 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP1 SWAP4 ADD DUP1 SLOAD SWAP3 DUP7 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x3 SWAP1 PUSH1 0x20 DUP2 ADD PUSH2 0x1B0F DUP5 PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B26 DUP8 PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND SWAP1 SWAP2 MSTORE DUP3 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 DUP5 MLOAD SWAP3 ADD DUP1 SLOAD SWAP6 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD DUP5 AND PUSH1 0x1 PUSH1 0xC0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB SWAP6 SWAP1 SWAP5 AND PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP8 AND SWAP7 SWAP1 SWAP7 OR SWAP3 SWAP1 SWAP3 AND SWAP5 SWAP1 SWAP5 OR SWAP3 SWAP1 SWAP3 AND OR SWAP1 SSTORE PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP3 SWAP1 DUP7 AND SWAP2 PUSH2 0x1BC5 SWAP2 PUSH2 0x2203 JUMP JUMPDEST PUSH32 0x81EE0F8C5C46E2CB41984886F77A84181724ABB86C32A5F6DE539B07509D45E5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1BF4 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17CAF6F1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C95 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1526FE27 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x1D69 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x1526FE27 SWAP1 PUSH2 0x1D05 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D31 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D55 SWAP2 SWAP1 PUSH2 0x2815 JUMP JUMPDEST PUSH1 0x20 ADD MLOAD PUSH9 0x56BC75E2D63100000 SWAP1 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x1D70 JUMPI INVALID JUMPDEST DIV SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x163D JUMPI INVALID JUMPDEST PUSH2 0x1D8B PUSH2 0x2575 JUMP JUMPDEST PUSH2 0x1D94 DUP5 PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP3 MLOAD DUP2 SLOAD SWAP4 SWAP5 POP SWAP1 SWAP3 PUSH5 0xE8D4A51000 SWAP2 PUSH2 0x1DD0 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x1DD7 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH1 0x0 PUSH2 0x1DF6 PUSH2 0x8D4 DUP5 PUSH1 0x1 ADD SLOAD DUP5 PUSH2 0x21B6 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1E31 PUSH5 0xE8D4A51000 PUSH2 0x1E21 DUP7 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP10 PUSH2 0x2179 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x1E28 JUMPI INVALID JUMPDEST DUP5 SWAP2 SWAP1 DIV PUSH2 0x21B6 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD SSTORE DUP3 SLOAD PUSH2 0x1E42 SWAP1 DUP8 PUSH2 0x2203 JUMP JUMPDEST DUP4 SSTORE PUSH2 0x1E78 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP7 DUP4 PUSH2 0x2226 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 DUP9 DUP2 SLOAD DUP2 LT PUSH2 0x1E87 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0x1F0C JUMPI DUP4 SLOAD PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x8BF63742 SWAP2 PUSH2 0x1ED9 SWAP2 DUP13 SWAP2 CALLER SWAP2 DUP13 SWAP2 DUP10 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F07 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1F1E DUP7 DUP9 PUSH1 0x4 DUP12 DUP2 SLOAD DUP2 LT PUSH2 0x7A9 JUMPI INVALID JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8166BF25F8A2B7ED3C85049207DA4358D16EDBED977D23FA2EE6F0DDE3EC2132 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1F62 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP8 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x71BAB65CED2E5750775A0613BE067DF48EF06CF92A496EBF7663AE0660924954 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1FA4 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x1FCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1FF9 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x2012 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2046 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2031 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0x60 ADDRESS DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x2065 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x2077 SWAP2 SWAP1 PUSH2 0x2F69 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2085 SWAP3 SWAP2 SWAP1 PUSH2 0x299E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x20C0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x20C5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 PUSH2 0x20D4 JUMPI POP DUP6 ISZERO JUMPDEST PUSH2 0x20DD DUP3 PUSH2 0x2515 JUMP JUMPDEST SWAP1 PUSH2 0x20FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP2 SWAP1 PUSH2 0x2AF6 JUMP JUMPDEST POP DUP2 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2109 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 ISZERO ISZERO SWAP1 DUP2 ISZERO ISZERO DUP2 MSTORE POP POP DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2128 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x204C JUMP JUMPDEST POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x2194 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x2191 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x21B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2E4F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x21CB JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x21E0 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x21E0 JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x21FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2DD6 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x21B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2B09 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x224C SWAP3 SWAP2 SWAP1 PUSH2 0x2A43 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x2285 SWAP2 SWAP1 PUSH2 0x29AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x22C2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x22C7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x22F1 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x22F1 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x22F1 SWAP2 SWAP1 PUSH2 0x26AF JUMP JUMPDEST PUSH2 0x230D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2BA0 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x2336 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2B38 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0x21B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x23B872DD DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x2385 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x29DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x23BE SWAP2 SWAP1 PUSH2 0x29AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x23FB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2400 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x242A JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x242A JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x242A SWAP2 SWAP1 PUSH2 0x26AF JUMP JUMPDEST PUSH2 0x2446 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2E1A JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 GT ISZERO PUSH2 0x2336 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2C90 JUMP JUMPDEST DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND SWAP1 DUP3 AND LT ISZERO PUSH2 0x21B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x2336 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2D68 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x24E4 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x24F9 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x24F9 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x21FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2BD7 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x255B JUMPI POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1D DUP2 MSTORE PUSH32 0x5472616E73616374696F6E2072657665727465642073696C656E746C79000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x15D7 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x21B0 SWAP2 SWAP1 PUSH2 0x278A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25A6 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x25BC JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x25D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x25F1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x25FC DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x260C DUP2 PUSH2 0x3017 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x261C DUP2 PUSH2 0x3017 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x263B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2650 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x265C DUP7 DUP3 DUP8 ADD PUSH2 0x2595 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x261C DUP2 PUSH2 0x3017 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2682 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2697 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x26A3 DUP6 DUP3 DUP7 ADD PUSH2 0x2595 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26C0 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x21FC DUP2 PUSH2 0x3017 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26DC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x21FC DUP2 PUSH2 0x2FFF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26F8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x21FC DUP2 PUSH2 0x2FFF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x271F JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x272A DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x273A DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x274A DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x276D JUMPI DUP4 DUP5 REVERT JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0xC0 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0xE0 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x279B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x27B1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x27C4 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x27D2 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x27E5 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2FAD JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x27FB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x280C DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2FD3 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2826 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2830 PUSH1 0x80 PUSH2 0x2FAD JUMP JUMPDEST DUP3 MLOAD PUSH2 0x283B DUP2 PUSH2 0x2FFF JUMP JUMPDEST DUP1 DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2878 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2890 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x28A9 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x28BB DUP2 PUSH2 0x2FFF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x28DA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x28EC DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x261C DUP2 PUSH2 0x2FFF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2910 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x261C DUP2 PUSH2 0x2FFF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x293E JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x2957 DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x2967 DUP2 PUSH2 0x3017 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x298A DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x29C0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x2FD3 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 SWAP1 SWAP7 AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP4 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x60 DUP5 ADD SWAP1 DUP3 DUP8 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2A97 JUMPI DUP2 MLOAD ISZERO ISZERO DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2A79 JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE DUP1 DUP6 MLOAD PUSH2 0x2AAE DUP2 DUP5 PUSH2 0x2EE9 JUMP JUMPDEST SWAP2 POP DUP2 SWAP3 POP DUP4 DUP2 MUL DUP3 ADD DUP5 DUP9 ADD DUP7 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2AE7 JUMPI DUP6 DUP4 SUB DUP6 MSTORE PUSH2 0x2AD5 DUP4 DUP4 MLOAD PUSH2 0x2972 JUMP JUMPDEST SWAP5 DUP8 ADD SWAP5 SWAP3 POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2ABD JUMP JUMPDEST POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x21FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2972 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x426F72696E674D6174683A20556E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xB SWAP1 DUP3 ADD MSTORE PUSH11 0x496E7465676572203C203 PUSH1 0xAC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D61737465724368656656323A2042616C616E6365206D757374206578636565 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x64203 PUSH1 0xEC SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E6745524332303A205472616E73666572206661696C656400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206164646974696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x4F776E61626C653A207A65726F2061646472657373 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D61737465724368656656323A206D696772617465642062616C616E6365206D PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0xEAE6E840DAC2E8C6D PUSH1 0xBB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A2075696E74313238204F766572666C6F7700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20416464204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C657220213D2070656E64696E67206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A2075696E743634204F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x4D61737465724368656656323A206E6F206D69677261746F7220736574000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A207375627472616374696F6E206F766572 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x666C6F77 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x426F72696E6745524332303A205472616E7366657246726F6D206661696C6564 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A204D756C204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP3 DUP4 ADD MLOAD AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x20 DUP7 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x2F7F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x2F98 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x25D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2FCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FEE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2FD6 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x135C JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3014 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3014 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0x4E 0x5D REVERT 0xEE PUSH1 0x6B SWAP16 0xF8 CALLDATALOAD PUSH27 0x8C99C275BC5BEE65FD89E04F2E557682DA8CCC9F4264736F6C6343 STOP MOD 0xC STOP CALLER ", + "sourceMap": "1098:13971:5:-:0;;;3839:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;639:5:1;:18;;-1:-1:-1;;;;;;639:18:1;647:10;639:18;;;;;673:44;;647:10;;639:5;673:44;;639:5;;673:44;-1:-1:-1;;;;;;3930:26:5;;;;;;;;3966:14;;;;;;;3990:24;;1098:13971;;496:603:-1;;;;679:2;667:9;658:7;654:23;650:32;647:2;;;-1:-1;;685:12;647:2;278:6;272:13;290:53;337:5;290:53;:::i;:::-;868:2;932:22;;97:13;737:94;;-1:-1;115:47;97:13;115:47;:::i;:::-;876:88;;;;1001:2;1055:9;1051:22;433:13;1009:74;;641:458;;;;;:::o;1641:145::-;-1:-1;;;;;1496:54;;1714:49;;1704:2;;1777:1;;1767:12;1704:2;1698:88;:::o;:::-;1098:13971:5;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "890": [ + { + "length": 32, + "start": 3279 + }, + { + "length": 32, + "start": 3427 + }, + { + "length": 32, + "start": 4822 + }, + { + "length": 32, + "start": 7174 + }, + { + "length": 32, + "start": 7344 + }, + { + "length": 32, + "start": 8535 + } + ], + "893": [ + { + "length": 32, + "start": 2293 + }, + { + "length": 32, + "start": 6663 + }, + { + "length": 32, + "start": 7761 + } + ], + "896": [ + { + "length": 32, + "start": 3472 + }, + { + "length": 32, + "start": 4867 + }, + { + "length": 32, + "start": 5646 + }, + { + "length": 32, + "start": 7389 + } + ] + }, + "linkReferences": {}, + "object": "6080604052600436106101d85760003560e01c806361621aaa11610102578063ab560e1011610095578063d1abb90711610064578063d1abb90714610529578063d2423b5114610549578063e30c39781461056a578063edd8b1701461057f576101d8565b8063ab560e10146104bf578063ab7de098146104d4578063b0bcf42a146104f4578063c346253d14610509576101d8565b806388bba42f116100d157806388bba42f1461043c5780638da5cb5b1461045c5780638dbdbe6d1461047157806393f1a40b14610491576101d8565b806361621aaa146103c557806378ed5d1f146103da5780637c516e94146104075780637cd07e4714610427576101d8565b806319ab453c1161017a5780634e71e0c8116101495780634e71e0c81461034e5780634f70b15a1461036357806351eb05a61461037857806357a5b58c146103a5576101d8565b806319ab453c146102ce57806323cf3118146102ee5780632f940c701461030e578063454b06081461032e576101d8565b80631526fe27116101b65780631526fe271461024a57806317caf6f11461027957806318fccc761461028e578063195426ec146102ae576101d8565b8063078dfbe7146101dd578063081e3eda146101ff5780630ad58d2f1461022a575b600080fd5b3480156101e957600080fd5b506101fd6101f83660046125dd565b610594565b005b34801561020b57600080fd5b50610214610683565b6040516102219190612ee9565b60405180910390f35b34801561023657600080fd5b506101fd6102453660046128fc565b610689565b34801561025657600080fd5b5061026a610265366004612867565b610819565b60405161022193929190612ebf565b34801561028557600080fd5b5061021461085b565b34801561029a57600080fd5b506101fd6102a9366004612897565b610861565b3480156102ba57600080fd5b506102146102c9366004612897565b6109fb565b3480156102da57600080fd5b506101fd6102e93660046126cb565b610bf8565b3480156102fa57600080fd5b506101fd6103093660046126cb565b610e19565b34801561031a57600080fd5b506101fd610329366004612897565b610e65565b34801561033a57600080fd5b506101fd610349366004612867565b610f86565b34801561035a57600080fd5b506101fd611232565b34801561036f57600080fd5b506101fd6112bf565b34801561038457600080fd5b50610398610393366004612867565b611362565b6040516102219190612e86565b3480156103b157600080fd5b506101fd6103c0366004612670565b6115dc565b3480156103d157600080fd5b5061021461160c565b3480156103e657600080fd5b506103fa6103f5366004612867565b611630565b60405161022191906129ca565b34801561041357600080fd5b506101fd610422366004612703565b611657565b34801561043357600080fd5b506103fa6116cb565b34801561044857600080fd5b506101fd610457366004612929565b6116da565b34801561046857600080fd5b506103fa611847565b34801561047d57600080fd5b506101fd61048c3660046128fc565b611856565b34801561049d57600080fd5b506104b16104ac366004612897565b6119e1565b604051610221929190612f31565b3480156104cb57600080fd5b506103fa611a05565b3480156104e057600080fd5b506101fd6104ef3660046128c6565b611a29565b34801561050057600080fd5b50610214611c02565b34801561051557600080fd5b506103fa610524366004612867565b611d76565b34801561053557600080fd5b506101fd6105443660046128fc565b611d83565b61055c610557366004612627565b611fb6565b604051610221929190612a5c565b34801561057657600080fd5b506103fa612146565b34801561058b57600080fd5b506103fa612155565b6000546001600160a01b031633146105c75760405162461bcd60e51b81526004016105be90612cfe565b60405180910390fd5b8115610662576001600160a01b0383161515806105e15750805b6105fd5760405162461bcd60e51b81526004016105be90612c18565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b03199182161790915560018054909116905561067e565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b610691612575565b61069a84611362565b600085815260066020908152604080832033845290915290208151919250906106ec9064e8d4a51000906106d89087906001600160801b0316612179565b816106df57fe5b60018401549190046121b6565b600182015580546106fd9085612203565b815560058054600091908790811061071157fe5b6000918252602090912001546001600160a01b0316905080156107975781546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291610764918a9133918a9160009190600401612ef2565b600060405180830381600087803b15801561077e57600080fd5b505af1158015610792573d6000803e3d6000fd5b505050505b6107c58486600489815481106107a957fe5b6000918252602090912001546001600160a01b03169190612226565b836001600160a01b031686336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516108099190612ee9565b60405180910390a4505050505050565b6003818154811061082657fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60075481565b610869612575565b61087283611362565b6000848152600660209081526040808320338452909152812082518154939450909264e8d4a51000916108ae91906001600160801b0316612179565b816108b557fe5b04905060006108d96108d48460010154846121b690919063ffffffff16565b612314565b600184018390559050801561091c5761091c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b60006005878154811061092b57fe5b6000918252602090912001546001600160a01b0316905080156109b05783546040516345fb1ba160e11b81526001600160a01b03831691638bf637429161097d918b9133918c91899190600401612ef2565b600060405180830381600087803b15801561099757600080fd5b505af11580156109ab573d6000803e3d6000fd5b505050505b86336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954846040516109ea9190612ee9565b60405180910390a350505050505050565b6000610a05612575565b60038481548110610a1257fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600683528385206001600160a01b0389168652909252918320825160048054949650919492169288908110610a9057fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610ac99030906004016129ca565b60206040518083038186803b158015610ae157600080fd5b505afa158015610af5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b19919061287f565b905083602001516001600160401b031643118015610b3657508015155b15610bbf576000610b5d85602001516001600160401b03164361220390919063ffffffff16565b90506000600754610b8d87604001516001600160401b0316610b87610b80611c02565b8690612179565b90612179565b81610b9457fe5b049050610bba83610baa8364e8d4a51000612179565b81610bb157fe5b8691900461233a565b935050505b60018301548354610bed916108d49164e8d4a5100090610bdf9087612179565b81610be657fe5b04906121b6565b979650505050505050565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610c279033906004016129ca565b60206040518083038186803b158015610c3f57600080fd5b505afa158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c77919061287f565b905080610c965760405162461bcd60e51b81526004016105be90612b5d565b610cab6001600160a01b03831633308461235d565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610cf9907f0000000000000000000000000000000000000000000000000000000000000000908590600401612a43565b602060405180830381600087803b158015610d1357600080fd5b505af1158015610d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b91906126af565b50604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb15890610dba907f0000000000000000000000000000000000000000000000000000000000000000908590600401612f31565b600060405180830381600087803b158015610dd457600080fd5b505af1158015610de8573d6000803e3d6000fd5b50506040517f98a9bd3b7a617581fc53b1e2992534e0e0cb5091c9d44aa1a7fc978f706caa83925060009150a15050565b6000546001600160a01b03163314610e435760405162461bcd60e51b81526004016105be90612cfe565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526006602090815260408083203384529091528120805482825560018201839055600580549293919286908110610e9c57fe5b6000918252602090912001546001600160a01b031690508015610f21576040516345fb1ba160e11b81526001600160a01b03821690638bf6374290610eee908890339089906000908190600401612ef2565b600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b505050505b610f338483600488815481106107a957fe5b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b85604051610f779190612ee9565b60405180910390a45050505050565b6002546001600160a01b0316610fae5760405162461bcd60e51b81526004016105be90612d9f565b600060048281548110610fbd57fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190610ff89030906004016129ca565b60206040518083038186803b15801561101057600080fd5b505afa158015611024573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611048919061287f565b60025460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b39261107d9216908590600401612a43565b602060405180830381600087803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906126af565b5060025460405163ce5494bb60e01b81526000916001600160a01b03169063ce5494bb906111019086906004016129ca565b602060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115391906126e7565b6040516370a0823160e01b81529091506001600160a01b038216906370a08231906111829030906004016129ca565b60206040518083038186803b15801561119a57600080fd5b505afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d2919061287f565b82146111f05760405162461bcd60e51b81526004016105be90612c47565b80600485815481106111fe57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050565b6001546001600160a01b031633811461125d5760405162461bcd60e51b81526004016105be90612d33565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b604051631c57762b60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e2bbb1589061132e907f000000000000000000000000000000000000000000000000000000000000000090600090600401612f31565b600060405180830381600087803b15801561134857600080fd5b505af115801561135c573d6000803e3d6000fd5b50505050565b61136a612575565b6003828154811061137757fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b909104169082015291504311156115d7576000600483815481106113d957fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906114129030906004016129ca565b60206040518083038186803b15801561142a57600080fd5b505afa15801561143e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611462919061287f565b905080156114fb57600061148c83602001516001600160401b03164361220390919063ffffffff16565b905060006007546114af85604001516001600160401b0316610b87610b80611c02565b816114b657fe5b0490506114ed6114dc846114cf8464e8d4a51000612179565b816114d657fe5b0461244e565b85516001600160801b031690612477565b6001600160801b0316845250505b611504436124a6565b6001600160401b03166020830152600380548391908590811061152357fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad353926115cd9290918691612f3f565b60405180910390a2505b919050565b8060005b8181101561135c576116038484838181106115f757fe5b90506020020135611362565b506001016115e0565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004818154811061163d57fe5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf9061168f908a908a908a908a908a908a908a90600401612a02565b600060405180830381600087803b1580156116a957600080fd5b505af11580156116bd573d6000803e3d6000fd5b505050505050505050505050565b6002546001600160a01b031681565b6000546001600160a01b031633146117045760405162461bcd60e51b81526004016105be90612cfe565b6117438361173d6003878154811061171857fe5b60009182526020909120015460075490600160c01b90046001600160401b0316612203565b9061233a565b60075561174f836124a6565b6003858154811061175c57fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555080156117d05781600585815481106117a157fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b806117fc57600584815481106117e257fe5b6000918252602090912001546001600160a01b03166117fe565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e18658584604051611839929190612f21565b60405180910390a350505050565b6000546001600160a01b031681565b61185e612575565b61186784611362565b60008581526006602090815260408083206001600160a01b03871684529091529020805491925090611899908561233a565b815581516118d09064e8d4a51000906118bc9087906001600160801b0316612179565b816118c357fe5b60018401549190046124cf565b81600101819055506000600586815481106118e757fe5b6000918252602090912001546001600160a01b03169050801561196d5781546040516345fb1ba160e11b81526001600160a01b03831691638bf637429161193a918a918991829160009190600401612ef2565b600060405180830381600087803b15801561195457600080fd5b505af1158015611968573d6000803e3d6000fd5b505050505b61199d33308760048a8154811061198057fe5b6000918252602090912001546001600160a01b031692919061235d565b836001600160a01b031686336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47886040516108099190612ee9565b60066020908152600092835260408084209091529082529020805460019091015482565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314611a535760405162461bcd60e51b81526004016105be90612cfe565b6007544390611a62908561233a565b6007556004805460018181019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b038087166001600160a01b03199283161790925560058054938401815560009081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0909301805492861692909116919091179055604080516060810190915290815260039060208101611b0f846124a6565b6001600160401b03168152602001611b26876124a6565b6001600160401b039081169091528254600181810185556000948552602094859020845192018054958501516040909501518416600160c01b026001600160c01b0395909416600160801b0267ffffffffffffffff60801b196001600160801b039094166001600160801b0319909716969096179290921694909417929092161790556004546001600160a01b038085169290861691611bc591612203565b7f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e587604051611bf49190612ee9565b60405180910390a450505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5d57600080fd5b505afa158015611c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c95919061287f565b604051631526fe2760e01b8152611d69906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631526fe2790611d05907f000000000000000000000000000000000000000000000000000000000000000090600401612ee9565b60806040518083038186803b158015611d1d57600080fd5b505afa158015611d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d559190612815565b6020015168056bc75e2d6310000090612179565b81611d7057fe5b04905090565b6005818154811061163d57fe5b611d8b612575565b611d9484611362565b6000858152600660209081526040808320338452909152812082518154939450909264e8d4a5100091611dd091906001600160801b0316612179565b81611dd757fe5b0490506000611df66108d48460010154846121b690919063ffffffff16565b9050611e3164e8d4a51000611e2186600001516001600160801b03168961217990919063ffffffff16565b81611e2857fe5b849190046121b6565b60018401558254611e429087612203565b8355611e786001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683612226565b600060058881548110611e8757fe5b6000918252602090912001546001600160a01b031690508015611f0c5783546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291611ed9918c9133918c91899190600401612ef2565b600060405180830381600087803b158015611ef357600080fd5b505af1158015611f07573d6000803e3d6000fd5b505050505b611f1e868860048b815481106107a957fe5b856001600160a01b031688336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328a604051611f629190612ee9565b60405180910390a487336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051611fa49190612ee9565b60405180910390a35050505050505050565b606080836001600160401b0381118015611fcf57600080fd5b50604051908082528060200260200182016040528015611ff9578160200160208202803683370190505b509150836001600160401b038111801561201257600080fd5b5060405190808252806020026020018201604052801561204657816020015b60608152602001906001900390816120315790505b50905060005b8481101561213d57600060603088888581811061206557fe5b90506020028101906120779190612f69565b60405161208592919061299e565b600060405180830381855af49150503d80600081146120c0576040519150601f19603f3d011682016040523d82523d6000602084013e6120c5565b606091505b509150915081806120d4575085155b6120dd82612515565b906120fb5760405162461bcd60e51b81526004016105be9190612af6565b508185848151811061210957fe5b6020026020010190151590811515815250508084848151811061212857fe5b6020908102919091010152505060010161204c565b50935093915050565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008115806121945750508082028282828161219157fe5b04145b6121b05760405162461bcd60e51b81526004016105be90612e4f565b92915050565b60008183038183128015906121cb5750838113155b806121e057506000831280156121e057508381135b6121fc5760405162461bcd60e51b81526004016105be90612dd6565b9392505050565b808203828111156121b05760405162461bcd60e51b81526004016105be90612b09565b60006060846001600160a01b031663a9059cbb858560405160240161224c929190612a43565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161228591906129ae565b6000604051808303816000865af19150503d80600081146122c2576040519150601f19603f3d011682016040523d82523d6000602084013e6122c7565b606091505b50915091508180156122f15750805115806122f15750808060200190518101906122f191906126af565b61230d5760405162461bcd60e51b81526004016105be90612ba0565b5050505050565b6000808212156123365760405162461bcd60e51b81526004016105be90612b38565b5090565b818101818110156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006060856001600160a01b03166323b872dd868686604051602401612385939291906129de565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516123be91906129ae565b6000604051808303816000865af19150503d80600081146123fb576040519150601f19603f3d011682016040523d82523d6000602084013e612400565b606091505b509150915081801561242a57508051158061242a57508080602001905181019061242a91906126af565b6124465760405162461bcd60e51b81526004016105be90612e1a565b505050505050565b60006001600160801b038211156123365760405162461bcd60e51b81526004016105be90612c90565b8181016001600160801b0380831690821610156121b05760405162461bcd60e51b81526004016105be90612cc7565b60006001600160401b038211156123365760405162461bcd60e51b81526004016105be90612d68565b60008282018183128015906124e45750838112155b806124f957506000831280156124f957508381125b6121fc5760405162461bcd60e51b81526004016105be90612bd7565b606060448251101561255b575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526115d7565b600482019150818060200190518101906121b0919061278a565b604080516060810182526000808252602082018190529181019190915290565b60008083601f8401126125a6578182fd5b5081356001600160401b038111156125bc578182fd5b60208301915083602080830285010111156125d657600080fd5b9250929050565b6000806000606084860312156125f1578283fd5b83356125fc81612fff565b9250602084013561260c81613017565b9150604084013561261c81613017565b809150509250925092565b60008060006040848603121561263b578283fd5b83356001600160401b03811115612650578384fd5b61265c86828701612595565b909450925050602084013561261c81613017565b60008060208385031215612682578182fd5b82356001600160401b03811115612697578283fd5b6126a385828601612595565b90969095509350505050565b6000602082840312156126c0578081fd5b81516121fc81613017565b6000602082840312156126dc578081fd5b81356121fc81612fff565b6000602082840312156126f8578081fd5b81516121fc81612fff565b600080600080600080600080610100898b03121561271f578384fd5b883561272a81612fff565b9750602089013561273a81612fff565b9650604089013561274a81612fff565b9550606089013594506080890135935060a089013560ff8116811461276d578384fd5b979a969950949793969295929450505060c08201359160e0013590565b60006020828403121561279b578081fd5b81516001600160401b03808211156127b1578283fd5b818401915084601f8301126127c4578283fd5b8151818111156127d2578384fd5b6127e5601f8201601f1916602001612fad565b91508082528560208285010111156127fb578384fd5b61280c816020840160208601612fd3565b50949350505050565b600060808284031215612826578081fd5b6128306080612fad565b825161283b81612fff565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215612878578081fd5b5035919050565b600060208284031215612890578081fd5b5051919050565b600080604083850312156128a9578182fd5b8235915060208301356128bb81612fff565b809150509250929050565b6000806000606084860312156128da578081fd5b8335925060208401356128ec81612fff565b9150604084013561261c81612fff565b600080600060608486031215612910578081fd5b8335925060208401359150604084013561261c81612fff565b6000806000806080858703121561293e578182fd5b8435935060208501359250604085013561295781612fff565b9150606085013561296781613017565b939692955090935050565b6000815180845261298a816020860160208601612fd3565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600082516129c0818460208701612fd3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015612a97578151151584529284019290840190600101612a79565b50505083810382850152808551612aae8184612ee9565b91508192508381028201848801865b83811015612ae7578583038552612ad5838351612972565b94870194925090860190600101612abd565b50909998505050505050505050565b6000602082526121fc6020830184612972565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b60208082526023908201527f4d61737465724368656656323a2042616c616e6365206d75737420657863656560408201526206420360ec1b606082015260800190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526029908201527f4d61737465724368656656323a206d696772617465642062616c616e6365206d6040820152680eae6e840dac2e8c6d60bb1b606082015260800190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b6020808252601d908201527f4d61737465724368656656323a206e6f206d69677261746f7220736574000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612f7f578283fd5b8301803591506001600160401b03821115612f98578283fd5b6020019150368190038213156125d657600080fd5b6040518181016001600160401b0381118282101715612fcb57600080fd5b604052919050565b60005b83811015612fee578181015183820152602001612fd6565b8381111561135c5750506000910152565b6001600160a01b038116811461301457600080fd5b50565b801515811461301457600080fdfea2646970667358221220814e5dfdee606b9ff8357a8c99c275bc5bee65fd89e04f2e557682da8ccc9f4264736f6c634300060c0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1D8 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x61621AAA GT PUSH2 0x102 JUMPI DUP1 PUSH4 0xAB560E10 GT PUSH2 0x95 JUMPI DUP1 PUSH4 0xD1ABB907 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xD1ABB907 EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0xD2423B51 EQ PUSH2 0x549 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x56A JUMPI DUP1 PUSH4 0xEDD8B170 EQ PUSH2 0x57F JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0xAB560E10 EQ PUSH2 0x4BF JUMPI DUP1 PUSH4 0xAB7DE098 EQ PUSH2 0x4D4 JUMPI DUP1 PUSH4 0xB0BCF42A EQ PUSH2 0x4F4 JUMPI DUP1 PUSH4 0xC346253D EQ PUSH2 0x509 JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x88BBA42F GT PUSH2 0xD1 JUMPI DUP1 PUSH4 0x88BBA42F EQ PUSH2 0x43C JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x45C JUMPI DUP1 PUSH4 0x8DBDBE6D EQ PUSH2 0x471 JUMPI DUP1 PUSH4 0x93F1A40B EQ PUSH2 0x491 JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x61621AAA EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x78ED5D1F EQ PUSH2 0x3DA JUMPI DUP1 PUSH4 0x7C516E94 EQ PUSH2 0x407 JUMPI DUP1 PUSH4 0x7CD07E47 EQ PUSH2 0x427 JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x19AB453C GT PUSH2 0x17A JUMPI DUP1 PUSH4 0x4E71E0C8 GT PUSH2 0x149 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x34E JUMPI DUP1 PUSH4 0x4F70B15A EQ PUSH2 0x363 JUMPI DUP1 PUSH4 0x51EB05A6 EQ PUSH2 0x378 JUMPI DUP1 PUSH4 0x57A5B58C EQ PUSH2 0x3A5 JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x19AB453C EQ PUSH2 0x2CE JUMPI DUP1 PUSH4 0x23CF3118 EQ PUSH2 0x2EE JUMPI DUP1 PUSH4 0x2F940C70 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x454B0608 EQ PUSH2 0x32E JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x1526FE27 GT PUSH2 0x1B6 JUMPI DUP1 PUSH4 0x1526FE27 EQ PUSH2 0x24A JUMPI DUP1 PUSH4 0x17CAF6F1 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0x18FCCC76 EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0x195426EC EQ PUSH2 0x2AE JUMPI PUSH2 0x1D8 JUMP JUMPDEST DUP1 PUSH4 0x78DFBE7 EQ PUSH2 0x1DD JUMPI DUP1 PUSH4 0x81E3EDA EQ PUSH2 0x1FF JUMPI DUP1 PUSH4 0xAD58D2F EQ PUSH2 0x22A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x1E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x1F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x25DD JUMP JUMPDEST PUSH2 0x594 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x20B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x683 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x245 CALLDATASIZE PUSH1 0x4 PUSH2 0x28FC JUMP JUMPDEST PUSH2 0x689 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x256 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26A PUSH2 0x265 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0x819 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2EBF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x285 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x85B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x29A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x2A9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2897 JUMP JUMPDEST PUSH2 0x861 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x2C9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2897 JUMP JUMPDEST PUSH2 0x9FB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x2E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x26CB JUMP JUMPDEST PUSH2 0xBF8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x309 CALLDATASIZE PUSH1 0x4 PUSH2 0x26CB JUMP JUMPDEST PUSH2 0xE19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x31A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x329 CALLDATASIZE PUSH1 0x4 PUSH2 0x2897 JUMP JUMPDEST PUSH2 0xE65 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x33A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x349 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0xF86 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x1232 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x12BF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x384 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x398 PUSH2 0x393 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP2 SWAP1 PUSH2 0x2E86 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x3C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2670 JUMP JUMPDEST PUSH2 0x15DC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x160C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x3F5 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP2 SWAP1 PUSH2 0x29CA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x413 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x422 CALLDATASIZE PUSH1 0x4 PUSH2 0x2703 JUMP JUMPDEST PUSH2 0x1657 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x16CB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x448 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x457 CALLDATASIZE PUSH1 0x4 PUSH2 0x2929 JUMP JUMPDEST PUSH2 0x16DA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x468 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x1847 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x48C CALLDATASIZE PUSH1 0x4 PUSH2 0x28FC JUMP JUMPDEST PUSH2 0x1856 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x49D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B1 PUSH2 0x4AC CALLDATASIZE PUSH1 0x4 PUSH2 0x2897 JUMP JUMPDEST PUSH2 0x19E1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP3 SWAP2 SWAP1 PUSH2 0x2F31 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x1A05 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x4EF CALLDATASIZE PUSH1 0x4 PUSH2 0x28C6 JUMP JUMPDEST PUSH2 0x1A29 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x500 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x214 PUSH2 0x1C02 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x515 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x524 CALLDATASIZE PUSH1 0x4 PUSH2 0x2867 JUMP JUMPDEST PUSH2 0x1D76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x535 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1FD PUSH2 0x544 CALLDATASIZE PUSH1 0x4 PUSH2 0x28FC JUMP JUMPDEST PUSH2 0x1D83 JUMP JUMPDEST PUSH2 0x55C PUSH2 0x557 CALLDATASIZE PUSH1 0x4 PUSH2 0x2627 JUMP JUMPDEST PUSH2 0x1FB6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x221 SWAP3 SWAP2 SWAP1 PUSH2 0x2A5C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x2146 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3FA PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x5C7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CFE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x662 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO DUP1 PUSH2 0x5E1 JUMPI POP DUP1 JUMPDEST PUSH2 0x5FD JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2C18 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH2 0x67E JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x691 PUSH2 0x2575 JUMP JUMPDEST PUSH2 0x69A DUP5 PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP2 MLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x6EC SWAP1 PUSH5 0xE8D4A51000 SWAP1 PUSH2 0x6D8 SWAP1 DUP8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x6DF JUMPI INVALID JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD SWAP2 SWAP1 DIV PUSH2 0x21B6 JUMP JUMPDEST PUSH1 0x1 DUP3 ADD SSTORE DUP1 SLOAD PUSH2 0x6FD SWAP1 DUP6 PUSH2 0x2203 JUMP JUMPDEST DUP2 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x0 SWAP2 SWAP1 DUP8 SWAP1 DUP2 LT PUSH2 0x711 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0x797 JUMPI DUP2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x8BF63742 SWAP2 PUSH2 0x764 SWAP2 DUP11 SWAP2 CALLER SWAP2 DUP11 SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x77E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x792 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x7C5 DUP5 DUP7 PUSH1 0x4 DUP10 DUP2 SLOAD DUP2 LT PUSH2 0x7A9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 SWAP1 PUSH2 0x2226 JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8166BF25F8A2B7ED3C85049207DA4358D16EDBED977D23FA2EE6F0DDE3EC2132 DUP9 PUSH1 0x40 MLOAD PUSH2 0x809 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x826 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV AND DUP4 JUMP JUMPDEST PUSH1 0x7 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x869 PUSH2 0x2575 JUMP JUMPDEST PUSH2 0x872 DUP4 PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP3 MLOAD DUP2 SLOAD SWAP4 SWAP5 POP SWAP1 SWAP3 PUSH5 0xE8D4A51000 SWAP2 PUSH2 0x8AE SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x8B5 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH1 0x0 PUSH2 0x8D9 PUSH2 0x8D4 DUP5 PUSH1 0x1 ADD SLOAD DUP5 PUSH2 0x21B6 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x2314 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD DUP4 SWAP1 SSTORE SWAP1 POP DUP1 ISZERO PUSH2 0x91C JUMPI PUSH2 0x91C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP7 DUP4 PUSH2 0x2226 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 DUP8 DUP2 SLOAD DUP2 LT PUSH2 0x92B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0x9B0 JUMPI DUP4 SLOAD PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x8BF63742 SWAP2 PUSH2 0x97D SWAP2 DUP12 SWAP2 CALLER SWAP2 DUP13 SWAP2 DUP10 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x997 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x9AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP7 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x71BAB65CED2E5750775A0613BE067DF48EF06CF92A496EBF7663AE0660924954 DUP5 PUSH1 0x40 MLOAD PUSH2 0x9EA SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xA05 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x3 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xA12 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE SWAP2 SWAP1 SWAP4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP4 DIV DUP2 AND DUP5 DUP7 ADD MSTORE PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP3 DIV SWAP1 SWAP2 AND DUP3 DUP6 ADD MSTORE DUP9 DUP6 MSTORE PUSH1 0x6 DUP4 MSTORE DUP4 DUP6 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND DUP7 MSTORE SWAP1 SWAP3 MSTORE SWAP2 DUP4 KECCAK256 DUP3 MLOAD PUSH1 0x4 DUP1 SLOAD SWAP5 SWAP7 POP SWAP2 SWAP5 SWAP3 AND SWAP3 DUP9 SWAP1 DUP2 LT PUSH2 0xA90 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xAC9 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xAE1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xAF5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xB19 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER GT DUP1 ISZERO PUSH2 0xB36 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xBBF JUMPI PUSH1 0x0 PUSH2 0xB5D DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER PUSH2 0x2203 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x7 SLOAD PUSH2 0xB8D DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0xB87 PUSH2 0xB80 PUSH2 0x1C02 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x2179 JUMP JUMPDEST SWAP1 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0xB94 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0xBBA DUP4 PUSH2 0xBAA DUP4 PUSH5 0xE8D4A51000 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0xBB1 JUMPI INVALID JUMPDEST DUP7 SWAP2 SWAP1 DIV PUSH2 0x233A JUMP JUMPDEST SWAP4 POP POP POP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD DUP4 SLOAD PUSH2 0xBED SWAP2 PUSH2 0x8D4 SWAP2 PUSH5 0xE8D4A51000 SWAP1 PUSH2 0xBDF SWAP1 DUP8 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0xBE6 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0x21B6 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xC27 SWAP1 CALLER SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xC3F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xC53 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xC77 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST SWAP1 POP DUP1 PUSH2 0xC96 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2B5D JUMP JUMPDEST PUSH2 0xCAB PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND CALLER ADDRESS DUP5 PUSH2 0x235D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH4 0x95EA7B3 SWAP1 PUSH2 0xCF9 SWAP1 PUSH32 0x0 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2A43 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xD13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xD27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0xD4B SWAP2 SWAP1 PUSH2 0x26AF JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH4 0x1C57762B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xE2BBB158 SWAP1 PUSH2 0xDBA SWAP1 PUSH32 0x0 SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F31 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xDD4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xDE8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x98A9BD3B7A617581FC53B1E2992534E0E0CB5091C9D44AA1A7FC978F706CAA83 SWAP3 POP PUSH1 0x0 SWAP2 POP LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xE43 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CFE JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD DUP3 DUP3 SSTORE PUSH1 0x1 DUP3 ADD DUP4 SWAP1 SSTORE PUSH1 0x5 DUP1 SLOAD SWAP3 SWAP4 SWAP2 SWAP3 DUP7 SWAP1 DUP2 LT PUSH2 0xE9C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0xF21 JUMPI PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x8BF63742 SWAP1 PUSH2 0xEEE SWAP1 DUP9 SWAP1 CALLER SWAP1 DUP10 SWAP1 PUSH1 0x0 SWAP1 DUP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF08 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF1C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0xF33 DUP5 DUP4 PUSH1 0x4 DUP9 DUP2 SLOAD DUP2 LT PUSH2 0x7A9 JUMPI INVALID JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2CAC5E20E1541D836381527A43F651851E302817B71DC8E810284E69210C1C6B DUP6 PUSH1 0x40 MLOAD PUSH2 0xF77 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xFAE JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2D9F JUMP JUMPDEST PUSH1 0x0 PUSH1 0x4 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xFBD JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP3 POP DUP3 SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0xFF8 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1010 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1024 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1048 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x95EA7B3 PUSH1 0xE0 SHL DUP2 MSTORE SWAP2 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP3 PUSH4 0x95EA7B3 SWAP3 PUSH2 0x107D SWAP3 AND SWAP1 DUP6 SWAP1 PUSH1 0x4 ADD PUSH2 0x2A43 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1097 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x10AB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x10CF SWAP2 SWAP1 PUSH2 0x26AF JUMP JUMPDEST POP PUSH1 0x2 SLOAD PUSH1 0x40 MLOAD PUSH4 0xCE5494BB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH4 0xCE5494BB SWAP1 PUSH2 0x1101 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x111B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x112F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1153 SWAP2 SWAP1 PUSH2 0x26E7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1182 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x119A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x11AE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x11D2 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST DUP3 EQ PUSH2 0x11F0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2C47 JUMP JUMPDEST DUP1 PUSH1 0x4 DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x11FE JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x125D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2D33 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1C57762B PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0xE2BBB158 SWAP1 PUSH2 0x132E SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x2F31 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1348 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x135C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH2 0x136A PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x3 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1377 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE SWAP3 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP5 DUP5 ADD DUP6 SWAP1 MSTORE PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP2 DIV AND SWAP1 DUP3 ADD MSTORE SWAP2 POP NUMBER GT ISZERO PUSH2 0x15D7 JUMPI PUSH1 0x0 PUSH1 0x4 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0x13D9 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x40 MLOAD PUSH4 0x70A08231 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 PUSH4 0x70A08231 SWAP1 PUSH2 0x1412 SWAP1 ADDRESS SWAP1 PUSH1 0x4 ADD PUSH2 0x29CA JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x142A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x143E JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1462 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x14FB JUMPI PUSH1 0x0 PUSH2 0x148C DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER PUSH2 0x2203 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x7 SLOAD PUSH2 0x14AF DUP6 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0xB87 PUSH2 0xB80 PUSH2 0x1C02 JUMP JUMPDEST DUP2 PUSH2 0x14B6 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x14ED PUSH2 0x14DC DUP5 PUSH2 0x14CF DUP5 PUSH5 0xE8D4A51000 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x14D6 JUMPI INVALID JUMPDEST DIV PUSH2 0x244E JUMP JUMPDEST DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 PUSH2 0x2477 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP5 MSTORE POP POP JUMPDEST PUSH2 0x1504 NUMBER PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x3 DUP1 SLOAD DUP4 SWAP2 SWAP1 DUP6 SWAP1 DUP2 LT PUSH2 0x1523 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 DUP4 MLOAD SWAP2 ADD DUP1 SLOAD DUP5 DUP5 ADD MLOAD PUSH1 0x40 SWAP6 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP5 AND SWAP4 SWAP1 SWAP4 OR PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT AND PUSH1 0x1 PUSH1 0x80 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP5 DUP6 AND MUL OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB AND PUSH1 0x1 PUSH1 0xC0 SHL SWAP4 SWAP1 SWAP2 AND SWAP3 SWAP1 SWAP3 MUL SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP4 ADD MLOAD DUP4 MLOAD SWAP2 MLOAD DUP6 SWAP3 PUSH32 0xFC9545022A542541AD085D091FB09A2AB36FEE366A4576AB63714EA907AD353 SWAP3 PUSH2 0x15CD SWAP3 SWAP1 SWAP2 DUP7 SWAP2 PUSH2 0x2F3F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x135C JUMPI PUSH2 0x1603 DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0x15F7 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x1362 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x15E0 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x4 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x163D JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xD505ACCF PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH4 0xD505ACCF SWAP1 PUSH2 0x168F SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 DUP11 SWAP1 PUSH1 0x4 ADD PUSH2 0x2A02 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x16A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x16BD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1704 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CFE JUMP JUMPDEST PUSH2 0x1743 DUP4 PUSH2 0x173D PUSH1 0x3 DUP8 DUP2 SLOAD DUP2 LT PUSH2 0x1718 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x7 SLOAD SWAP1 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0x2203 JUMP JUMPDEST SWAP1 PUSH2 0x233A JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH2 0x174F DUP4 PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x3 DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x175C JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 ADD PUSH1 0x18 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND MUL OR SWAP1 SSTORE POP DUP1 ISZERO PUSH2 0x17D0 JUMPI DUP2 PUSH1 0x5 DUP6 DUP2 SLOAD DUP2 LT PUSH2 0x17A1 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP JUMPDEST DUP1 PUSH2 0x17FC JUMPI PUSH1 0x5 DUP5 DUP2 SLOAD DUP2 LT PUSH2 0x17E2 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x17FE JUMP JUMPDEST DUP2 JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH32 0x95895A6AB1DF54420D241B55243258A33E61B2194DB66C1179EC521AAE8E1865 DUP6 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1839 SWAP3 SWAP2 SWAP1 PUSH2 0x2F21 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH2 0x185E PUSH2 0x2575 JUMP JUMPDEST PUSH2 0x1867 DUP5 PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD SWAP2 SWAP3 POP SWAP1 PUSH2 0x1899 SWAP1 DUP6 PUSH2 0x233A JUMP JUMPDEST DUP2 SSTORE DUP2 MLOAD PUSH2 0x18D0 SWAP1 PUSH5 0xE8D4A51000 SWAP1 PUSH2 0x18BC SWAP1 DUP8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x18C3 JUMPI INVALID JUMPDEST PUSH1 0x1 DUP5 ADD SLOAD SWAP2 SWAP1 DIV PUSH2 0x24CF JUMP JUMPDEST DUP2 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP PUSH1 0x0 PUSH1 0x5 DUP7 DUP2 SLOAD DUP2 LT PUSH2 0x18E7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0x196D JUMPI DUP2 SLOAD PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x8BF63742 SWAP2 PUSH2 0x193A SWAP2 DUP11 SWAP2 DUP10 SWAP2 DUP3 SWAP2 PUSH1 0x0 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1954 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1968 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x199D CALLER ADDRESS DUP8 PUSH1 0x4 DUP11 DUP2 SLOAD DUP2 LT PUSH2 0x1980 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 SWAP2 SWAP1 PUSH2 0x235D JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2D7E648DD130FC184D383E55BB126AC4C9C60E8F94BF05ACDF557BA2D540B47 DUP9 PUSH1 0x40 MLOAD PUSH2 0x809 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD DUP3 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x1A53 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CFE JUMP JUMPDEST PUSH1 0x7 SLOAD NUMBER SWAP1 PUSH2 0x1A62 SWAP1 DUP6 PUSH2 0x233A JUMP JUMPDEST PUSH1 0x7 SSTORE PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 DUP2 DUP2 ADD SWAP1 SWAP3 SSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SWAP3 SSTORE PUSH1 0x5 DUP1 SLOAD SWAP4 DUP5 ADD DUP2 SSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP1 SWAP4 ADD DUP1 SLOAD SWAP3 DUP7 AND SWAP3 SWAP1 SWAP2 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP2 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x3 SWAP1 PUSH1 0x20 DUP2 ADD PUSH2 0x1B0F DUP5 PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1B26 DUP8 PUSH2 0x24A6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND SWAP1 SWAP2 MSTORE DUP3 SLOAD PUSH1 0x1 DUP2 DUP2 ADD DUP6 SSTORE PUSH1 0x0 SWAP5 DUP6 MSTORE PUSH1 0x20 SWAP5 DUP6 SWAP1 KECCAK256 DUP5 MLOAD SWAP3 ADD DUP1 SLOAD SWAP6 DUP6 ADD MLOAD PUSH1 0x40 SWAP1 SWAP6 ADD MLOAD DUP5 AND PUSH1 0x1 PUSH1 0xC0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB SWAP6 SWAP1 SWAP5 AND PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP5 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP8 AND SWAP7 SWAP1 SWAP7 OR SWAP3 SWAP1 SWAP3 AND SWAP5 SWAP1 SWAP5 OR SWAP3 SWAP1 SWAP3 AND OR SWAP1 SSTORE PUSH1 0x4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP3 SWAP1 DUP7 AND SWAP2 PUSH2 0x1BC5 SWAP2 PUSH2 0x2203 JUMP JUMPDEST PUSH32 0x81EE0F8C5C46E2CB41984886F77A84181724ABB86C32A5F6DE539B07509D45E5 DUP8 PUSH1 0x40 MLOAD PUSH2 0x1BF4 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x17CAF6F1 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1C71 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1C95 SWAP2 SWAP1 PUSH2 0x287F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x1526FE27 PUSH1 0xE0 SHL DUP2 MSTORE PUSH2 0x1D69 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x1526FE27 SWAP1 PUSH2 0x1D05 SWAP1 PUSH32 0x0 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1D1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1D31 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1D55 SWAP2 SWAP1 PUSH2 0x2815 JUMP JUMPDEST PUSH1 0x20 ADD MLOAD PUSH9 0x56BC75E2D63100000 SWAP1 PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x1D70 JUMPI INVALID JUMPDEST DIV SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x163D JUMPI INVALID JUMPDEST PUSH2 0x1D8B PUSH2 0x2575 JUMP JUMPDEST PUSH2 0x1D94 DUP5 PUSH2 0x1362 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP3 MLOAD DUP2 SLOAD SWAP4 SWAP5 POP SWAP1 SWAP3 PUSH5 0xE8D4A51000 SWAP2 PUSH2 0x1DD0 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0x2179 JUMP JUMPDEST DUP2 PUSH2 0x1DD7 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH1 0x0 PUSH2 0x1DF6 PUSH2 0x8D4 DUP5 PUSH1 0x1 ADD SLOAD DUP5 PUSH2 0x21B6 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x1E31 PUSH5 0xE8D4A51000 PUSH2 0x1E21 DUP7 PUSH1 0x0 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP10 PUSH2 0x2179 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x1E28 JUMPI INVALID JUMPDEST DUP5 SWAP2 SWAP1 DIV PUSH2 0x21B6 JUMP JUMPDEST PUSH1 0x1 DUP5 ADD SSTORE DUP3 SLOAD PUSH2 0x1E42 SWAP1 DUP8 PUSH2 0x2203 JUMP JUMPDEST DUP4 SSTORE PUSH2 0x1E78 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP7 DUP4 PUSH2 0x2226 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x5 DUP9 DUP2 SLOAD DUP2 LT PUSH2 0x1E87 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP1 ISZERO PUSH2 0x1F0C JUMPI DUP4 SLOAD PUSH1 0x40 MLOAD PUSH4 0x45FB1BA1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP2 PUSH4 0x8BF63742 SWAP2 PUSH2 0x1ED9 SWAP2 DUP13 SWAP2 CALLER SWAP2 DUP13 SWAP2 DUP10 SWAP2 SWAP1 PUSH1 0x4 ADD PUSH2 0x2EF2 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1EF3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1F07 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH2 0x1F1E DUP7 DUP9 PUSH1 0x4 DUP12 DUP2 SLOAD DUP2 LT PUSH2 0x7A9 JUMPI INVALID JUMPDEST DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8166BF25F8A2B7ED3C85049207DA4358D16EDBED977D23FA2EE6F0DDE3EC2132 DUP11 PUSH1 0x40 MLOAD PUSH2 0x1F62 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 DUP8 CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x71BAB65CED2E5750775A0613BE067DF48EF06CF92A496EBF7663AE0660924954 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1FA4 SWAP2 SWAP1 PUSH2 0x2EE9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x1FCF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1FF9 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP2 POP DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP1 ISZERO PUSH2 0x2012 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x2046 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x2031 JUMPI SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x213D JUMPI PUSH1 0x0 PUSH1 0x60 ADDRESS DUP9 DUP9 DUP6 DUP2 DUP2 LT PUSH2 0x2065 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0x2077 SWAP2 SWAP1 PUSH2 0x2F69 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x2085 SWAP3 SWAP2 SWAP1 PUSH2 0x299E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x20C0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x20C5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 PUSH2 0x20D4 JUMPI POP DUP6 ISZERO JUMPDEST PUSH2 0x20DD DUP3 PUSH2 0x2515 JUMP JUMPDEST SWAP1 PUSH2 0x20FB JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP2 SWAP1 PUSH2 0x2AF6 JUMP JUMPDEST POP DUP2 DUP6 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2109 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 ISZERO ISZERO SWAP1 DUP2 ISZERO ISZERO DUP2 MSTORE POP POP DUP1 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x2128 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE POP POP PUSH1 0x1 ADD PUSH2 0x204C JUMP JUMPDEST POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0x2194 JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0x2191 JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0x21B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2E4F JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 SUB DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x21CB JUMPI POP DUP4 DUP2 SGT ISZERO JUMPDEST DUP1 PUSH2 0x21E0 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x21E0 JUMPI POP DUP4 DUP2 SGT JUMPDEST PUSH2 0x21FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2DD6 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0x21B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2B09 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x224C SWAP3 SWAP2 SWAP1 PUSH2 0x2A43 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x2285 SWAP2 SWAP1 PUSH2 0x29AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x22C2 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x22C7 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x22F1 JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x22F1 JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x22F1 SWAP2 SWAP1 PUSH2 0x26AF JUMP JUMPDEST PUSH2 0x230D JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2BA0 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 SLT ISZERO PUSH2 0x2336 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2B38 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP2 DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0x21B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x23B872DD DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x2385 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x29DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x23BE SWAP2 SWAP1 PUSH2 0x29AE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x23FB JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2400 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x242A JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x242A JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x242A SWAP2 SWAP1 PUSH2 0x26AF JUMP JUMPDEST PUSH2 0x2446 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2E1A JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 GT ISZERO PUSH2 0x2336 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2C90 JUMP JUMPDEST DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND SWAP1 DUP3 AND LT ISZERO PUSH2 0x21B0 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2CC7 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x2336 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2D68 JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 ADD DUP2 DUP4 SLT DUP1 ISZERO SWAP1 PUSH2 0x24E4 JUMPI POP DUP4 DUP2 SLT ISZERO JUMPDEST DUP1 PUSH2 0x24F9 JUMPI POP PUSH1 0x0 DUP4 SLT DUP1 ISZERO PUSH2 0x24F9 JUMPI POP DUP4 DUP2 SLT JUMPDEST PUSH2 0x21FC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5BE SWAP1 PUSH2 0x2BD7 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x44 DUP3 MLOAD LT ISZERO PUSH2 0x255B JUMPI POP PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x1D DUP2 MSTORE PUSH32 0x5472616E73616374696F6E2072657665727465642073696C656E746C79000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x15D7 JUMP JUMPDEST PUSH1 0x4 DUP3 ADD SWAP2 POP DUP2 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x21B0 SWAP2 SWAP1 PUSH2 0x278A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x25A6 JUMPI DUP2 DUP3 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x25BC JUMPI DUP2 DUP3 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x25D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x25F1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x25FC DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x260C DUP2 PUSH2 0x3017 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x261C DUP2 PUSH2 0x3017 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x263B JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2650 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x265C DUP7 DUP3 DUP8 ADD PUSH2 0x2595 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x261C DUP2 PUSH2 0x3017 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2682 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2697 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH2 0x26A3 DUP6 DUP3 DUP7 ADD PUSH2 0x2595 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26C0 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x21FC DUP2 PUSH2 0x3017 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26DC JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x21FC DUP2 PUSH2 0x2FFF JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26F8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x21FC DUP2 PUSH2 0x2FFF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 DUP10 DUP12 SUB SLT ISZERO PUSH2 0x271F JUMPI DUP4 DUP5 REVERT JUMPDEST DUP9 CALLDATALOAD PUSH2 0x272A DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP8 POP PUSH1 0x20 DUP10 ADD CALLDATALOAD PUSH2 0x273A DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP7 POP PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x274A DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP6 POP PUSH1 0x60 DUP10 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 DUP10 ADD CALLDATALOAD SWAP4 POP PUSH1 0xA0 DUP10 ADD CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 EQ PUSH2 0x276D JUMPI DUP4 DUP5 REVERT JUMPDEST SWAP8 SWAP11 SWAP7 SWAP10 POP SWAP5 SWAP8 SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0xC0 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0xE0 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x279B JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x27B1 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 DUP5 ADD SWAP2 POP DUP5 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x27C4 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP2 MLOAD DUP2 DUP2 GT ISZERO PUSH2 0x27D2 JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x27E5 PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x2FAD JUMP JUMPDEST SWAP2 POP DUP1 DUP3 MSTORE DUP6 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x27FB JUMPI DUP4 DUP5 REVERT JUMPDEST PUSH2 0x280C DUP2 PUSH1 0x20 DUP5 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2FD3 JUMP JUMPDEST POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2826 JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2830 PUSH1 0x80 PUSH2 0x2FAD JUMP JUMPDEST DUP3 MLOAD PUSH2 0x283B DUP2 PUSH2 0x2FFF JUMP JUMPDEST DUP1 DUP3 MSTORE POP PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2878 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2890 JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x28A9 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x28BB DUP2 PUSH2 0x2FFF JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x28DA JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x28EC DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x261C DUP2 PUSH2 0x2FFF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2910 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x261C DUP2 PUSH2 0x2FFF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x293E JUMPI DUP2 DUP3 REVERT JUMPDEST DUP5 CALLDATALOAD SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH2 0x2957 DUP2 PUSH2 0x2FFF JUMP JUMPDEST SWAP2 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH2 0x2967 DUP2 PUSH2 0x3017 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x298A DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x29C0 DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x2FD3 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND DUP2 MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 DUP9 AND DUP2 MSTORE SWAP6 SWAP1 SWAP7 AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x60 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xFF AND PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0xE0 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP4 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x60 DUP5 ADD SWAP1 DUP3 DUP8 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2A97 JUMPI DUP2 MLOAD ISZERO ISZERO DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2A79 JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE DUP1 DUP6 MLOAD PUSH2 0x2AAE DUP2 DUP5 PUSH2 0x2EE9 JUMP JUMPDEST SWAP2 POP DUP2 SWAP3 POP DUP4 DUP2 MUL DUP3 ADD DUP5 DUP9 ADD DUP7 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2AE7 JUMPI DUP6 DUP4 SUB DUP6 MSTORE PUSH2 0x2AD5 DUP4 DUP4 MLOAD PUSH2 0x2972 JUMP JUMPDEST SWAP5 DUP8 ADD SWAP5 SWAP3 POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2ABD JUMP JUMPDEST POP SWAP1 SWAP10 SWAP9 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 MSTORE PUSH2 0x21FC PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x2972 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x426F72696E674D6174683A20556E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0xB SWAP1 DUP3 ADD MSTORE PUSH11 0x496E7465676572203C203 PUSH1 0xAC SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x23 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D61737465724368656656323A2042616C616E6365206D757374206578636565 PUSH1 0x40 DUP3 ADD MSTORE PUSH3 0x64203 PUSH1 0xEC SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E6745524332303A205472616E73666572206661696C656400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A206164646974696F6E206F766572666C6F PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x77 PUSH1 0xF8 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x4F776E61626C653A207A65726F2061646472657373 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x29 SWAP1 DUP3 ADD MSTORE PUSH32 0x4D61737465724368656656323A206D696772617465642062616C616E6365206D PUSH1 0x40 DUP3 ADD MSTORE PUSH9 0xEAE6E840DAC2E8C6D PUSH1 0xBB SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A2075696E74313238204F766572666C6F7700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20416464204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C657220213D2070656E64696E67206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A2075696E743634204F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1D SWAP1 DUP3 ADD MSTORE PUSH32 0x4D61737465724368656656323A206E6F206D69677261746F7220736574000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x24 SWAP1 DUP3 ADD MSTORE PUSH32 0x5369676E6564536166654D6174683A207375627472616374696F6E206F766572 PUSH1 0x40 DUP3 ADD MSTORE PUSH4 0x666C6F77 PUSH1 0xE0 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x426F72696E6745524332303A205472616E7366657246726F6D206661696C6564 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A204D756C204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP3 DUP4 ADD MLOAD AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x20 DUP7 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x2F7F JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x2F98 JUMPI DUP3 DUP4 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x25D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2FCB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2FEE JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2FD6 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x135C JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x3014 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x3014 JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP2 0x4E 0x5D REVERT 0xEE PUSH1 0x6B SWAP16 0xF8 CALLDATALOAD PUSH27 0x8C99C275BC5BEE65FD89E04F2E557682DA8CCC9F4264736F6C6343 STOP MOD 0xC STOP CALLER ", + "sourceMap": "1098:13971:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;774:472:1;;;;;;;;;;-1:-1:-1;774:472:1;;;;;:::i;:::-;;:::i;:::-;;4876:98:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11235:670;;;;;;;;;;-1:-1:-1;11235:670:5;;;;;:::i;:::-;;:::i;2289:26::-;;;;;;;;;;-1:-1:-1;2289:26:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;2728:30::-;;;;;;;;;;;;;:::i;12079:788::-;;;;;;;;;;-1:-1:-1;12079:788:5;;;;;:::i;:::-;;:::i;7716:792::-;;;;;;;;;;-1:-1:-1;7716:792:5;;;;;:::i;:::-;;:::i;4435:385::-;;;;;;;;;;-1:-1:-1;4435:385:5;;;;;:::i;:::-;;:::i;6766:100::-;;;;;;;;;;-1:-1:-1;6766:100:5;;;;;:::i;:::-;;:::i;14506:561::-;;;;;;;;;;-1:-1:-1;14506:561:5;;;;;:::i;:::-;;:::i;7020:474::-;;;;;;;;;;-1:-1:-1;7020:474:5;;;;;:::i;:::-;;:::i;1295:348:1:-;;;;;;;;;;;;;:::i;14235:91:5:-;;;;;;;;;;;;;:::i;9348:772::-;;;;;;;;;;-1:-1:-1;9348:772:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8686:188::-;;;;;;;;;;-1:-1:-1;8686:188:5;;;;;:::i;:::-;;:::i;2067:35::-;;;;;;;;;;;;;:::i;2381:23::-;;;;;;;;;;-1:-1:-1;2381:23:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2161:246:0:-;;;;;;;;;;-1:-1:-1;2161:246:0;;;;;:::i;:::-;;:::i;2213:29:5:-;;;;;;;;;;;;;:::i;6222:406::-;;;;;;;;;;-1:-1:-1;6222:406:5;;;;;:::i;:::-;;:::i;350:20:1:-;;;;;;;;;;;;;:::i;10358:671:5:-;;;;;;;;;;-1:-1:-1;10358:671:5;;;;;:::i;:::-;;:::i;2563:66::-;;;;;;;;;;-1:-1:-1;2563:66:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1977:29::-;;;;;;;;;;;;;:::i;5306:529::-;;;;;;;;;;-1:-1:-1;5306:529:5;;;;;:::i;:::-;;:::i;8952:217::-;;;;;;;;;;;;;:::i;2472:27::-;;;;;;;;;;-1:-1:-1;2472:27:5;;;;;:::i;:::-;;:::i;13147:982::-;;;;;;;;;;-1:-1:-1;13147:982:5;;;;;:::i;:::-;;:::i;1260:554:0:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;397:27:1:-;;;;;;;;;;;;;:::i;1888:40:5:-;;;;;;;;;;;;;:::i;774:472:1:-;1746:5;;-1:-1:-1;;;;;1746:5:1;1732:10;:19;1724:64;;;;-1:-1:-1;;;1724:64:1;;;;;;;:::i;:::-;;;;;;;;;879:6:::1;875:364;;;-1:-1:-1::0;;;;;933:22:1;::::1;::::0;::::1;::::0;:34:::1;;;959:8;933:34;925:68;;;;-1:-1:-1::0;;;925:68:1::1;;;;;;;:::i;:::-;1060:5;::::0;;1039:37:::1;::::0;-1:-1:-1;;;;;1039:37:1;;::::1;::::0;1060:5;::::1;::::0;1039:37:::1;::::0;::::1;1091:5;:16:::0;;-1:-1:-1;;;;;1091:16:1;::::1;-1:-1:-1::0;;;;;;1091:16:1;;::::1;;::::0;;;;1122:25;;;;::::1;::::0;;875:364:::1;;;1204:12;:23:::0;;-1:-1:-1;;;;;;1204:23:1::1;-1:-1:-1::0;;;;;1204:23:1;::::1;;::::0;;875:364:::1;774:472:::0;;;:::o;4876:98:5:-;4952:8;:15;;4876:98::o;11235:670::-;11311:20;;:::i;:::-;11334:15;11345:3;11334:10;:15::i;:::-;11359:21;11383:13;;;:8;:13;;;;;;;;11397:10;11383:25;;;;;;;11494:21;;11311:38;;-1:-1:-1;11383:25:5;11456:84;;2876:4;;11483:33;;:6;;-1:-1:-1;;;;;11483:33:5;:10;:33::i;:::-;:55;;;;;11456:15;;;;;11483:55;;11456:19;:84::i;:::-;11438:15;;;:102;11564:11;;:23;;11580:6;11564:15;:23::i;:::-;11550:37;;11644:8;:13;;11550:11;;11644:8;11653:3;;11644:13;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11644:13:5;;-1:-1:-1;11671:32:5;;11667:123;;11767:11;;11719:60;;-1:-1:-1;;;11719:60:5;;-1:-1:-1;;;;;11719:23:5;;;;;:60;;11743:3;;11748:10;;11760:2;;11764:1;;11767:11;11719:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11667:123;11808:37;11834:2;11838:6;11808:7;11816:3;11808:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11808:12:5;;:37;:25;:37::i;:::-;11895:2;-1:-1:-1;;;;;11861:37:5;11882:3;11870:10;-1:-1:-1;;;;;11861:37:5;;11887:6;11861:37;;;;;;:::i;:::-;;;;;;;;11235:670;;;;;;:::o;2289:26::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2289:26:5;;;-1:-1:-1;;;;;;;;;2289:26:5;;;;;-1:-1:-1;;;2289:26:5;;;;:::o;2728:30::-;;;;:::o;12079:788::-;12138:20;;:::i;:::-;12161:15;12172:3;12161:10;:15::i;:::-;12186:21;12210:13;;;:8;:13;;;;;;;;12224:10;12210:25;;;;;;;12294:21;;12278:11;;12138:38;;-1:-1:-1;12210:25:5;;2876:4;;12278:38;;:11;-1:-1:-1;;;;;12278:38:5;:15;:38::i;:::-;:60;;;;;;12245:94;;12349:21;12373:49;:37;12394:4;:15;;;12373:16;:20;;:37;;;;:::i;:::-;:47;:49::i;:::-;12452:15;;;:34;;;12349:73;-1:-1:-1;12525:18:5;;12521:86;;12559:37;-1:-1:-1;;;;;12559:5:5;:18;12578:2;12582:13;12559:18;:37::i;:::-;12625:19;12647:8;12656:3;12647:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12647:13:5;;-1:-1:-1;12674:32:5;;12670:136;;12783:11;;12722:73;;-1:-1:-1;;;12722:73:5;;-1:-1:-1;;;;;12722:23:5;;;;;:73;;12747:3;;12752:10;;12764:2;;12768:13;;12783:11;12722:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12670:136;12841:3;12829:10;-1:-1:-1;;;;;12821:39:5;;12846:13;12821:39;;;;;;:::i;:::-;;;;;;;;12079:788;;;;;;;:::o;7716:792::-;7790:15;7817:20;;:::i;:::-;7840:8;7849:4;7840:14;;;;;;;;;;;;;;;;7817:37;;;;;;;;7840:14;;;;7817:37;-1:-1:-1;;;;;7817:37:5;;;;;-1:-1:-1;;;;;;;;7817:37:5;;;;;;;;-1:-1:-1;;;7817:37:5;;;;;;;;;;7888:14;;;:8;:14;;;;;-1:-1:-1;;;;;7888:21:5;;;;;;;;;;7946;;7996:7;:13;;7817:37;;-1:-1:-1;7888:21:5;;7919:48;;;7897:4;;7996:13;;;;;;;;;;;;;;;;:38;;-1:-1:-1;;;7996:38:5;;-1:-1:-1;;;;;7996:13:5;;;;:23;;:38;;8028:4;;7996:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7977:57;;8063:4;:20;;;-1:-1:-1;;;;;8048:35:5;:12;:35;:52;;;;-1:-1:-1;8087:13:5;;;8048:52;8044:342;;;8116:14;8133:38;8150:4;:20;;;-1:-1:-1;;;;;8133:38:5;:12;:16;;:38;;;;:::i;:::-;8116:55;;8185:19;8258:15;;8207:48;8239:4;:15;;;-1:-1:-1;;;;;8207:48:5;:27;8218:15;:13;:15::i;:::-;8207:6;;:10;:27::i;:::-;:31;;:48::i;:::-;:66;;;;;;;-1:-1:-1;8306:69:5;8366:8;8327:36;8207:66;2876:4;8327:15;:36::i;:::-;:47;;;;;8306:16;;8327:47;;8306:20;:69::i;:::-;8287:88;;8044:342;;;8473:15;;;;8412:11;;8405:96;;:84;;2876:4;;8412:33;;8428:16;8412:15;:33::i;:::-;:55;;;;;;;8405:67;:84::i;:96::-;8395:106;7716:792;-1:-1:-1;;;;;;;7716:792:5:o;4435:385::-;4505:32;;-1:-1:-1;;;4505:32:5;;4487:15;;-1:-1:-1;;;;;4505:20:5;;;;;:32;;4526:10;;4505:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4487:50;-1:-1:-1;4555:12:5;4547:60;;;;-1:-1:-1;;;4547:60:5;;;;;;;:::i;:::-;4617:63;-1:-1:-1;;;;;4617:27:5;;4645:10;4665:4;4672:7;4617:27;:63::i;:::-;4690:49;;-1:-1:-1;;;4690:49:5;;-1:-1:-1;;;;;4690:18:5;;;;;:49;;4717:11;;4731:7;;4690:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4749:40:5;;-1:-1:-1;;;4749:40:5;;-1:-1:-1;;;;;4749:11:5;:19;;;;:40;;4769:10;;4781:7;;4749:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4804:9:5;;;;-1:-1:-1;4804:9:5;;-1:-1:-1;4804:9:5;4435:385;;:::o;6766:100::-;1746:5:1;;-1:-1:-1;;;;;1746:5:1;1732:10;:19;1724:64;;;;-1:-1:-1;;;1724:64:1;;;;;;;:::i;:::-;6839:8:5::1;:20:::0;;-1:-1:-1;;;;;;6839:20:5::1;-1:-1:-1::0;;;;;6839:20:5;;;::::1;::::0;;;::::1;::::0;;6766:100::o;14506:561::-;14575:21;14599:13;;;:8;:13;;;;;;;;14613:10;14599:25;;;;;;;14651:11;;14672:15;;;-1:-1:-1;14697:15:5;;:19;;;14749:8;:13;;14599:25;;14651:11;;14608:3;;14749:13;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14749:13:5;;-1:-1:-1;14776:32:5;;14772:113;;14824:50;;-1:-1:-1;;;14824:50:5;;-1:-1:-1;;;;;14824:23:5;;;;;:50;;14848:3;;14853:10;;14865:2;;14869:1;;;;14824:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14772:113;14962:37;14988:2;14992:6;14962:7;14970:3;14962:12;;;;;;;:37;15057:2;-1:-1:-1;;;;;15014:46:5;15044:3;15032:10;-1:-1:-1;;;;;15014:46:5;;15049:6;15014:46;;;;;;:::i;:::-;;;;;;;;14506:561;;;;;:::o;7020:474::-;7084:8;;-1:-1:-1;;;;;7084:8:5;7068:73;;;;-1:-1:-1;;;7068:73:5;;;;;;;:::i;:::-;7151:15;7169:7;7177:4;7169:13;;;;;;;;;;;;;;;;;7206:33;;-1:-1:-1;;;7206:33:5;;-1:-1:-1;;;;;7169:13:5;;;;-1:-1:-1;7169:13:5;;7206:18;;:33;;7233:4;;7206:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7274:8;;7249:40;;-1:-1:-1;;;7249:40:5;;7192:47;;-1:-1:-1;;;;;;7249:16:5;;;;;;:40;;7274:8;;7192:47;;7249:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7319:8:5;;:26;;-1:-1:-1;;;7319:26:5;;7299:17;;-1:-1:-1;;;;;7319:8:5;;:16;;:26;;7336:8;;7319:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7370:35;;-1:-1:-1;;;7370:35:5;;7299:46;;-1:-1:-1;;;;;;7370:20:5;;;;;:35;;7399:4;;7370:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7363:3;:42;7355:96;;;;-1:-1:-1;;;7355:96:5;;;;;;;:::i;:::-;7477:10;7461:7;7469:4;7461:13;;;;;;;;;;;;;;;;:26;;;;;-1:-1:-1;;;;;7461:26:5;;;;;-1:-1:-1;;;;;7461:26:5;;;;;;7020:474;;;;:::o;1295:348:1:-;1363:12;;-1:-1:-1;;;;;1363:12:1;1423:10;:27;;1415:72;;;;-1:-1:-1;;;1415:72:1;;;;;;;:::i;:::-;1546:5;;;1525:42;;-1:-1:-1;;;;;1525:42:1;;;;1546:5;;;1525:42;;;1578:5;:21;;-1:-1:-1;;;;;1578:21:1;;;-1:-1:-1;;;;;;1578:21:1;;;;;;;1610:25;;;;;;;1295:348::o;14235:91:5:-;14285:34;;-1:-1:-1;;;14285:34:5;;-1:-1:-1;;;;;14285:11:5;:19;;;;:34;;14305:10;;14317:1;;14285:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14235:91::o;9348:772::-;9397:20;;:::i;:::-;9436:8;9445:3;9436:13;;;;;;;;;;;;;;;;;9429:20;;;;;;;;9436:13;;;;9429:20;-1:-1:-1;;;;;9429:20:5;;;;-1:-1:-1;;;;;;;;9429:20:5;;;;;;;;;;-1:-1:-1;;;9429:20:5;;;;;;;;;-1:-1:-1;9463:12:5;:35;9459:655;;;9514:16;9533:7;9541:3;9533:12;;;;;;;;;;;;;;;;;;:37;;-1:-1:-1;;;9533:37:5;;-1:-1:-1;;;;;9533:12:5;;;;:22;;:37;;9564:4;;9533:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9514:56;-1:-1:-1;9588:12:5;;9584:338;;9620:14;9637:38;9654:4;:20;;;-1:-1:-1;;;;;9637:38:5;:12;:16;;:38;;;;:::i;:::-;9620:55;;9693:19;9766:15;;9715:48;9747:4;:15;;;-1:-1:-1;;;;;9715:48:5;:27;9726:15;:13;:15::i;9715:48::-;:66;;;;;;;-1:-1:-1;9823:84:5;9849:57;9889:8;9850:36;9715:66;2876:4;9850:15;:36::i;:::-;:47;;;;;;9849:55;:57::i;:::-;9823:21;;-1:-1:-1;;;;;9823:25:5;;;:84::i;:::-;-1:-1:-1;;;;;9799:108:5;;;-1:-1:-1;;9584:338:5;9958:19;:12;:17;:19::i;:::-;-1:-1:-1;;;;;9935:42:5;:20;;;:42;9991:8;:13;;9935:4;;9991:8;10000:3;;9991:13;;;;;;;;;;;;;;;:20;;:13;;:20;;;;;;;;;;;-1:-1:-1;;;;;;9991:20:5;;;-1:-1:-1;;;;;9991:20:5;;;;;;;-1:-1:-1;;;;9991:20:5;-1:-1:-1;;;;;;;;9991:20:5;;;;;-1:-1:-1;;;;;9991:20:5;-1:-1:-1;;;9991:20:5;;;;;;;;;;;;;;10049;;;10081:21;;10030:73;;10044:3;;10030:73;;;;10049:20;;10071:8;;10030:73;:::i;:::-;;;;;;;;9459:655;;9348:772;;;:::o;8686:188::-;8769:4;8755:11;8790:78;8814:3;8810:1;:7;8790:78;;;8838:19;8849:4;;8854:1;8849:7;;;;;;;;;;;;;8838:10;:19::i;:::-;-1:-1:-1;8819:3:5;;8790:78;;2067:35;;;:::o;2381:23::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2381:23:5;;-1:-1:-1;2381:23:5;:::o;2161:246:0:-;2350:49;;-1:-1:-1;;;2350:49:0;;-1:-1:-1;;;;;2350:12:0;;;;;:49;;2363:4;;2369:2;;2373:6;;2381:8;;2391:1;;2394;;2397;;2350:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2161:246;;;;;;;;:::o;2213:29:5:-;;;-1:-1:-1;;;;;2213:29:5;;:::o;6222:406::-;1746:5:1;;-1:-1:-1;;;;;1746:5:1;1732:10;:19;1724:64;;;;-1:-1:-1;;;1724:64:1;;;;;;;:::i;:::-;6352:63:5::1;6403:11;6352:46;6372:8;6381:4;6372:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;:25:::0;6352:15:::1;::::0;;-1:-1:-1;;;6372:25:5;::::1;-1:-1:-1::0;;;;;6372:25:5::1;6352:19;:46::i;:::-;:50:::0;::::1;:63::i;:::-;6334:15;:81:::0;6453:18:::1;:11:::0;:16:::1;:18::i;:::-;6425:8;6434:4;6425:14;;;;;;;;;;;;;;;:25;;;:46;;;;;-1:-1:-1::0;;;;;6425:46:5::1;;;;;-1:-1:-1::0;;;;;6425:46:5::1;;;;;;6485:9;6481:46;;;6515:9;6498:8;6507:4;6498:14;;;;;;;;;;;;;;;;:26;;;;;-1:-1:-1::0;;;;;6498:26:5::1;;;;;-1:-1:-1::0;;;;;6498:26:5::1;;;;;;6481:46;6571:9;:38;;6595:8;6604:4;6595:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;6595:14:5::1;6571:38;;;6583:9;6571:38;-1:-1:-1::0;;;;;6541:80:5::1;6552:4;6541:80;6558:11;6611:9;6541:80;;;;;;;:::i;:::-;;;;;;;;6222:406:::0;;;;:::o;350:20:1:-;;;-1:-1:-1;;;;;350:20:1;;:::o;10358:671:5:-;10433:20;;:::i;:::-;10456:15;10467:3;10456:10;:15::i;:::-;10481:21;10505:13;;;:8;:13;;;;;;;;-1:-1:-1;;;;;10505:17:5;;;;;;;;;10566:11;;10433:38;;-1:-1:-1;10505:17:5;10566:23;;10582:6;10566:15;:23::i;:::-;10552:37;;10655:21;;10617:84;;2876:4;;10644:33;;:6;;-1:-1:-1;;;;;10644:33:5;:10;:33::i;:::-;:55;;;;;10617:15;;;;;10644:55;;10617:19;:84::i;:::-;10599:4;:15;;:102;;;;10736:19;10758:8;10767:3;10758:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10758:13:5;;-1:-1:-1;10785:32:5;;10781:115;;10873:11;;10833:52;;-1:-1:-1;;;10833:52:5;;-1:-1:-1;;;;;10833:23:5;;;;;:52;;10857:3;;10862:2;;;;10870:1;;10873:11;10833:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10781:115;10906:64;10936:10;10956:4;10963:6;10906:7;10914:3;10906:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10906:12:5;;:64;;:29;:64::i;:::-;11019:2;-1:-1:-1;;;;;10986:36:5;11006:3;10994:10;-1:-1:-1;;;;;10986:36:5;;11011:6;10986:36;;;;;;:::i;2563:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1977:29::-;;;:::o;5306:529::-;1746:5:1;;-1:-1:-1;;;;;1746:5:1;1732:10;:19;1724:64;;;;-1:-1:-1;;;1724:64:1;;;;;;;:::i;:::-;5470:15:5::1;::::0;5430:12:::1;::::0;5470:31:::1;::::0;5490:10;5470:19:::1;:31::i;:::-;5452:15;:49:::0;5511:7:::1;:22:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;5511:22:5;;::::1;-1:-1:-1::0;;;;;;5511:22:5;;::::1;;::::0;;;5543:8:::1;:24:::0;;;;::::1;::::0;;-1:-1:-1;5543:24:5;;;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;5592:149:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;;5511:22:5::1;5592:149:::0;::::1;5675:22;:15:::0;:20:::1;:22::i;:::-;-1:-1:-1::0;;;;;5592:149:5::1;;;;;5627:17;:10;:15;:17::i;:::-;-1:-1:-1::0;;;;;5592:149:5;;::::1;::::0;;;5578:164;;::::1;::::0;;::::1;::::0;;-1:-1:-1;5578:164:5;;;::::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;5578:164:5::1;-1:-1:-1::0;;;;;5578:164:5;;;::::1;-1:-1:-1::0;;;5578:164:5::1;-1:-1:-1::0;;;;;;;;;5578:164:5;;::::1;-1:-1:-1::0;;;;;;5578:164:5;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;5773:7:::1;:14:::0;-1:-1:-1;;;;;5757:71:5;;::::1;::::0;;;::::1;::::0;5773:21:::1;::::0;:18:::1;:21::i;:::-;5757:71;5796:10;5757:71;;;;;;:::i;:::-;;;;;;;;1799:1:1;5306:529:5::0;;;:::o;8952:217::-;8998:14;9133:11;-1:-1:-1;;;;;9133:27:5;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9086:32;;-1:-1:-1;;;9086:32:5;;9033:97;;-1:-1:-1;;;;;9086:11:5;:20;;;;:32;;9107:10;;9086:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;2819:4;;9033:52;:97::i;:::-;:129;;;;;;9024:138;;8952:217;:::o;2472:27::-;;;;;;;;;;13147:982;13233:20;;:::i;:::-;13256:15;13267:3;13256:10;:15::i;:::-;13281:21;13305:13;;;:8;:13;;;;;;;;13319:10;13305:25;;;;;;;13389:21;;13373:11;;13233:38;;-1:-1:-1;13305:25:5;;2876:4;;13373:38;;:11;-1:-1:-1;;;;;13373:38:5;:15;:38::i;:::-;:60;;;;;;13340:94;;13444:21;13468:49;:37;13489:4;:15;;;13468:16;:20;;:37;;;;:::i;:49::-;13444:73;;13565:85;2876:4;13593:33;13604:4;:21;;;-1:-1:-1;;;;;13593:33:5;:6;:10;;:33;;;;:::i;:::-;:55;;;;;13565:16;;13593:55;;13565:20;:85::i;:::-;13547:15;;;:103;13674:11;;:23;;13690:6;13674:15;:23::i;:::-;13660:37;;13740;-1:-1:-1;;;;;13740:5:5;:18;13759:2;13763:13;13740:18;:37::i;:::-;13788:19;13810:8;13819:3;13810:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13810:13:5;;-1:-1:-1;13837:32:5;;13833:135;;13945:11;;13885:72;;-1:-1:-1;;;13885:72:5;;-1:-1:-1;;;;;13885:23:5;;;;;:72;;13909:3;;13914:10;;13926:2;;13930:13;;13945:11;13885:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13833:135;13978:37;14004:2;14008:6;13978:7;13986:3;13978:12;;;;;;;:37;14065:2;-1:-1:-1;;;;;14031:37:5;14052:3;14040:10;-1:-1:-1;;;;;14031:37:5;;14057:6;14031:37;;;;;;:::i;:::-;;;;;;;;14103:3;14091:10;-1:-1:-1;;;;;14083:39:5;;14108:13;14083:39;;;;;;:::i;:::-;;;;;;;;13147:982;;;;;;;;:::o;1260:554:0:-;1343:23;;1451:5;-1:-1:-1;;;;;1440:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1440:24:0;-1:-1:-1;1428:36:0;-1:-1:-1;1497:5:0;-1:-1:-1;;;;;1485:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1475:35;;1526:9;1521:286;1541:16;;;1521:286;;;1580:12;1594:19;1625:4;1644:5;;1650:1;1644:8;;;;;;;;;;;;;;;;;;:::i;:::-;1617:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1579:74;;;;1676:7;:24;;;;1688:12;1687:13;1676:24;1702:21;1716:6;1702:13;:21::i;:::-;1668:56;;;;;-1:-1:-1;;;1668:56:0;;;;;;;;:::i;:::-;;1754:7;1739:9;1749:1;1739:12;;;;;;;;;;;;;:22;;;;;;;;;;;1789:6;1776:7;1784:1;1776:10;;;;;;;;;;;;;;;;;:19;-1:-1:-1;;1559:3:0;;1521:286;;;;1260:554;;;;;;:::o;397:27:1:-;;;-1:-1:-1;;;;;397:27:1;;:::o;1888:40:5:-;;;:::o;470:137:4:-;528:9;548:6;;;:28;;-1:-1:-1;;563:5:4;;;575:1;570;563:5;570:1;558:13;;;;;:18;548:28;540:65;;;;-1:-1:-1;;;540:65:4;;;;;;;:::i;:::-;470:137;;;;:::o;1895:213:8:-;1951:6;1980:5;;;2004:6;;;;;;:16;;;2019:1;2014;:6;;2004:16;2003:38;;;;2030:1;2026;:5;:14;;;;;2039:1;2035;:5;2026:14;1995:87;;;;-1:-1:-1;;;1995:87:8;;;;;;;:::i;:::-;2100:1;1895:213;-1:-1:-1;;;1895:213:8:o;342:122:4:-;425:5;;;420:16;;;;412:50;;;;-1:-1:-1;;;412:50:4;;;;;;;:::i;951:304:3:-;1036:12;1050:17;1079:5;-1:-1:-1;;;;;1071:19:3;1114:10;1126:2;1130:6;1091:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1091:46:3;;;;;;;;;;;1071:67;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1035:103;;;;1157:7;:57;;;;-1:-1:-1;1169:11:3;;:16;;:44;;;1200:4;1189:24;;;;;;;;;;;;:::i;:::-;1149:98;;;;-1:-1:-1;;;1149:98:3;;;;;;;:::i;:::-;951:304;;;;;:::o;2557:135:8:-;2609:7;2641:1;2636;:6;;2628:30;;;;-1:-1:-1;;;2628:30:8;;;;;;;:::i;:::-;-1:-1:-1;2683:1:8;2557:135::o;211:125:4:-;294:5;;;289:16;;;;281:53;;;;-1:-1:-1;;;281:53:4;;;;;;;:::i;1263:332:3:-;1366:12;1380:17;1409:5;-1:-1:-1;;;;;1401:19:3;1444:10;1456:4;1462:2;1466:6;1421:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1421:52:3;;;;;;;;;;;1401:73;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1365:109;;;;1493:7;:57;;;;-1:-1:-1;1505:11:3;;:16;;:44;;;1536:4;1525:24;;;;;;;;;;;;:::i;:::-;1485:102;;;;-1:-1:-1;;;1485:102:3;;;;;;;:::i;:::-;1263:332;;;;;;:::o;613:161:4:-;662:9;-1:-1:-1;;;;;692:16:4;;;684:57;;;;-1:-1:-1;;;684:57:4;;;;;;;:::i;1134:125::-;1217:5;;;-1:-1:-1;;;;;1212:16:4;;;;;;;;1204:53;;;;-1:-1:-1;;;1204:53:4;;;;;;;:::i;780:156::-;828:8;-1:-1:-1;;;;;857:15:4;;;849:55;;;;-1:-1:-1;;;849:55:4;;;;;;;:::i;2341:210:8:-;2397:6;2426:5;;;2450:6;;;;;;:16;;;2465:1;2460;:6;;2450:16;2449:38;;;;2476:1;2472;:5;:14;;;;;2485:1;2481;:5;2472:14;2441:84;;;;-1:-1:-1;;;2441:84:8;;;;;;;:::i;304:496:0:-;376:13;539:2;518:11;:18;:23;514:67;;;-1:-1:-1;543:38:0;;;;;;;;;;;;;;;;;;;514:67;685:4;672:11;668:22;653:37;;729:11;718:33;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;158:363::-;;;299:3;292:4;284:6;280:17;276:27;266:2;;-1:-1;;307:12;266:2;-1:-1;337:20;;-1:-1;;;;;366:30;;363:2;;;-1:-1;;399:12;363:2;443:4;435:6;431:17;419:29;;494:3;443:4;;478:6;474:17;435:6;460:32;;457:41;454:2;;;511:1;;501:12;454:2;259:262;;;;;:::o;3758:479::-;;;;3890:2;3878:9;3869:7;3865:23;3861:32;3858:2;;;-1:-1;;3896:12;3858:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3948:63;-1:-1;4048:2;4084:22;;971:20;996:30;971:20;996:30;:::i;:::-;4056:60;-1:-1;4153:2;4189:22;;971:20;996:30;971:20;996:30;:::i;:::-;4161:60;;;;3852:385;;;;;:::o;4244:538::-;;;;4408:2;4396:9;4387:7;4383:23;4379:32;4376:2;;;-1:-1;;4414:12;4376:2;4472:17;4459:31;-1:-1;;;;;4502:6;4499:30;4496:2;;;-1:-1;;4532:12;4496:2;4570:91;4653:7;4644:6;4633:9;4629:22;4570:91;:::i;:::-;4552:109;;-1:-1;4552:109;-1:-1;;4698:2;4734:22;;971:20;996:30;971:20;996:30;:::i;4789:397::-;;;4928:2;4916:9;4907:7;4903:23;4899:32;4896:2;;;-1:-1;;4934:12;4896:2;4992:17;4979:31;-1:-1;;;;;5022:6;5019:30;5016:2;;;-1:-1;;5052:12;5016:2;5090:80;5162:7;5153:6;5142:9;5138:22;5090:80;:::i;:::-;5072:98;;;;-1:-1;4890:296;-1:-1;;;;4890:296::o;5193:257::-;;5305:2;5293:9;5284:7;5280:23;5276:32;5273:2;;;-1:-1;;5311:12;5273:2;1119:6;1113:13;1131:30;1155:5;1131:30;:::i;5457:269::-;;5575:2;5563:9;5554:7;5550:23;5546:32;5543:2;;;-1:-1;;5581:12;5543:2;1404:6;1391:20;1416:47;1457:5;1416:47;:::i;5733:291::-;;5862:2;5850:9;5841:7;5837:23;5833:32;5830:2;;;-1:-1;;5868:12;5830:2;1573:6;1567:13;1585:47;1626:5;1585:47;:::i;6031:1145::-;;;;;;;;;6266:3;6254:9;6245:7;6241:23;6237:33;6234:2;;;-1:-1;;6273:12;6234:2;1404:6;1391:20;1416:47;1457:5;1416:47;:::i;:::-;6325:77;-1:-1;6439:2;6478:22;;72:20;97:33;72:20;97:33;:::i;:::-;6447:63;-1:-1;6547:2;6586:22;;72:20;97:33;72:20;97:33;:::i;:::-;6555:63;-1:-1;6655:2;6694:22;;3414:20;;-1:-1;6763:3;6803:22;;3414:20;;-1:-1;6872:3;6910:22;;3690:20;44255:4;44244:16;;47641:33;;47631:2;;-1:-1;;47678:12;47631:2;6228:948;;;;-1:-1;6228:948;;;;;;6881:61;;-1:-1;;;6979:3;7019:22;;1240:20;;7088:3;7128:22;1240:20;;6228:948::o;7473:362::-;;7598:2;7586:9;7577:7;7573:23;7569:32;7566:2;;;-1:-1;;7604:12;7566:2;7655:17;7649:24;-1:-1;;;;;7693:18;7685:6;7682:30;7679:2;;;-1:-1;;7715:12;7679:2;7802:6;7791:9;7787:22;;;2110:3;2103:4;2095:6;2091:17;2087:27;2077:2;;-1:-1;;2118:12;2077:2;2158:6;2152:13;7693:18;40892:6;40889:30;40886:2;;;-1:-1;;40922:12;40886:2;2180:65;40995:9;40976:17;;-1:-1;;40972:33;7598:2;41053:15;2180:65;:::i;:::-;2171:74;;2265:6;2258:5;2251:21;2369:3;7598:2;2360:6;2293;2351:16;;2348:25;2345:2;;;-1:-1;;2376:12;2345:2;2396:39;2428:6;7598:2;2327:5;2323:16;7598:2;2293:6;2289:17;2396:39;:::i;:::-;-1:-1;7735:84;7560:275;-1:-1;;;;7560:275::o;7842:316::-;;7983:3;7971:9;7962:7;7958:23;7954:33;7951:2;;;-1:-1;;7990:12;7951:2;2645:20;7983:3;2645:20;:::i;:::-;1573:6;1567:13;1585:47;1626:5;1585:47;:::i;:::-;2750:74;2732:16;2725:100;;2892:2;2961:9;2957:22;3562:13;2892:2;2911:5;2907:16;2900:86;3058:2;3127:9;3123:22;3562:13;3058:2;3077:5;3073:16;3066:86;3225:2;3294:9;3290:22;3562:13;3225:2;3244:5;3240:16;3233:86;8042:100;;;;7945:213;;;;:::o;8165:241::-;;8269:2;8257:9;8248:7;8244:23;8240:32;8237:2;;;-1:-1;;8275:12;8237:2;-1:-1;3414:20;;8231:175;-1:-1;8231:175::o;8413:263::-;;8528:2;8516:9;8507:7;8503:23;8499:32;8496:2;;;-1:-1;;8534:12;8496:2;-1:-1;3562:13;;8490:186;-1:-1;8490:186::o;8683:366::-;;;8804:2;8792:9;8783:7;8779:23;8775:32;8772:2;;;-1:-1;;8810:12;8772:2;3427:6;3414:20;8862:63;;8962:2;9005:9;9001:22;72:20;97:33;124:5;97:33;:::i;:::-;8970:63;;;;8766:283;;;;;:::o;9056:555::-;;;;9226:2;9214:9;9205:7;9201:23;9197:32;9194:2;;;-1:-1;;9232:12;9194:2;3427:6;3414:20;9284:63;;9384:2;9441:9;9437:22;1391:20;1416:47;1457:5;1416:47;:::i;:::-;9392:77;-1:-1;9506:2;9563:22;;1908:20;1933:51;1908:20;1933:51;:::i;9618:491::-;;;;9756:2;9744:9;9735:7;9731:23;9727:32;9724:2;;;-1:-1;;9762:12;9724:2;3427:6;3414:20;9814:63;;9914:2;9957:9;9953:22;3414:20;9922:63;;10022:2;10065:9;10061:22;72:20;97:33;124:5;97:33;:::i;10116:647::-;;;;;10286:3;10274:9;10265:7;10261:23;10257:33;10254:2;;;-1:-1;;10293:12;10254:2;3427:6;3414:20;10345:63;;10445:2;10488:9;10484:22;3414:20;10453:63;;10553:2;10614:9;10610:22;1908:20;1933:51;1978:5;1933:51;:::i;:::-;10561:81;-1:-1;10679:2;10715:22;;971:20;996:30;971:20;996:30;:::i;:::-;10248:515;;;;-1:-1;10248:515;;-1:-1;;10248:515::o;13734:323::-;;13866:5;41507:12;42322:6;42317:3;42310:19;13949:52;13994:6;42359:4;42354:3;42350:14;42359:4;13975:5;13971:16;13949:52;:::i;:::-;40995:9;46579:14;-1:-1;;46575:28;14013:39;;;;42359:4;14013:39;;13814:243;-1:-1;;13814:243::o;22821:291::-;;46162:6;46157:3;46152;46139:30;46200:16;;46193:27;;;46200:16;22965:147;-1:-1;22965:147::o;23119:271::-;;14224:5;41507:12;14335:52;14380:6;14375:3;14368:4;14361:5;14357:16;14335:52;:::i;:::-;14399:16;;;;;23253:137;-1:-1;;23253:137::o;23397:222::-;-1:-1;;;;;43936:54;;;;11358:37;;23524:2;23509:18;;23495:124::o;23871:444::-;-1:-1;;;;;43936:54;;;11358:37;;43936:54;;;;24218:2;24203:18;;11358:37;24301:2;24286:18;;13344:37;;;;24054:2;24039:18;;24025:290::o;24322:884::-;-1:-1;;;;;43936:54;;;11358:37;;43936:54;;;;24778:2;24763:18;;11358:37;24861:2;24846:18;;13344:37;;;;24944:2;24929:18;;13344:37;;;;44255:4;44244:16;25023:3;25008:19;;22774:35;43947:42;25092:19;;13344:37;25191:3;25176:19;;13344:37;;;;24613:3;24598:19;;24584:622::o;25213:333::-;-1:-1;;;;;43936:54;;;;11358:37;;25532:2;25517:18;;13344:37;25368:2;25353:18;;25339:207::o;25553:653::-;25820:2;25834:47;;;41507:12;;25805:18;;;42310:19;;;25553:653;;42359:4;;42350:14;;;;41197;;;25553:653;11825:251;11850:6;11847:1;11844:13;11825:251;;;11911:13;;43224;43217:21;13116:34;;10912:14;;;;42044;;;;11872:1;11865:9;11825:251;;;11829:14;;;26045:9;26039:4;26035:20;42359:4;26019:9;26015:18;26008:48;26070:126;12353:5;41507:12;12372:95;12460:6;12455:3;12372:95;:::i;:::-;12365:102;;;;;42359:4;12524:6;12520:17;12515:3;12511:27;42359:4;12618:5;41197:14;-1:-1;12657:357;12682:6;12679:1;12676:13;12657:357;;;12744:9;12738:4;12734:20;12729:3;12722:33;11060:64;11120:3;12789:6;12783:13;11060:64;:::i;:::-;12993:14;;;;12803:90;-1:-1;42044:14;;;;11872:1;12697:9;12657:357;;;-1:-1;26062:134;;25791:415;-1:-1;;;;;;;;;25791:415::o;27275:310::-;;27422:2;27443:17;27436:47;27497:78;27422:2;27411:9;27407:18;27561:6;27497:78;:::i;27592:416::-;27792:2;27806:47;;;15950:2;27777:18;;;42310:19;-1:-1;;;42350:14;;;15966:44;16029:12;;;27763:245::o;28015:416::-;28215:2;28229:47;;;16280:2;28200:18;;;42310:19;-1:-1;;;42350:14;;;16296:34;16349:12;;;28186:245::o;28438:416::-;28638:2;28652:47;;;16600:2;28623:18;;;42310:19;16636:34;42350:14;;;16616:55;-1:-1;;;16691:12;;;16684:27;16730:12;;;28609:245::o;28861:416::-;29061:2;29075:47;;;16981:2;29046:18;;;42310:19;17017:30;42350:14;;;16997:51;17067:12;;;29032:245::o;29284:416::-;29484:2;29498:47;;;17318:2;29469:18;;;42310:19;17354:34;42350:14;;;17334:55;-1:-1;;;17409:12;;;17402:25;17446:12;;;29455:245::o;29707:416::-;29907:2;29921:47;;;17697:2;29892:18;;;42310:19;-1:-1;;;42350:14;;;17713:44;17776:12;;;29878:245::o;30130:416::-;30330:2;30344:47;;;18027:2;30315:18;;;42310:19;18063:34;42350:14;;;18043:55;-1:-1;;;18118:12;;;18111:33;18163:12;;;30301:245::o;30553:416::-;30753:2;30767:47;;;18414:2;30738:18;;;42310:19;18450:30;42350:14;;;18430:51;18500:12;;;30724:245::o;30976:416::-;31176:2;31190:47;;;18751:2;31161:18;;;42310:19;18787:26;42350:14;;;18767:47;18833:12;;;31147:245::o;31399:416::-;31599:2;31613:47;;;31584:18;;;42310:19;19120:34;42350:14;;;19100:55;19174:12;;;31570:245::o;31822:416::-;32022:2;32036:47;;;32007:18;;;42310:19;19461:34;42350:14;;;19441:55;19515:12;;;31993:245::o;32245:416::-;32445:2;32459:47;;;19766:2;32430:18;;;42310:19;19802:29;42350:14;;;19782:50;19851:12;;;32416:245::o;32668:416::-;32868:2;32882:47;;;20102:2;32853:18;;;42310:19;20138:31;42350:14;;;20118:52;20189:12;;;32839:245::o;33091:416::-;33291:2;33305:47;;;20440:2;33276:18;;;42310:19;20476:34;42350:14;;;20456:55;-1:-1;;;20531:12;;;20524:28;20571:12;;;33262:245::o;33514:416::-;33714:2;33728:47;;;33699:18;;;42310:19;20858:34;42350:14;;;20838:55;20912:12;;;33685:245::o;33937:416::-;34137:2;34151:47;;;21163:2;34122:18;;;42310:19;21199:26;42350:14;;;21179:47;21245:12;;;34108:245::o;34360:322::-;21559:23;;-1:-1;;;;;43816:46;22061:37;;21741:4;21730:16;;;21724:23;-1:-1;;;;;44142:30;;;21799:14;;;22542:36;;;;21899:4;21888:16;;;21882:23;44142:30;21957:14;;;22542:36;;;;34537:2;34522:18;;34508:174::o;34689:436::-;-1:-1;;;;;43816:46;;;;22061:37;;-1:-1;;;;;44142:30;;;35030:2;35015:18;;22542:36;44142:30;35111:2;35096:18;;22542:36;34868:2;34853:18;;34839:286::o;35132:222::-;13344:37;;;35259:2;35244:18;;35230:124::o;35361:716::-;13344:37;;;-1:-1;;;;;43936:54;;;35797:2;35782:18;;11217:58;43936:54;;;;35880:2;35865:18;;11358:37;35971:2;35956:18;;15301:58;;;;36062:3;36047:19;;15301:58;35624:3;35609:19;;35595:482::o;38173:321::-;13344:37;;;43224:13;43217:21;38480:2;38465:18;;13116:34;38322:2;38307:18;;38293:201::o;38501:329::-;13344:37;;;38816:2;38801:18;;13344:37;38654:2;38639:18;;38625:205::o;39533:440::-;-1:-1;;;;;44142:30;;;;22542:36;;39876:2;39861:18;;13344:37;;;;-1:-1;;;;;43816:46;39959:2;39944:18;;22301:50;39714:2;39699:18;;39685:288::o;39980:506::-;;;40115:11;40102:25;40166:48;;40190:8;40174:14;40170:29;40166:48;40146:18;40142:73;40132:2;;-1:-1;;40219:12;40132:2;40246:33;;40300:18;;;-1:-1;;;;;;40327:30;;40324:2;;;-1:-1;;40360:12;40324:2;40205:4;40388:13;;-1:-1;40174:14;40420:38;;;40410:49;;40407:2;;;40472:1;;40462:12;40493:256;40555:2;40549:9;40581:17;;;-1:-1;;;;;40641:34;;40677:22;;;40638:62;40635:2;;;40713:1;;40703:12;40635:2;40555;40722:22;40533:216;;-1:-1;40533:216::o;46235:268::-;46300:1;46307:101;46321:6;46318:1;46315:13;46307:101;;;46388:11;;;46382:18;46369:11;;;46362:39;46343:2;46336:10;46307:101;;;46423:6;46420:1;46417:13;46414:2;;;-1:-1;;46300:1;46470:16;;46463:27;46284:219::o;46616:117::-;-1:-1;;;;;43936:54;;46675:35;;46665:2;;46724:1;;46714:12;46665:2;46659:74;:::o;46740:111::-;46821:5;43224:13;43217:21;46799:5;46796:32;46786:2;;46842:1;;46832:12" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "2475800", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "MASTER_CHEF()": "infinite", + "MASTER_PID()": "infinite", + "SUSHI()": "infinite", + "add(uint256,address,address)": "infinite", + "batch(bytes[],bool)": "infinite", + "claimOwnership()": "45067", + "deposit(uint256,uint256,address)": "infinite", + "emergencyWithdraw(uint256,address)": "infinite", + "harvest(uint256,address)": "infinite", + "harvestFromMasterChef()": "infinite", + "init(address)": "infinite", + "lpToken(uint256)": "2106", + "massUpdatePools(uint256[])": "infinite", + "migrate(uint256)": "infinite", + "migrator()": "1182", + "owner()": "1137", + "pendingOwner()": "1158", + "pendingSushi(uint256,address)": "infinite", + "permitToken(address,address,address,uint256,uint256,uint8,bytes32,bytes32)": "infinite", + "poolInfo(uint256)": "2211", + "poolLength()": "1097", + "rewarder(uint256)": "2149", + "set(uint256,uint256,address,bool)": "infinite", + "setMigrator(address)": "22073", + "sushiPerBlock()": "infinite", + "totalAllocPoint()": "1096", + "transferOwnership(address,bool,bool)": "infinite", + "updatePool(uint256)": "infinite", + "userInfo(uint256,address)": "2293", + "withdraw(uint256,uint256,address)": "infinite", + "withdrawAndHarvest(uint256,uint256,address)": "infinite" + } + }, + "methodIdentifiers": { + "MASTER_CHEF()": "edd8b170", + "MASTER_PID()": "61621aaa", + "SUSHI()": "ab560e10", + "add(uint256,address,address)": "ab7de098", + "batch(bytes[],bool)": "d2423b51", + "claimOwnership()": "4e71e0c8", + "deposit(uint256,uint256,address)": "8dbdbe6d", + "emergencyWithdraw(uint256,address)": "2f940c70", + "harvest(uint256,address)": "18fccc76", + "harvestFromMasterChef()": "4f70b15a", + "init(address)": "19ab453c", + "lpToken(uint256)": "78ed5d1f", + "massUpdatePools(uint256[])": "57a5b58c", + "migrate(uint256)": "454b0608", + "migrator()": "7cd07e47", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "pendingSushi(uint256,address)": "195426ec", + "permitToken(address,address,address,uint256,uint256,uint8,bytes32,bytes32)": "7c516e94", + "poolInfo(uint256)": "1526fe27", + "poolLength()": "081e3eda", + "rewarder(uint256)": "c346253d", + "set(uint256,uint256,address,bool)": "88bba42f", + "setMigrator(address)": "23cf3118", + "sushiPerBlock()": "b0bcf42a", + "totalAllocPoint()": "17caf6f1", + "transferOwnership(address,bool,bool)": "078dfbe7", + "updatePool(uint256)": "51eb05a6", + "userInfo(uint256,address)": "93f1a40b", + "withdraw(uint256,uint256,address)": "0ad58d2f", + "withdrawAndHarvest(uint256,uint256,address)": "d1abb907" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IMasterChef\",\"name\":\"_MASTER_CHEF\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"_sushi\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_MASTER_PID\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"EmergencyWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Harvest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogInit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"lpToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IRewarder\",\"name\":\"rewarder\",\"type\":\"address\"}],\"name\":\"LogPoolAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"contract IRewarder\",\"name\":\"rewarder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"overwrite\",\"type\":\"bool\"}],\"name\":\"LogSetPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"lastRewardBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accSushiPerShare\",\"type\":\"uint256\"}],\"name\":\"LogUpdatePool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MASTER_CHEF\",\"outputs\":[{\"internalType\":\"contract IMasterChef\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MASTER_PID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUSHI\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"_lpToken\",\"type\":\"address\"},{\"internalType\":\"contract IRewarder\",\"name\":\"_rewarder\",\"type\":\"address\"}],\"name\":\"add\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"calls\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"revertOnFail\",\"type\":\"bool\"}],\"name\":\"batch\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"successes\",\"type\":\"bool[]\"},{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"emergencyWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"harvest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"harvestFromMasterChef\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"dummyToken\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"lpToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pids\",\"type\":\"uint256[]\"}],\"name\":\"massUpdatePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"}],\"name\":\"migrate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrator\",\"outputs\":[{\"internalType\":\"contract IMigratorChef\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"pendingSushi\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permitToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"poolInfo\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"accSushiPerShare\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lastRewardBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"allocPoint\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pools\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rewarder\",\"outputs\":[{\"internalType\":\"contract IRewarder\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"contract IRewarder\",\"name\":\"_rewarder\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"overwrite\",\"type\":\"bool\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IMigratorChef\",\"name\":\"_migrator\",\"type\":\"address\"}],\"name\":\"setMigrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sushiPerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAllocPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"direct\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"renounce\",\"type\":\"bool\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"}],\"name\":\"updatePool\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"accSushiPerShare\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lastRewardBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"allocPoint\",\"type\":\"uint64\"}],\"internalType\":\"struct MasterChefV2.PoolInfo\",\"name\":\"pool\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"rewardDebt\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawAndHarvest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"add(uint256,address,address)\":{\"params\":{\"_lpToken\":\"Address of the LP ERC-20 token.\",\"_rewarder\":\"Address of the rewarder delegate.\",\"allocPoint\":\"AP of the new pool.\"}},\"constructor\":{\"params\":{\"_MASTER_CHEF\":\"The SushiSwap MCV1 contract address.\",\"_MASTER_PID\":\"The pool ID of the dummy token on the base MCV1 contract.\",\"_sushi\":\"The SUSHI token contract address.\"}},\"deposit(uint256,uint256,address)\":{\"params\":{\"amount\":\"LP token amount to deposit.\",\"pid\":\"The index of the pool. See `poolInfo`.\",\"to\":\"The receiver of `amount` deposit benefit.\"}},\"emergencyWithdraw(uint256,address)\":{\"params\":{\"pid\":\"The index of the pool. See `poolInfo`.\",\"to\":\"Receiver of the LP tokens.\"}},\"harvest(uint256,address)\":{\"params\":{\"pid\":\"The index of the pool. See `poolInfo`.\",\"to\":\"Receiver of SUSHI rewards.\"}},\"init(address)\":{\"params\":{\"dummyToken\":\"The address of the ERC-20 token to deposit into MCV1.\"}},\"massUpdatePools(uint256[])\":{\"params\":{\"pids\":\"Pool IDs of all to be updated. Make sure to update all active pools.\"}},\"migrate(uint256)\":{\"params\":{\"_pid\":\"The index of the pool. See `poolInfo`.\"}},\"pendingSushi(uint256,address)\":{\"params\":{\"_pid\":\"The index of the pool. See `poolInfo`.\",\"_user\":\"Address of user.\"},\"returns\":{\"pending\":\"SUSHI reward for a given user.\"}},\"set(uint256,uint256,address,bool)\":{\"params\":{\"_allocPoint\":\"New AP of the pool.\",\"_pid\":\"The index of the pool. See `poolInfo`.\",\"_rewarder\":\"Address of the rewarder delegate.\",\"overwrite\":\"True if _rewarder should be `set`. Otherwise `_rewarder` is ignored.\"}},\"setMigrator(address)\":{\"params\":{\"_migrator\":\"The contract address to set.\"}},\"updatePool(uint256)\":{\"params\":{\"pid\":\"The index of the pool. See `poolInfo`.\"},\"returns\":{\"pool\":\"Returns the pool that was updated.\"}},\"withdraw(uint256,uint256,address)\":{\"params\":{\"amount\":\"LP token amount to withdraw.\",\"pid\":\"The index of the pool. See `poolInfo`.\",\"to\":\"Receiver of the LP tokens.\"}},\"withdrawAndHarvest(uint256,uint256,address)\":{\"params\":{\"amount\":\"LP token amount to withdraw.\",\"pid\":\"The index of the pool. See `poolInfo`.\",\"to\":\"Receiver of the LP tokens and SUSHI rewards.\"}}},\"stateVariables\":{\"totalAllocPoint\":{\"details\":\"Total allocation points. Must be the sum of all allocation points in all pools.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"MASTER_CHEF()\":{\"notice\":\"Address of MCV1 contract.\"},\"MASTER_PID()\":{\"notice\":\"The index of MCV2 master pool in MCV1.\"},\"SUSHI()\":{\"notice\":\"Address of SUSHI contract.\"},\"add(uint256,address,address)\":{\"notice\":\"Add a new LP to the pool. Can only be called by the owner. DO NOT add the same LP token more than once. Rewards will be messed up if you do.\"},\"deposit(uint256,uint256,address)\":{\"notice\":\"Deposit LP tokens to MCV2 for SUSHI allocation.\"},\"emergencyWithdraw(uint256,address)\":{\"notice\":\"Withdraw without caring about rewards. EMERGENCY ONLY.\"},\"harvest(uint256,address)\":{\"notice\":\"Harvest proceeds for transaction sender to `to`.\"},\"harvestFromMasterChef()\":{\"notice\":\"Harvests SUSHI from `MASTER_CHEF` MCV1 and pool `MASTER_PID` to this MCV2 contract.\"},\"init(address)\":{\"notice\":\"Deposits a dummy token to `MASTER_CHEF` MCV1. This is required because MCV1 holds the minting rights for SUSHI. Any balance of transaction sender in `dummyToken` is transferred. The allocation point for the pool on MCV1 is the total allocation point for all pools that receive double incentives.\"},\"lpToken(uint256)\":{\"notice\":\"Address of the LP token for each MCV2 pool.\"},\"massUpdatePools(uint256[])\":{\"notice\":\"Update reward variables for all pools. Be careful of gas spending!\"},\"migrate(uint256)\":{\"notice\":\"Migrate LP token to another LP contract through the `migrator` contract.\"},\"pendingSushi(uint256,address)\":{\"notice\":\"View function to see pending SUSHI on frontend.\"},\"poolInfo(uint256)\":{\"notice\":\"Info of each MCV2 pool.\"},\"poolLength()\":{\"notice\":\"Returns the number of MCV2 pools.\"},\"rewarder(uint256)\":{\"notice\":\"Address of each `IRewarder` contract in MCV2.\"},\"set(uint256,uint256,address,bool)\":{\"notice\":\"Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\"},\"setMigrator(address)\":{\"notice\":\"Set the `migrator` contract. Can only be called by the owner.\"},\"sushiPerBlock()\":{\"notice\":\"Calculates and returns the `amount` of SUSHI per block.\"},\"updatePool(uint256)\":{\"notice\":\"Update reward variables of the given pool.\"},\"userInfo(uint256,address)\":{\"notice\":\"Info of each user that stakes LP tokens.\"},\"withdraw(uint256,uint256,address)\":{\"notice\":\"Withdraw LP tokens from MCV2.\"},\"withdrawAndHarvest(uint256,uint256,address)\":{\"notice\":\"Withdraw LP tokens from MCV2 and harvest proceeds for transaction sender to `to`.\"}},\"notice\":\"The (older) MasterChef contract gives out a constant number of SUSHI tokens per block. It is the only address with minting rights for SUSHI. The idea for this MasterChef V2 (MCV2) contract is therefore to be the owner of a dummy token that is deposited into the MasterChef V1 (MCV1) contract. The allocation point for this pool on MCV1 is the total allocation point for all pools that receive double incentives.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/MasterChefV2.sol\":\"MasterChefV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@boringcrypto/boring-solidity/contracts/BoringBatchable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\r\\n// Audit on 5-Jan-2021 by Keno and BoringCrypto\\r\\n\\r\\n// P1 - P3: OK\\r\\npragma solidity 0.6.12;\\r\\npragma experimental ABIEncoderV2;\\r\\n// solhint-disable avoid-low-level-calls\\r\\n\\r\\nimport \\\"./libraries/BoringERC20.sol\\\";\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BaseBoringBatchable {\\r\\n function _getRevertMsg(bytes memory _returnData) internal pure returns (string memory) {\\r\\n // If the _res length is less than 68, then the transaction failed silently (without a revert message)\\r\\n if (_returnData.length < 68) return \\\"Transaction reverted silently\\\";\\r\\n\\r\\n assembly {\\r\\n // Slice the sighash.\\r\\n _returnData := add(_returnData, 0x04)\\r\\n }\\r\\n return abi.decode(_returnData, (string)); // All that remains is the revert string\\r\\n } \\r\\n \\r\\n // F3 - F9: OK\\r\\n // F1: External is ok here because this is the batch function, adding it to a batch makes no sense\\r\\n // F2: Calls in the batch may be payable, delegatecall operates in the same context, so each call in the batch has access to msg.value\\r\\n // C1 - C21: OK\\r\\n // C3: The length of the loop is fully under user control, so can't be exploited\\r\\n // C7: Delegatecall is only used on the same contract, so it's safe\\r\\n function batch(bytes[] calldata calls, bool revertOnFail) external payable returns(bool[] memory successes, bytes[] memory results) {\\r\\n // Interactions\\r\\n successes = new bool[](calls.length);\\r\\n results = new bytes[](calls.length);\\r\\n for (uint256 i = 0; i < calls.length; i++) {\\r\\n (bool success, bytes memory result) = address(this).delegatecall(calls[i]);\\r\\n require(success || !revertOnFail, _getRevertMsg(result));\\r\\n successes[i] = success;\\r\\n results[i] = result;\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BoringBatchable is BaseBoringBatchable {\\r\\n // F1 - F9: OK\\r\\n // F6: Parameters can be used front-run the permit and the user's permit will fail (due to nonce or other revert)\\r\\n // if part of a batch this could be used to grief once as the second call would not need the permit\\r\\n // C1 - C21: OK\\r\\n function permitToken(IERC20 token, address from, address to, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\r\\n // Interactions\\r\\n // X1 - X5\\r\\n token.permit(from, to, amount, deadline, v, r, s);\\r\\n }\\r\\n}\",\"keccak256\":\"0xe0b0316b015447ee28c6b7d96c4347b410a66e5d26e922ef3bcccc22f3b4d590\",\"license\":\"UNLICENSED\"},\"@boringcrypto/boring-solidity/contracts/BoringOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\n// Audit on 5-Jan-2021 by Keno and BoringCrypto\\r\\n\\r\\n// P1 - P3: OK\\r\\npragma solidity 0.6.12;\\r\\n\\r\\n// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol\\r\\n// Edited by BoringCrypto\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BoringOwnableData {\\r\\n // V1 - V5: OK\\r\\n address public owner;\\r\\n // V1 - V5: OK\\r\\n address public pendingOwner;\\r\\n}\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BoringOwnable is BoringOwnableData {\\r\\n // E1: OK\\r\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\r\\n\\r\\n constructor () public {\\r\\n owner = msg.sender;\\r\\n emit OwnershipTransferred(address(0), msg.sender);\\r\\n }\\r\\n\\r\\n // F1 - F9: OK\\r\\n // C1 - C21: OK\\r\\n function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner {\\r\\n if (direct) {\\r\\n // Checks\\r\\n require(newOwner != address(0) || renounce, \\\"Ownable: zero address\\\");\\r\\n\\r\\n // Effects\\r\\n emit OwnershipTransferred(owner, newOwner);\\r\\n owner = newOwner;\\r\\n pendingOwner = address(0);\\r\\n } else {\\r\\n // Effects\\r\\n pendingOwner = newOwner;\\r\\n }\\r\\n }\\r\\n\\r\\n // F1 - F9: OK\\r\\n // C1 - C21: OK\\r\\n function claimOwnership() public {\\r\\n address _pendingOwner = pendingOwner;\\r\\n \\r\\n // Checks\\r\\n require(msg.sender == _pendingOwner, \\\"Ownable: caller != pending owner\\\");\\r\\n\\r\\n // Effects\\r\\n emit OwnershipTransferred(owner, _pendingOwner);\\r\\n owner = _pendingOwner;\\r\\n pendingOwner = address(0);\\r\\n }\\r\\n\\r\\n // M1 - M5: OK\\r\\n // C1 - C21: OK\\r\\n modifier onlyOwner() {\\r\\n require(msg.sender == owner, \\\"Ownable: caller is not the owner\\\");\\r\\n _;\\r\\n }\\r\\n}\",\"keccak256\":\"0xfafb586b248c1c697227f5745397562cfe5be2f04e19fb80fc79fc94e3afaba1\",\"license\":\"MIT\"},\"@boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\npragma solidity 0.6.12;\\r\\n\\r\\ninterface IERC20 {\\r\\n function totalSupply() external view returns (uint256);\\r\\n function balanceOf(address account) external view returns (uint256);\\r\\n function allowance(address owner, address spender) external view returns (uint256);\\r\\n function approve(address spender, uint256 amount) external returns (bool);\\r\\n event Transfer(address indexed from, address indexed to, uint256 value);\\r\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\r\\n\\r\\n // EIP 2612\\r\\n function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;\\r\\n}\",\"keccak256\":\"0x8004f86e4536cca55b8eeb2621fe18e1ee57d779396ddef50bce5bf70fb59867\",\"license\":\"MIT\"},\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"../interfaces/IERC20.sol\\\";\\r\\n\\r\\nlibrary BoringERC20 {\\r\\n function safeSymbol(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeName(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeDecimals(IERC20 token) internal view returns (uint8) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));\\r\\n return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;\\r\\n }\\r\\n\\r\\n function safeTransfer(IERC20 token, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\r\\n }\\r\\n\\r\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: TransferFrom failed\\\");\\r\\n }\\r\\n}\",\"keccak256\":\"0x69f1ccf716991e5d6d64dc0e3bc3828fd1990bc18400d680b1aa1960675daaaa\",\"license\":\"UNLICENSED\"},\"@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\npragma solidity 0.6.12;\\r\\n// a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)\\r\\nlibrary BoringMath {\\r\\n function add(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {require(b == 0 || (c = a * b)/b == a, \\\"BoringMath: Mul Overflow\\\");}\\r\\n function to128(uint256 a) internal pure returns (uint128 c) {\\r\\n require(a <= uint128(-1), \\\"BoringMath: uint128 Overflow\\\");\\r\\n c = uint128(a);\\r\\n }\\r\\n function to64(uint256 a) internal pure returns (uint64 c) {\\r\\n require(a <= uint64(-1), \\\"BoringMath: uint64 Overflow\\\");\\r\\n c = uint64(a);\\r\\n }\\r\\n function to32(uint256 a) internal pure returns (uint32 c) {\\r\\n require(a <= uint32(-1), \\\"BoringMath: uint32 Overflow\\\");\\r\\n c = uint32(a);\\r\\n }\\r\\n}\\r\\n\\r\\nlibrary BoringMath128 {\\r\\n function add(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n}\\r\\n\\r\\nlibrary BoringMath64 {\\r\\n function add(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n}\\r\\n\\r\\nlibrary BoringMath32 {\\r\\n function add(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n}\",\"keccak256\":\"0x2d0e99483c5618251d4b52e8551918253bf044c63e0d09a2f1f652671f9ff762\",\"license\":\"MIT\"},\"contracts/MasterChefV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol\\\";\\nimport \\\"@boringcrypto/boring-solidity/contracts/BoringBatchable.sol\\\";\\nimport \\\"@boringcrypto/boring-solidity/contracts/BoringOwnable.sol\\\";\\nimport \\\"./libraries/SignedSafeMath.sol\\\";\\nimport \\\"./interfaces/IRewarder.sol\\\";\\nimport \\\"./interfaces/IMasterChef.sol\\\";\\n\\ninterface IMigratorChef {\\n // Take the current LP token address and return the new LP token address.\\n // Migrator should have full access to the caller's LP token.\\n function migrate(IERC20 token) external returns (IERC20);\\n}\\n\\n/// @notice The (older) MasterChef contract gives out a constant number of SUSHI tokens per block.\\n/// It is the only address with minting rights for SUSHI.\\n/// The idea for this MasterChef V2 (MCV2) contract is therefore to be the owner of a dummy token\\n/// that is deposited into the MasterChef V1 (MCV1) contract.\\n/// The allocation point for this pool on MCV1 is the total allocation point for all pools that receive double incentives.\\ncontract MasterChefV2 is BoringOwnable, BoringBatchable {\\n using BoringMath for uint256;\\n using BoringMath128 for uint128;\\n using BoringERC20 for IERC20;\\n using SignedSafeMath for int256;\\n\\n /// @notice Info of each MCV2 user.\\n /// `amount` LP token amount the user has provided.\\n /// `rewardDebt` The amount of SUSHI entitled to the user.\\n struct UserInfo {\\n uint256 amount;\\n int256 rewardDebt;\\n }\\n\\n /// @notice Info of each MCV2 pool.\\n /// `allocPoint` The amount of allocation points assigned to the pool.\\n /// Also known as the amount of SUSHI to distribute per block.\\n struct PoolInfo {\\n uint128 accSushiPerShare;\\n uint64 lastRewardBlock;\\n uint64 allocPoint;\\n }\\n\\n /// @notice Address of MCV1 contract.\\n IMasterChef public immutable MASTER_CHEF;\\n /// @notice Address of SUSHI contract.\\n IERC20 public immutable SUSHI;\\n /// @notice The index of MCV2 master pool in MCV1.\\n uint256 public immutable MASTER_PID;\\n // @notice The migrator contract. It has a lot of power. Can only be set through governance (owner).\\n IMigratorChef public migrator;\\n\\n /// @notice Info of each MCV2 pool.\\n PoolInfo[] public poolInfo;\\n /// @notice Address of the LP token for each MCV2 pool.\\n IERC20[] public lpToken;\\n /// @notice Address of each `IRewarder` contract in MCV2.\\n IRewarder[] public rewarder;\\n\\n /// @notice Info of each user that stakes LP tokens.\\n mapping (uint256 => mapping (address => UserInfo)) public userInfo;\\n /// @dev Total allocation points. Must be the sum of all allocation points in all pools.\\n uint256 public totalAllocPoint;\\n\\n uint256 private constant MASTERCHEF_SUSHI_PER_BLOCK = 1e20;\\n uint256 private constant ACC_SUSHI_PRECISION = 1e12;\\n\\n event Deposit(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event Withdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event Harvest(address indexed user, uint256 indexed pid, uint256 amount);\\n event LogPoolAddition(uint256 indexed pid, uint256 allocPoint, IERC20 indexed lpToken, IRewarder indexed rewarder);\\n event LogSetPool(uint256 indexed pid, uint256 allocPoint, IRewarder indexed rewarder, bool overwrite);\\n event LogUpdatePool(uint256 indexed pid, uint64 lastRewardBlock, uint256 lpSupply, uint256 accSushiPerShare);\\n event LogInit();\\n\\n /// @param _MASTER_CHEF The SushiSwap MCV1 contract address.\\n /// @param _sushi The SUSHI token contract address.\\n /// @param _MASTER_PID The pool ID of the dummy token on the base MCV1 contract.\\n constructor(IMasterChef _MASTER_CHEF, IERC20 _sushi, uint256 _MASTER_PID) public {\\n MASTER_CHEF = _MASTER_CHEF;\\n SUSHI = _sushi;\\n MASTER_PID = _MASTER_PID;\\n }\\n\\n /// @notice Deposits a dummy token to `MASTER_CHEF` MCV1. This is required because MCV1 holds the minting rights for SUSHI.\\n /// Any balance of transaction sender in `dummyToken` is transferred.\\n /// The allocation point for the pool on MCV1 is the total allocation point for all pools that receive double incentives.\\n /// @param dummyToken The address of the ERC-20 token to deposit into MCV1.\\n function init(IERC20 dummyToken) external {\\n uint256 balance = dummyToken.balanceOf(msg.sender);\\n require(balance != 0, \\\"MasterChefV2: Balance must exceed 0\\\");\\n dummyToken.safeTransferFrom(msg.sender, address(this), balance);\\n dummyToken.approve(address(MASTER_CHEF), balance);\\n MASTER_CHEF.deposit(MASTER_PID, balance);\\n emit LogInit();\\n }\\n\\n /// @notice Returns the number of MCV2 pools.\\n function poolLength() public view returns (uint256 pools) {\\n pools = poolInfo.length;\\n }\\n\\n /// @notice Add a new LP to the pool. Can only be called by the owner.\\n /// DO NOT add the same LP token more than once. Rewards will be messed up if you do.\\n /// @param allocPoint AP of the new pool.\\n /// @param _lpToken Address of the LP ERC-20 token.\\n /// @param _rewarder Address of the rewarder delegate.\\n function add(uint256 allocPoint, IERC20 _lpToken, IRewarder _rewarder) public onlyOwner {\\n uint256 lastRewardBlock = block.number;\\n totalAllocPoint = totalAllocPoint.add(allocPoint);\\n lpToken.push(_lpToken);\\n rewarder.push(_rewarder);\\n\\n poolInfo.push(PoolInfo({\\n allocPoint: allocPoint.to64(),\\n lastRewardBlock: lastRewardBlock.to64(),\\n accSushiPerShare: 0\\n }));\\n emit LogPoolAddition(lpToken.length.sub(1), allocPoint, _lpToken, _rewarder);\\n }\\n\\n /// @notice Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n /// @param _allocPoint New AP of the pool.\\n /// @param _rewarder Address of the rewarder delegate.\\n /// @param overwrite True if _rewarder should be `set`. Otherwise `_rewarder` is ignored.\\n function set(uint256 _pid, uint256 _allocPoint, IRewarder _rewarder, bool overwrite) public onlyOwner {\\n totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);\\n poolInfo[_pid].allocPoint = _allocPoint.to64();\\n if (overwrite) { rewarder[_pid] = _rewarder; }\\n emit LogSetPool(_pid, _allocPoint, overwrite ? _rewarder : rewarder[_pid], overwrite);\\n }\\n\\n /// @notice Set the `migrator` contract. Can only be called by the owner.\\n /// @param _migrator The contract address to set.\\n function setMigrator(IMigratorChef _migrator) public onlyOwner {\\n migrator = _migrator;\\n }\\n\\n /// @notice Migrate LP token to another LP contract through the `migrator` contract.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n function migrate(uint256 _pid) public {\\n require(address(migrator) != address(0), \\\"MasterChefV2: no migrator set\\\");\\n IERC20 _lpToken = lpToken[_pid];\\n uint256 bal = _lpToken.balanceOf(address(this));\\n _lpToken.approve(address(migrator), bal);\\n IERC20 newLpToken = migrator.migrate(_lpToken);\\n require(bal == newLpToken.balanceOf(address(this)), \\\"MasterChefV2: migrated balance must match\\\");\\n lpToken[_pid] = newLpToken;\\n }\\n\\n /// @notice View function to see pending SUSHI on frontend.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n /// @param _user Address of user.\\n /// @return pending SUSHI reward for a given user.\\n function pendingSushi(uint256 _pid, address _user) external view returns (uint256 pending) {\\n PoolInfo memory pool = poolInfo[_pid];\\n UserInfo storage user = userInfo[_pid][_user];\\n uint256 accSushiPerShare = pool.accSushiPerShare;\\n uint256 lpSupply = lpToken[_pid].balanceOf(address(this));\\n if (block.number > pool.lastRewardBlock && lpSupply != 0) {\\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\\n uint256 sushiReward = blocks.mul(sushiPerBlock()).mul(pool.allocPoint) / totalAllocPoint;\\n accSushiPerShare = accSushiPerShare.add(sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply);\\n }\\n pending = int256(user.amount.mul(accSushiPerShare) / ACC_SUSHI_PRECISION).sub(user.rewardDebt).toUInt256();\\n }\\n\\n /// @notice Update reward variables for all pools. Be careful of gas spending!\\n /// @param pids Pool IDs of all to be updated. Make sure to update all active pools.\\n function massUpdatePools(uint256[] calldata pids) external {\\n uint256 len = pids.length;\\n for (uint256 i = 0; i < len; ++i) {\\n updatePool(pids[i]);\\n }\\n }\\n\\n /// @notice Calculates and returns the `amount` of SUSHI per block.\\n function sushiPerBlock() public view returns (uint256 amount) {\\n amount = uint256(MASTERCHEF_SUSHI_PER_BLOCK)\\n .mul(MASTER_CHEF.poolInfo(MASTER_PID).allocPoint) / MASTER_CHEF.totalAllocPoint();\\n }\\n\\n /// @notice Update reward variables of the given pool.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @return pool Returns the pool that was updated.\\n function updatePool(uint256 pid) public returns (PoolInfo memory pool) {\\n pool = poolInfo[pid];\\n if (block.number > pool.lastRewardBlock) {\\n uint256 lpSupply = lpToken[pid].balanceOf(address(this));\\n if (lpSupply > 0) {\\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\\n uint256 sushiReward = blocks.mul(sushiPerBlock()).mul(pool.allocPoint) / totalAllocPoint;\\n pool.accSushiPerShare = pool.accSushiPerShare.add((sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply).to128());\\n }\\n pool.lastRewardBlock = block.number.to64();\\n poolInfo[pid] = pool;\\n emit LogUpdatePool(pid, pool.lastRewardBlock, lpSupply, pool.accSushiPerShare);\\n }\\n }\\n\\n /// @notice Deposit LP tokens to MCV2 for SUSHI allocation.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param amount LP token amount to deposit.\\n /// @param to The receiver of `amount` deposit benefit.\\n function deposit(uint256 pid, uint256 amount, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][to];\\n\\n // Effects\\n user.amount = user.amount.add(amount);\\n user.rewardDebt = user.rewardDebt.add(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\\n\\n // Interactions\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, to, to, 0, user.amount);\\n }\\n\\n lpToken[pid].safeTransferFrom(msg.sender, address(this), amount);\\n\\n emit Deposit(msg.sender, pid, amount, to);\\n }\\n\\n /// @notice Withdraw LP tokens from MCV2.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param amount LP token amount to withdraw.\\n /// @param to Receiver of the LP tokens.\\n function withdraw(uint256 pid, uint256 amount, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][msg.sender];\\n\\n // Effects\\n user.rewardDebt = user.rewardDebt.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\\n user.amount = user.amount.sub(amount);\\n\\n // Interactions\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, msg.sender, to, 0, user.amount);\\n }\\n \\n lpToken[pid].safeTransfer(to, amount);\\n\\n emit Withdraw(msg.sender, pid, amount, to);\\n }\\n\\n /// @notice Harvest proceeds for transaction sender to `to`.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param to Receiver of SUSHI rewards.\\n function harvest(uint256 pid, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][msg.sender];\\n int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION);\\n uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256();\\n\\n // Effects\\n user.rewardDebt = accumulatedSushi;\\n\\n // Interactions\\n if (_pendingSushi != 0) {\\n SUSHI.safeTransfer(to, _pendingSushi);\\n }\\n \\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward( pid, msg.sender, to, _pendingSushi, user.amount);\\n }\\n\\n emit Harvest(msg.sender, pid, _pendingSushi);\\n }\\n \\n /// @notice Withdraw LP tokens from MCV2 and harvest proceeds for transaction sender to `to`.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param amount LP token amount to withdraw.\\n /// @param to Receiver of the LP tokens and SUSHI rewards.\\n function withdrawAndHarvest(uint256 pid, uint256 amount, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][msg.sender];\\n int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION);\\n uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256();\\n\\n // Effects\\n user.rewardDebt = accumulatedSushi.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\\n user.amount = user.amount.sub(amount);\\n \\n // Interactions\\n SUSHI.safeTransfer(to, _pendingSushi);\\n\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, msg.sender, to, _pendingSushi, user.amount);\\n }\\n\\n lpToken[pid].safeTransfer(to, amount);\\n\\n emit Withdraw(msg.sender, pid, amount, to);\\n emit Harvest(msg.sender, pid, _pendingSushi);\\n }\\n\\n /// @notice Harvests SUSHI from `MASTER_CHEF` MCV1 and pool `MASTER_PID` to this MCV2 contract.\\n function harvestFromMasterChef() public {\\n MASTER_CHEF.deposit(MASTER_PID, 0);\\n }\\n\\n /// @notice Withdraw without caring about rewards. EMERGENCY ONLY.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param to Receiver of the LP tokens.\\n function emergencyWithdraw(uint256 pid, address to) public {\\n UserInfo storage user = userInfo[pid][msg.sender];\\n uint256 amount = user.amount;\\n user.amount = 0;\\n user.rewardDebt = 0;\\n\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, msg.sender, to, 0, 0);\\n }\\n\\n // Note: transfer can fail or succeed if `amount` is zero.\\n lpToken[pid].safeTransfer(to, amount);\\n emit EmergencyWithdraw(msg.sender, pid, amount, to);\\n }\\n}\\n\",\"keccak256\":\"0x2048c5e7b174e2f8f931045df32b1d56f09f488cfac3c87632b9730e0aba9bc3\",\"license\":\"MIT\"},\"contracts/interfaces/IMasterChef.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\\\";\\n\\ninterface IMasterChef {\\n using BoringERC20 for IERC20;\\n struct UserInfo {\\n uint256 amount; // How many LP tokens the user has provided.\\n uint256 rewardDebt; // Reward debt. See explanation below.\\n }\\n\\n struct PoolInfo {\\n IERC20 lpToken; // Address of LP token contract.\\n uint256 allocPoint; // How many allocation points assigned to this pool. SUSHI to distribute per block.\\n uint256 lastRewardBlock; // Last block number that SUSHI distribution occurs.\\n uint256 accSushiPerShare; // Accumulated SUSHI per share, times 1e12. See below.\\n }\\n\\n function poolInfo(uint256 pid) external view returns (IMasterChef.PoolInfo memory);\\n function totalAllocPoint() external view returns (uint256);\\n function deposit(uint256 _pid, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xbbb2138d7b8be86b5d0bed347ab7f6d2d3e66043393abc882ad37a75fdd860d3\",\"license\":\"MIT\"},\"contracts/interfaces/IRewarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\\\";\\ninterface IRewarder {\\n using BoringERC20 for IERC20;\\n function onSushiReward(uint256 pid, address user, address recipient, uint256 sushiAmount, uint256 newLpAmount) external;\\n function pendingTokens(uint256 pid, address user, uint256 sushiAmount) external returns (IERC20[] memory, uint256[] memory);\\n}\\n\",\"keccak256\":\"0xf9fa549b5fe5d156c908a3ca612b1acd219666dbadc195d9bea4dd34d3cec94a\",\"license\":\"MIT\"},\"contracts/libraries/SignedSafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\n\\nlibrary SignedSafeMath {\\n int256 constant private _INT256_MIN = -2**255;\\n\\n /**\\n * @dev Returns the multiplication of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(int256 a, int256 b) internal pure returns (int256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) {\\n return 0;\\n }\\n\\n require(!(a == -1 && b == _INT256_MIN), \\\"SignedSafeMath: multiplication overflow\\\");\\n\\n int256 c = a * b;\\n require(c / a == b, \\\"SignedSafeMath: multiplication overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two signed integers. Reverts on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(int256 a, int256 b) internal pure returns (int256) {\\n require(b != 0, \\\"SignedSafeMath: division by zero\\\");\\n require(!(b == -1 && a == _INT256_MIN), \\\"SignedSafeMath: division overflow\\\");\\n\\n int256 c = a / b;\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(int256 a, int256 b) internal pure returns (int256) {\\n int256 c = a - b;\\n require((b >= 0 && c <= a) || (b < 0 && c > a), \\\"SignedSafeMath: subtraction overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the addition of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(int256 a, int256 b) internal pure returns (int256) {\\n int256 c = a + b;\\n require((b >= 0 && c >= a) || (b < 0 && c < a), \\\"SignedSafeMath: addition overflow\\\");\\n\\n return c;\\n }\\n\\n function toUInt256(int256 a) internal pure returns (uint256) {\\n require(a >= 0, \\\"Integer < 0\\\");\\n return uint256(a);\\n }\\n}\",\"keccak256\":\"0x4991beb21b224dfcdc3d251e0a60fdc304d4f6b699b2c35d08f3974e5b84c86a\",\"license\":\"MIT\"}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 149, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 151, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "pendingOwner", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 898, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "migrator", + "offset": 0, + "slot": "2", + "type": "t_contract(IMigratorChef)858" + }, + { + "astId": 902, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "poolInfo", + "offset": 0, + "slot": "3", + "type": "t_array(t_struct(PoolInfo)887_storage)dyn_storage" + }, + { + "astId": 906, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "lpToken", + "offset": 0, + "slot": "4", + "type": "t_array(t_contract(IERC20)337)dyn_storage" + }, + { + "astId": 910, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "rewarder", + "offset": 0, + "slot": "5", + "type": "t_array(t_contract(IRewarder)2167)dyn_storage" + }, + { + "astId": 917, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "userInfo", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_struct(UserInfo)880_storage))" + }, + { + "astId": 920, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "totalAllocPoint", + "offset": 0, + "slot": "7", + "type": "t_uint256" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_contract(IERC20)337)dyn_storage": { + "base": "t_contract(IERC20)337", + "encoding": "dynamic_array", + "label": "contract IERC20[]", + "numberOfBytes": "32" + }, + "t_array(t_contract(IRewarder)2167)dyn_storage": { + "base": "t_contract(IRewarder)2167", + "encoding": "dynamic_array", + "label": "contract IRewarder[]", + "numberOfBytes": "32" + }, + "t_array(t_struct(PoolInfo)887_storage)dyn_storage": { + "base": "t_struct(PoolInfo)887_storage", + "encoding": "dynamic_array", + "label": "struct MasterChefV2.PoolInfo[]", + "numberOfBytes": "32" + }, + "t_contract(IERC20)337": { + "encoding": "inplace", + "label": "contract IERC20", + "numberOfBytes": "20" + }, + "t_contract(IMigratorChef)858": { + "encoding": "inplace", + "label": "contract IMigratorChef", + "numberOfBytes": "20" + }, + "t_contract(IRewarder)2167": { + "encoding": "inplace", + "label": "contract IRewarder", + "numberOfBytes": "20" + }, + "t_int256": { + "encoding": "inplace", + "label": "int256", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UserInfo)880_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct MasterChefV2.UserInfo)", + "numberOfBytes": "32", + "value": "t_struct(UserInfo)880_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_struct(UserInfo)880_storage))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => struct MasterChefV2.UserInfo))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_struct(UserInfo)880_storage)" + }, + "t_struct(PoolInfo)887_storage": { + "encoding": "inplace", + "label": "struct MasterChefV2.PoolInfo", + "members": [ + { + "astId": 882, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "accSushiPerShare", + "offset": 0, + "slot": "0", + "type": "t_uint128" + }, + { + "astId": 884, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "lastRewardBlock", + "offset": 16, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 886, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "allocPoint", + "offset": 24, + "slot": "0", + "type": "t_uint64" + } + ], + "numberOfBytes": "32" + }, + "t_struct(UserInfo)880_storage": { + "encoding": "inplace", + "label": "struct MasterChefV2.UserInfo", + "members": [ + { + "astId": 877, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "amount", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 879, + "contract": "contracts/MasterChefV2.sol:MasterChefV2", + "label": "rewardDebt", + "offset": 0, + "slot": "1", + "type": "t_int256" + } + ], + "numberOfBytes": "64" + }, + "t_uint128": { + "encoding": "inplace", + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + }, + "userdoc": { + "kind": "user", + "methods": { + "MASTER_CHEF()": { + "notice": "Address of MCV1 contract." + }, + "MASTER_PID()": { + "notice": "The index of MCV2 master pool in MCV1." + }, + "SUSHI()": { + "notice": "Address of SUSHI contract." + }, + "add(uint256,address,address)": { + "notice": "Add a new LP to the pool. Can only be called by the owner. DO NOT add the same LP token more than once. Rewards will be messed up if you do." + }, + "deposit(uint256,uint256,address)": { + "notice": "Deposit LP tokens to MCV2 for SUSHI allocation." + }, + "emergencyWithdraw(uint256,address)": { + "notice": "Withdraw without caring about rewards. EMERGENCY ONLY." + }, + "harvest(uint256,address)": { + "notice": "Harvest proceeds for transaction sender to `to`." + }, + "harvestFromMasterChef()": { + "notice": "Harvests SUSHI from `MASTER_CHEF` MCV1 and pool `MASTER_PID` to this MCV2 contract." + }, + "init(address)": { + "notice": "Deposits a dummy token to `MASTER_CHEF` MCV1. This is required because MCV1 holds the minting rights for SUSHI. Any balance of transaction sender in `dummyToken` is transferred. The allocation point for the pool on MCV1 is the total allocation point for all pools that receive double incentives." + }, + "lpToken(uint256)": { + "notice": "Address of the LP token for each MCV2 pool." + }, + "massUpdatePools(uint256[])": { + "notice": "Update reward variables for all pools. Be careful of gas spending!" + }, + "migrate(uint256)": { + "notice": "Migrate LP token to another LP contract through the `migrator` contract." + }, + "pendingSushi(uint256,address)": { + "notice": "View function to see pending SUSHI on frontend." + }, + "poolInfo(uint256)": { + "notice": "Info of each MCV2 pool." + }, + "poolLength()": { + "notice": "Returns the number of MCV2 pools." + }, + "rewarder(uint256)": { + "notice": "Address of each `IRewarder` contract in MCV2." + }, + "set(uint256,uint256,address,bool)": { + "notice": "Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner." + }, + "setMigrator(address)": { + "notice": "Set the `migrator` contract. Can only be called by the owner." + }, + "sushiPerBlock()": { + "notice": "Calculates and returns the `amount` of SUSHI per block." + }, + "updatePool(uint256)": { + "notice": "Update reward variables of the given pool." + }, + "userInfo(uint256,address)": { + "notice": "Info of each user that stakes LP tokens." + }, + "withdraw(uint256,uint256,address)": { + "notice": "Withdraw LP tokens from MCV2." + }, + "withdrawAndHarvest(uint256,uint256,address)": { + "notice": "Withdraw LP tokens from MCV2 and harvest proceeds for transaction sender to `to`." + } + }, + "notice": "The (older) MasterChef contract gives out a constant number of SUSHI tokens per block. It is the only address with minting rights for SUSHI. The idea for this MasterChef V2 (MCV2) contract is therefore to be the owner of a dummy token that is deposited into the MasterChef V1 (MCV1) contract. The allocation point for this pool on MCV1 is the total allocation point for all pools that receive double incentives.", + "version": 1 + } + } + }, + "contracts/interfaces/IMasterChef.sol": { + "IMasterChef": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_pid", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + } + ], + "name": "poolInfo", + "outputs": [ + { + "components": [ + { + "internalType": "contract IERC20", + "name": "lpToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allocPoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastRewardBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "accSushiPerShare", + "type": "uint256" + } + ], + "internalType": "struct IMasterChef.PoolInfo", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAllocPoint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "deposit(uint256,uint256)": "e2bbb158", + "poolInfo(uint256)": "1526fe27", + "totalAllocPoint()": "17caf6f1" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"}],\"name\":\"poolInfo\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"lpToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastRewardBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accSushiPerShare\",\"type\":\"uint256\"}],\"internalType\":\"struct IMasterChef.PoolInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAllocPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IMasterChef.sol\":\"IMasterChef\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\npragma solidity 0.6.12;\\r\\n\\r\\ninterface IERC20 {\\r\\n function totalSupply() external view returns (uint256);\\r\\n function balanceOf(address account) external view returns (uint256);\\r\\n function allowance(address owner, address spender) external view returns (uint256);\\r\\n function approve(address spender, uint256 amount) external returns (bool);\\r\\n event Transfer(address indexed from, address indexed to, uint256 value);\\r\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\r\\n\\r\\n // EIP 2612\\r\\n function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;\\r\\n}\",\"keccak256\":\"0x8004f86e4536cca55b8eeb2621fe18e1ee57d779396ddef50bce5bf70fb59867\",\"license\":\"MIT\"},\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"../interfaces/IERC20.sol\\\";\\r\\n\\r\\nlibrary BoringERC20 {\\r\\n function safeSymbol(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeName(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeDecimals(IERC20 token) internal view returns (uint8) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));\\r\\n return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;\\r\\n }\\r\\n\\r\\n function safeTransfer(IERC20 token, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\r\\n }\\r\\n\\r\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: TransferFrom failed\\\");\\r\\n }\\r\\n}\",\"keccak256\":\"0x69f1ccf716991e5d6d64dc0e3bc3828fd1990bc18400d680b1aa1960675daaaa\",\"license\":\"UNLICENSED\"},\"contracts/interfaces/IMasterChef.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\\\";\\n\\ninterface IMasterChef {\\n using BoringERC20 for IERC20;\\n struct UserInfo {\\n uint256 amount; // How many LP tokens the user has provided.\\n uint256 rewardDebt; // Reward debt. See explanation below.\\n }\\n\\n struct PoolInfo {\\n IERC20 lpToken; // Address of LP token contract.\\n uint256 allocPoint; // How many allocation points assigned to this pool. SUSHI to distribute per block.\\n uint256 lastRewardBlock; // Last block number that SUSHI distribution occurs.\\n uint256 accSushiPerShare; // Accumulated SUSHI per share, times 1e12. See below.\\n }\\n\\n function poolInfo(uint256 pid) external view returns (IMasterChef.PoolInfo memory);\\n function totalAllocPoint() external view returns (uint256);\\n function deposit(uint256 _pid, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xbbb2138d7b8be86b5d0bed347ab7f6d2d3e66043393abc882ad37a75fdd860d3\",\"license\":\"MIT\"}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "contracts/interfaces/IRewarder.sol": { + "IRewarder": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sushiAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newLpAmount", + "type": "uint256" + } + ], + "name": "onSushiReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sushiAmount", + "type": "uint256" + } + ], + "name": "pendingTokens", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "", + "opcodes": "", + "sourceMap": "" + }, + "gasEstimates": null, + "methodIdentifiers": { + "onSushiReward(uint256,address,address,uint256,uint256)": "8bf63742", + "pendingTokens(uint256,address,uint256)": "d63b3c49" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sushiAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLpAmount\",\"type\":\"uint256\"}],\"name\":\"onSushiReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sushiAmount\",\"type\":\"uint256\"}],\"name\":\"pendingTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IRewarder.sol\":\"IRewarder\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\npragma solidity 0.6.12;\\r\\n\\r\\ninterface IERC20 {\\r\\n function totalSupply() external view returns (uint256);\\r\\n function balanceOf(address account) external view returns (uint256);\\r\\n function allowance(address owner, address spender) external view returns (uint256);\\r\\n function approve(address spender, uint256 amount) external returns (bool);\\r\\n event Transfer(address indexed from, address indexed to, uint256 value);\\r\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\r\\n\\r\\n // EIP 2612\\r\\n function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;\\r\\n}\",\"keccak256\":\"0x8004f86e4536cca55b8eeb2621fe18e1ee57d779396ddef50bce5bf70fb59867\",\"license\":\"MIT\"},\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"../interfaces/IERC20.sol\\\";\\r\\n\\r\\nlibrary BoringERC20 {\\r\\n function safeSymbol(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeName(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeDecimals(IERC20 token) internal view returns (uint8) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));\\r\\n return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;\\r\\n }\\r\\n\\r\\n function safeTransfer(IERC20 token, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\r\\n }\\r\\n\\r\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: TransferFrom failed\\\");\\r\\n }\\r\\n}\",\"keccak256\":\"0x69f1ccf716991e5d6d64dc0e3bc3828fd1990bc18400d680b1aa1960675daaaa\",\"license\":\"UNLICENSED\"},\"contracts/interfaces/IRewarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\\\";\\ninterface IRewarder {\\n using BoringERC20 for IERC20;\\n function onSushiReward(uint256 pid, address user, address recipient, uint256 sushiAmount, uint256 newLpAmount) external;\\n function pendingTokens(uint256 pid, address user, uint256 sushiAmount) external returns (IERC20[] memory, uint256[] memory);\\n}\\n\",\"keccak256\":\"0xf9fa549b5fe5d156c908a3ca612b1acd219666dbadc195d9bea4dd34d3cec94a\",\"license\":\"MIT\"}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "contracts/libraries/SignedSafeMath.sol": { + "SignedSafeMath": { + "abi": [], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208f1943d7a24d29ff6e71807b2650b06004a17b500d0dd71e9ef3c5aa567a16d464736f6c634300060c0033", + "opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 NOT NUMBER 0xD7 LOG2 0x4D 0x29 SELFDESTRUCT PUSH15 0x71807B2650B06004A17B500D0DD71E SWAP15 RETURN 0xC5 0xAA JUMP PUSH27 0x16D464736F6C634300060C00330000000000000000000000000000 ", + "sourceMap": "58:2636:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": {}, + "linkReferences": {}, + "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208f1943d7a24d29ff6e71807b2650b06004a17b500d0dd71e9ef3c5aa567a16d464736f6c634300060c0033", + "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 NOT NUMBER 0xD7 LOG2 0x4D 0x29 SELFDESTRUCT PUSH15 0x71807B2650B06004A17B500D0DD71E SWAP15 RETURN 0xC5 0xAA JUMP PUSH27 0x16D464736F6C634300060C00330000000000000000000000000000 ", + "sourceMap": "58:2636:8:-:0;;;;;;;;" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "17200", + "executionCost": "97", + "totalCost": "17297" + }, + "internal": { + "add(int256,int256)": "infinite", + "div(int256,int256)": "infinite", + "mul(int256,int256)": "infinite", + "sub(int256,int256)": "infinite", + "toUInt256(int256)": "infinite" + } + }, + "methodIdentifiers": {} + }, + "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/libraries/SignedSafeMath.sol\":\"SignedSafeMath\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/libraries/SignedSafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\n\\nlibrary SignedSafeMath {\\n int256 constant private _INT256_MIN = -2**255;\\n\\n /**\\n * @dev Returns the multiplication of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(int256 a, int256 b) internal pure returns (int256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) {\\n return 0;\\n }\\n\\n require(!(a == -1 && b == _INT256_MIN), \\\"SignedSafeMath: multiplication overflow\\\");\\n\\n int256 c = a * b;\\n require(c / a == b, \\\"SignedSafeMath: multiplication overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two signed integers. Reverts on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(int256 a, int256 b) internal pure returns (int256) {\\n require(b != 0, \\\"SignedSafeMath: division by zero\\\");\\n require(!(b == -1 && a == _INT256_MIN), \\\"SignedSafeMath: division overflow\\\");\\n\\n int256 c = a / b;\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(int256 a, int256 b) internal pure returns (int256) {\\n int256 c = a - b;\\n require((b >= 0 && c <= a) || (b < 0 && c > a), \\\"SignedSafeMath: subtraction overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the addition of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(int256 a, int256 b) internal pure returns (int256) {\\n int256 c = a + b;\\n require((b >= 0 && c >= a) || (b < 0 && c < a), \\\"SignedSafeMath: addition overflow\\\");\\n\\n return c;\\n }\\n\\n function toUInt256(int256 a) internal pure returns (uint256) {\\n require(a >= 0, \\\"Integer < 0\\\");\\n return uint256(a);\\n }\\n}\",\"keccak256\":\"0x4991beb21b224dfcdc3d251e0a60fdc304d4f6b699b2c35d08f3974e5b84c86a\",\"license\":\"MIT\"}},\"version\":1}", + "storageLayout": { + "storage": [], + "types": null + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + } + }, + "contracts/mocks/ComplexRewarder.sol": { + "ComplexRewarder": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "_rewardToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_tokenPerBlock", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_MASTERCHEF_V2", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [], + "name": "LogInit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "LogOnReward", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "allocPoint", + "type": "uint256" + } + ], + "name": "LogPoolAddition", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "allocPoint", + "type": "uint256" + } + ], + "name": "LogSetPool", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "lastRewardBlock", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpSupply", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "accSushiPerShare", + "type": "uint256" + } + ], + "name": "LogUpdatePool", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "allocPoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_pid", + "type": "uint256" + } + ], + "name": "add", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "claimOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "pids", + "type": "uint256[]" + } + ], + "name": "massUpdatePools", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lpToken", + "type": "uint256" + } + ], + "name": "onSushiReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_pid", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_user", + "type": "address" + } + ], + "name": "pendingToken", + "outputs": [ + { + "internalType": "uint256", + "name": "pending", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "pendingTokens", + "outputs": [ + { + "internalType": "contract IERC20[]", + "name": "rewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "rewardAmounts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "poolIds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "poolInfo", + "outputs": [ + { + "internalType": "uint128", + "name": "accSushiPerShare", + "type": "uint128" + }, + { + "internalType": "uint64", + "name": "lastRewardBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "allocPoint", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poolLength", + "outputs": [ + { + "internalType": "uint256", + "name": "pools", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_pid", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_allocPoint", + "type": "uint256" + } + ], + "name": "set", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tokenPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + }, + { + "internalType": "bool", + "name": "direct", + "type": "bool" + }, + { + "internalType": "bool", + "name": "renounce", + "type": "bool" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pid", + "type": "uint256" + } + ], + "name": "updatePool", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "accSushiPerShare", + "type": "uint128" + }, + { + "internalType": "uint64", + "name": "lastRewardBlock", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "allocPoint", + "type": "uint64" + } + ], + "internalType": "struct ComplexRewarder.PoolInfo", + "name": "pool", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "userInfo", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardDebt", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "author": "@0xKeno", + "kind": "dev", + "methods": { + "add(uint256,uint256)": { + "params": { + "_pid": "Pid on MCV2", + "allocPoint": "AP of the new pool." + } + }, + "massUpdatePools(uint256[])": { + "params": { + "pids": "Pool IDs of all to be updated. Make sure to update all active pools." + } + }, + "pendingToken(uint256,address)": { + "params": { + "_pid": "The index of the pool. See `poolInfo`.", + "_user": "Address of user." + }, + "returns": { + "pending": "SUSHI reward for a given user." + } + }, + "set(uint256,uint256)": { + "params": { + "_allocPoint": "New AP of the pool.", + "_pid": "The index of the pool. See `poolInfo`." + } + }, + "updatePool(uint256)": { + "params": { + "pid": "The index of the pool. See `poolInfo`." + }, + "returns": { + "pool": "Returns the pool that was updated." + } + } + }, + "stateVariables": { + "totalAllocPoint": { + "details": "Total allocation points. Must be the sum of all allocation points in all pools." + } + }, + "version": 1 + }, + "evm": { + "bytecode": { + "linkReferences": {}, + "object": "60c060405234801561001057600080fd5b50604051620018673803806200186783398101604081905261003191610095565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606093841b811660805260069290925590911b1660a0526100ef565b6000806000606084860312156100a9578283fd5b83516100b4816100d7565b6020850151604086015191945092506100cc816100d7565b809150509250925092565b6001600160a01b03811681146100ec57600080fd5b50565b60805160601c60a05160601c61173562000132600039806104fb5280610590528061080052806108955280610c7a525080610d2b5280610e3352506117356000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806357a5b58c116100975780638da5cb5b116100665780638da5cb5b146101fc57806393f1a40b14610211578063d63b3c4914610232578063e30c39781461025357610100565b806357a5b58c146101b057806369883b4e146101c3578063771602f7146101d65780638bf63742146101e957610100565b80634198709a116100d35780634198709a1461016d57806348e43af4146101755780634e71e0c81461018857806351eb05a61461019057610100565b8063078dfbe714610105578063081e3eda1461011a5780631526fe27146101385780631ab06ee51461015a575b600080fd5b6101186101133660046110ef565b61025b565b005b61012261034a565b60405161012f9190611698565b60405180910390f35b61014b6101463660046111e6565b610350565b60405161012f9392919061166e565b6101186101683660046112cd565b610387565b610122610466565b610122610183366004611216565b61046c565b6101186106fa565b6101a361019e3660046111e6565b610787565b60405161012f9190611635565b6101186101be366004611139565b610a85565b6101226101d13660046111e6565b610abb565b6101186101e43660046112cd565b610ad9565b6101186101f7366004611245565b610c6f565b610204610dd8565b60405161012f919061132f565b61022461021f366004611216565b610de7565b60405161012f9291906116a1565b610245610240366004611296565b610e0b565b60405161012f92919061135c565b610204610eca565b6000546001600160a01b0316331461028e5760405162461bcd60e51b81526004016102859061155d565b60405180910390fd5b8115610329576001600160a01b0383161515806102a85750805b6102c45760405162461bcd60e51b8152600401610285906114c0565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b031991821617909155600180549091169055610345565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b6002602052600090815260409020546001600160801b038116906001600160401b03600160801b8204811691600160c01b90041683565b6000546001600160a01b031633146103b15760405162461bcd60e51b81526004016102859061155d565b6000828152600260205260409020546005546103e89183916103e291600160c01b90046001600160401b0316610ed9565b90610f02565b6005556103f481610f25565b6000838152600260205260409081902080546001600160401b0393909316600160c01b026001600160c01b03909316929092179091555182907f942cc7e17a17c164bd977f32ab8c54265d5b9d481e4e352bf874f1e568874e7c9061045a908490611698565b60405180910390a25050565b60065481565b60006104766110cf565b506000838152600260209081526040808320815160608101835290546001600160801b0380821683526001600160401b03600160801b8304811684870152600160c01b9092049091168284015287855260048085528386206001600160a01b03808a1688529552838620835194516378ed5d1f60e01b815293969095949092169391927f0000000000000000000000000000000000000000000000000000000000000000909216916378ed5d1f91610530918b9101611698565b60206040518083038186803b15801561054857600080fd5b505afa15801561055c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058091906111ca565b6001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016105cb919061132f565b60206040518083038186803b1580156105e357600080fd5b505afa1580156105f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061b91906111fe565b905083602001516001600160401b03164311801561063857508015155b156106c457600061065f85602001516001600160401b031643610ed990919063ffffffff16565b9050600060055461069287604001516001600160401b031661068c60065486610f5290919063ffffffff16565b90610f52565b8161069957fe5b0490506106bf836106af8364e8d4a51000610f52565b816106b657fe5b86919004610f02565b935050505b600183015483546106ef919064e8d4a51000906106e19086610f52565b816106e857fe5b0490610ed9565b979650505050505050565b6001546001600160a01b03163381146107255760405162461bcd60e51b815260040161028590611592565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b61078f6110cf565b50600081815260026020908152604091829020825160608101845290546001600160801b03811682526001600160401b03600160801b82048116938301849052600160c01b9091041692810192909252431115610a80576040516378ed5d1f60e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906378ed5d1f90610835908690600401611698565b60206040518083038186803b15801561084d57600080fd5b505afa158015610861573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088591906111ca565b6001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016108d0919061132f565b60206040518083038186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092091906111fe565b905080156109c357600061094a83602001516001600160401b031643610ed990919063ffffffff16565b9050600060055461097785604001516001600160401b031661068c60065486610f5290919063ffffffff16565b8161097e57fe5b0490506109b56109a4846109978464e8d4a51000610f52565b8161099e57fe5b04610f89565b85516001600160801b031690610fb2565b6001600160801b0316845250505b6109cc43610f25565b6001600160401b03908116602084810191825260008681526002909152604090819020855181549351838801516001600160801b03199095166001600160801b0383161767ffffffffffffffff60801b1916600160801b82881602176001600160c01b0316600160c01b95909616949094029490941790555185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad35392610a7692909186916116af565b60405180910390a2505b919050565b8060005b81811015610ab557610aac848483818110610aa057fe5b90506020020135610787565b50600101610a89565b50505050565b60038181548110610ac857fe5b600091825260209091200154905081565b6000546001600160a01b03163314610b035760405162461bcd60e51b81526004016102859061155d565b600081815260026020526040902054600160801b90046001600160401b031615610b3f5760405162461bcd60e51b81526004016102859061141b565b6005544390610b4e9084610f02565b60055560408051606081019091526000815260208101610b6d83610f25565b6001600160401b03168152602001610b8485610f25565b6001600160401b0390811690915260008481526002602090815260408083208551815493870151968301518616600160c01b026001600160c01b0397909616600160801b0267ffffffffffffffff60801b196001600160801b039092166001600160801b031990951694909417169290921794909416929092179091556003805460018101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018390555182907f38410508059921573ab9ebdca2a5034be738d236366b8f32de4434ea95ed3c8190610c62908690611698565b60405180910390a2505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cb75760405162461bcd60e51b81526004016102859061147f565b610cbf6110cf565b610cc886610787565b60008781526004602090815260408083206001600160a01b038a168452909152812080549293509115610d5257600182015483518354610d1c929164e8d4a51000916106e1916001600160801b0316610f52565b9050610d526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168783610fe1565b838255825164e8d4a5100090610d729086906001600160801b0316610f52565b81610d7957fe5b048260010181905550856001600160a01b031688886001600160a01b03167f2ece88ca2bc08dd018db50e1d25a20bf1241e5fab1c396caa51f01a54bd2f75b84604051610dc69190611698565b60405180910390a45050505050505050565b6000546001600160a01b031681565b60046020908152600092835260408084209091529082529020805460019091015482565b60408051600180825281830190925260609182918291602080830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110610e5f57fe5b6001600160a01b039290921660209283029190910190910152604080516001808252818301909252606091816020016020820280368337019050509050610ea6878761046c565b81600081518110610eb357fe5b602090810291909101015290969095509350505050565b6001546001600160a01b031681565b80820382811115610efc5760405162461bcd60e51b8152600401610285906113ec565b92915050565b81810181811015610efc5760405162461bcd60e51b815260040161028590611526565b60006001600160401b03821115610f4e5760405162461bcd60e51b8152600401610285906115c7565b5090565b6000811580610f6d57505080820282828281610f6a57fe5b04145b610efc5760405162461bcd60e51b8152600401610285906115fe565b60006001600160801b03821115610f4e5760405162461bcd60e51b8152600401610285906114ef565b8181016001600160801b038083169082161015610efc5760405162461bcd60e51b815260040161028590611526565b60006060846001600160a01b031663a9059cbb8585604051602401611007929190611343565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161104091906112f6565b6000604051808303816000865af19150503d806000811461107d576040519150601f19603f3d011682016040523d82523d6000602084013e611082565b606091505b50915091508180156110ac5750805115806110ac5750808060200190518101906110ac91906111a7565b6110c85760405162461bcd60e51b815260040161028590611448565b5050505050565b604080516060810182526000808252602082018190529181019190915290565b600080600060608486031215611103578283fd5b833561110e816116d9565b9250602084013561111e816116f1565b9150604084013561112e816116f1565b809150509250925092565b6000806020838503121561114b578182fd5b82356001600160401b0380821115611161578384fd5b818501915085601f830112611174578384fd5b813581811115611182578485fd5b8660208083028501011115611195578485fd5b60209290920196919550909350505050565b6000602082840312156111b8578081fd5b81516111c3816116f1565b9392505050565b6000602082840312156111db578081fd5b81516111c3816116d9565b6000602082840312156111f7578081fd5b5035919050565b60006020828403121561120f578081fd5b5051919050565b60008060408385031215611228578182fd5b82359150602083013561123a816116d9565b809150509250929050565b600080600080600060a0868803121561125c578081fd5b85359450602086013561126e816116d9565b9350604086013561127e816116d9565b94979396509394606081013594506080013592915050565b6000806000606084860312156112aa578283fd5b8335925060208401356112bc816116d9565b929592945050506040919091013590565b600080604083850312156112df578182fd5b50508035926020909101359150565b815260200190565b60008251815b8181101561131657602081860181015185830152016112fc565b818111156113245782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b8281101561139e5781516001600160a01b031684529284019290840190600101611379565b505050838103828501528085516113b58184611698565b91508387019250845b818110156113df576113d18385516112ee565b9385019392506001016113be565b5090979650505050505050565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b602080825260139082015272506f6f6c20616c72656164792065786973747360681b604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f4f6e6c79204d4356322063616e2063616c6c20746869732066756e6374696f6e6040820152601760f91b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6001600160a01b03811681146116ee57600080fd5b50565b80151581146116ee57600080fdfea26469706673582212205b02e67e50616308de8a2a0ea092220cbb6bab154c4c12313ce97766220ac5f864736f6c634300060c0033", + "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1867 CODESIZE SUB DUP1 PUSH3 0x1867 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x31 SWAP2 PUSH2 0x95 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 DUP3 SWAP1 LOG3 PUSH1 0x1 PUSH1 0x1 PUSH1 0x60 SHL SUB NOT PUSH1 0x60 SWAP4 DUP5 SHL DUP2 AND PUSH1 0x80 MSTORE PUSH1 0x6 SWAP3 SWAP1 SWAP3 SSTORE SWAP1 SWAP2 SHL AND PUSH1 0xA0 MSTORE PUSH2 0xEF JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xA9 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 MLOAD PUSH2 0xB4 DUP2 PUSH2 0xD7 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x40 DUP7 ADD MLOAD SWAP2 SWAP5 POP SWAP3 POP PUSH2 0xCC DUP2 PUSH2 0xD7 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0xEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x60 SHR PUSH1 0xA0 MLOAD PUSH1 0x60 SHR PUSH2 0x1735 PUSH3 0x132 PUSH1 0x0 CODECOPY DUP1 PUSH2 0x4FB MSTORE DUP1 PUSH2 0x590 MSTORE DUP1 PUSH2 0x800 MSTORE DUP1 PUSH2 0x895 MSTORE DUP1 PUSH2 0xC7A MSTORE POP DUP1 PUSH2 0xD2B MSTORE DUP1 PUSH2 0xE33 MSTORE POP PUSH2 0x1735 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x100 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57A5B58C GT PUSH2 0x97 JUMPI DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0x93F1A40B EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xD63B3C49 EQ PUSH2 0x232 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x253 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x57A5B58C EQ PUSH2 0x1B0 JUMPI DUP1 PUSH4 0x69883B4E EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x771602F7 EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x8BF63742 EQ PUSH2 0x1E9 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x4198709A GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x4198709A EQ PUSH2 0x16D JUMPI DUP1 PUSH4 0x48E43AF4 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0x51EB05A6 EQ PUSH2 0x190 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x78DFBE7 EQ PUSH2 0x105 JUMPI DUP1 PUSH4 0x81E3EDA EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x1526FE27 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x1AB06EE5 EQ PUSH2 0x15A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x113 CALLDATASIZE PUSH1 0x4 PUSH2 0x10EF JUMP JUMPDEST PUSH2 0x25B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x122 PUSH2 0x34A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x14B PUSH2 0x146 CALLDATASIZE PUSH1 0x4 PUSH2 0x11E6 JUMP JUMPDEST PUSH2 0x350 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x166E JUMP JUMPDEST PUSH2 0x118 PUSH2 0x168 CALLDATASIZE PUSH1 0x4 PUSH2 0x12CD JUMP JUMPDEST PUSH2 0x387 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x466 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x183 CALLDATASIZE PUSH1 0x4 PUSH2 0x1216 JUMP JUMPDEST PUSH2 0x46C JUMP JUMPDEST PUSH2 0x118 PUSH2 0x6FA JUMP JUMPDEST PUSH2 0x1A3 PUSH2 0x19E CALLDATASIZE PUSH1 0x4 PUSH2 0x11E6 JUMP JUMPDEST PUSH2 0x787 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x1635 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x1BE CALLDATASIZE PUSH1 0x4 PUSH2 0x1139 JUMP JUMPDEST PUSH2 0xA85 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x1D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x11E6 JUMP JUMPDEST PUSH2 0xABB JUMP JUMPDEST PUSH2 0x118 PUSH2 0x1E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x12CD JUMP JUMPDEST PUSH2 0xAD9 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x1F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1245 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0x204 PUSH2 0xDD8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x132F JUMP JUMPDEST PUSH2 0x224 PUSH2 0x21F CALLDATASIZE PUSH1 0x4 PUSH2 0x1216 JUMP JUMPDEST PUSH2 0xDE7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP3 SWAP2 SWAP1 PUSH2 0x16A1 JUMP JUMPDEST PUSH2 0x245 PUSH2 0x240 CALLDATASIZE PUSH1 0x4 PUSH2 0x1296 JUMP JUMPDEST PUSH2 0xE0B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP3 SWAP2 SWAP1 PUSH2 0x135C JUMP JUMPDEST PUSH2 0x204 PUSH2 0xECA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x155D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x329 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO DUP1 PUSH2 0x2A8 JUMPI POP DUP1 JUMPDEST PUSH2 0x2C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x14C0 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH2 0x345 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV AND DUP4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x155D JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x5 SLOAD PUSH2 0x3E8 SWAP2 DUP4 SWAP2 PUSH2 0x3E2 SWAP2 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0xED9 JUMP JUMPDEST SWAP1 PUSH2 0xF02 JUMP JUMPDEST PUSH1 0x5 SSTORE PUSH2 0x3F4 DUP2 PUSH2 0xF25 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0xC0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD DUP3 SWAP1 PUSH32 0x942CC7E17A17C164BD977F32AB8C54265D5B9D481E4E352BF874F1E568874E7C SWAP1 PUSH2 0x45A SWAP1 DUP5 SWAP1 PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x476 PUSH2 0x10CF JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD DUP4 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP4 DIV DUP2 AND DUP5 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP3 DIV SWAP1 SWAP2 AND DUP3 DUP5 ADD MSTORE DUP8 DUP6 MSTORE PUSH1 0x4 DUP1 DUP6 MSTORE DUP4 DUP7 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND DUP9 MSTORE SWAP6 MSTORE DUP4 DUP7 KECCAK256 DUP4 MLOAD SWAP5 MLOAD PUSH4 0x78ED5D1F PUSH1 0xE0 SHL DUP2 MSTORE SWAP4 SWAP7 SWAP1 SWAP6 SWAP5 SWAP1 SWAP3 AND SWAP4 SWAP2 SWAP3 PUSH32 0x0 SWAP1 SWAP3 AND SWAP2 PUSH4 0x78ED5D1F SWAP2 PUSH2 0x530 SWAP2 DUP12 SWAP2 ADD PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x548 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x55C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x580 SWAP2 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5CB SWAP2 SWAP1 PUSH2 0x132F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x61B SWAP2 SWAP1 PUSH2 0x11FE JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER GT DUP1 ISZERO PUSH2 0x638 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x6C4 JUMPI PUSH1 0x0 PUSH2 0x65F DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER PUSH2 0xED9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x5 SLOAD PUSH2 0x692 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0x68C PUSH1 0x6 SLOAD DUP7 PUSH2 0xF52 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0x699 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x6BF DUP4 PUSH2 0x6AF DUP4 PUSH5 0xE8D4A51000 PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0x6B6 JUMPI INVALID JUMPDEST DUP7 SWAP2 SWAP1 DIV PUSH2 0xF02 JUMP JUMPDEST SWAP4 POP POP POP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD DUP4 SLOAD PUSH2 0x6EF SWAP2 SWAP1 PUSH5 0xE8D4A51000 SWAP1 PUSH2 0x6E1 SWAP1 DUP7 PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0x6E8 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0xED9 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x725 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x1592 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x78F PUSH2 0x10CF JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP4 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP2 DIV AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE NUMBER GT ISZERO PUSH2 0xA80 JUMPI PUSH1 0x40 MLOAD PUSH4 0x78ED5D1F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x78ED5D1F SWAP1 PUSH2 0x835 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x84D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x861 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x885 SWAP2 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8D0 SWAP2 SWAP1 PUSH2 0x132F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x920 SWAP2 SWAP1 PUSH2 0x11FE JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x9C3 JUMPI PUSH1 0x0 PUSH2 0x94A DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER PUSH2 0xED9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x5 SLOAD PUSH2 0x977 DUP6 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0x68C PUSH1 0x6 SLOAD DUP7 PUSH2 0xF52 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x97E JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x9B5 PUSH2 0x9A4 DUP5 PUSH2 0x997 DUP5 PUSH5 0xE8D4A51000 PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0x99E JUMPI INVALID JUMPDEST DIV PUSH2 0xF89 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 PUSH2 0xFB2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP5 MSTORE POP POP JUMPDEST PUSH2 0x9CC NUMBER PUSH2 0xF25 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND PUSH1 0x20 DUP5 DUP2 ADD SWAP2 DUP3 MSTORE PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP6 MLOAD DUP2 SLOAD SWAP4 MLOAD DUP4 DUP9 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND OR PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT AND PUSH1 0x1 PUSH1 0x80 SHL DUP3 DUP9 AND MUL OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB AND PUSH1 0x1 PUSH1 0xC0 SHL SWAP6 SWAP1 SWAP7 AND SWAP5 SWAP1 SWAP5 MUL SWAP5 SWAP1 SWAP5 OR SWAP1 SSTORE MLOAD DUP6 SWAP3 PUSH32 0xFC9545022A542541AD085D091FB09A2AB36FEE366A4576AB63714EA907AD353 SWAP3 PUSH2 0xA76 SWAP3 SWAP1 SWAP2 DUP7 SWAP2 PUSH2 0x16AF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAB5 JUMPI PUSH2 0xAAC DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xAA0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x787 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xA89 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xAC8 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x155D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND ISZERO PUSH2 0xB3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x141B JUMP JUMPDEST PUSH1 0x5 SLOAD NUMBER SWAP1 PUSH2 0xB4E SWAP1 DUP5 PUSH2 0xF02 JUMP JUMPDEST PUSH1 0x5 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH2 0xB6D DUP4 PUSH2 0xF25 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB84 DUP6 PUSH2 0xF25 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 MLOAD DUP2 SLOAD SWAP4 DUP8 ADD MLOAD SWAP7 DUP4 ADD MLOAD DUP7 AND PUSH1 0x1 PUSH1 0xC0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB SWAP8 SWAP1 SWAP7 AND PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR AND SWAP3 SWAP1 SWAP3 OR SWAP5 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP2 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP4 SWAP1 SSTORE MLOAD DUP3 SWAP1 PUSH32 0x38410508059921573AB9EBDCA2A5034BE738D236366B8F32DE4434EA95ED3C81 SWAP1 PUSH2 0xC62 SWAP1 DUP7 SWAP1 PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xCB7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x147F JUMP JUMPDEST PUSH2 0xCBF PUSH2 0x10CF JUMP JUMPDEST PUSH2 0xCC8 DUP7 PUSH2 0x787 JUMP JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP4 POP SWAP2 ISZERO PUSH2 0xD52 JUMPI PUSH1 0x1 DUP3 ADD SLOAD DUP4 MLOAD DUP4 SLOAD PUSH2 0xD1C SWAP3 SWAP2 PUSH5 0xE8D4A51000 SWAP2 PUSH2 0x6E1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0xF52 JUMP JUMPDEST SWAP1 POP PUSH2 0xD52 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP8 DUP4 PUSH2 0xFE1 JUMP JUMPDEST DUP4 DUP3 SSTORE DUP3 MLOAD PUSH5 0xE8D4A51000 SWAP1 PUSH2 0xD72 SWAP1 DUP7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0xD79 JUMPI INVALID JUMPDEST DIV DUP3 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2ECE88CA2BC08DD018DB50E1D25A20BF1241E5FAB1C396CAA51F01A54BD2F75B DUP5 PUSH1 0x40 MLOAD PUSH2 0xDC6 SWAP2 SWAP1 PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH32 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE5F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0xEA6 DUP8 DUP8 PUSH2 0x46C JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xEB3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x13EC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x1526 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0xF4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x15C7 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF6D JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF6A JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xEFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x15FE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 GT ISZERO PUSH2 0xF4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x14EF JUMP JUMPDEST DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND SWAP1 DUP3 AND LT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x1526 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1007 SWAP3 SWAP2 SWAP1 PUSH2 0x1343 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x1040 SWAP2 SWAP1 PUSH2 0x12F6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x107D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1082 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x10AC JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x10AC JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x10AC SWAP2 SWAP1 PUSH2 0x11A7 JUMP JUMPDEST PUSH2 0x10C8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x1448 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1103 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x110E DUP2 PUSH2 0x16D9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x111E DUP2 PUSH2 0x16F1 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x112E DUP2 PUSH2 0x16F1 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x114B JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x1161 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1174 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1182 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x1195 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11B8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x11C3 DUP2 PUSH2 0x16F1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11DB JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x11C3 DUP2 PUSH2 0x16D9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11F7 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x120F JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1228 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x123A DUP2 PUSH2 0x16D9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x125C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x126E DUP2 PUSH2 0x16D9 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x127E DUP2 PUSH2 0x16D9 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x12AA JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x12BC DUP2 PUSH2 0x16D9 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x12DF JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1316 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x12FC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1324 JUMPI DUP3 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP4 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x60 DUP5 ADD SWAP1 DUP3 DUP8 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x139E JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1379 JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE DUP1 DUP6 MLOAD PUSH2 0x13B5 DUP2 DUP5 PUSH2 0x1698 JUMP JUMPDEST SWAP2 POP DUP4 DUP8 ADD SWAP3 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x13DF JUMPI PUSH2 0x13D1 DUP4 DUP6 MLOAD PUSH2 0x12EE JUMP JUMPDEST SWAP4 DUP6 ADD SWAP4 SWAP3 POP PUSH1 0x1 ADD PUSH2 0x13BE JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x426F72696E674D6174683A20556E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x13 SWAP1 DUP3 ADD MSTORE PUSH19 0x506F6F6C20616C726561647920657869737473 PUSH1 0x68 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E6745524332303A205472616E73666572206661696C656400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F6E6C79204D4356322063616E2063616C6C20746869732066756E6374696F6E PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x4F776E61626C653A207A65726F2061646472657373 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A2075696E74313238204F766572666C6F7700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20416464204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C657220213D2070656E64696E67206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A2075696E743634204F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A204D756C204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP3 DUP4 ADD MLOAD AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x16EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x16EE JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST MUL 0xE6 PUSH31 0x50616308DE8A2A0EA092220CBB6BAB154C4C12313CE97766220AC5F864736F PUSH13 0x634300060C0033000000000000 ", + "sourceMap": "399:6863:9:-:0;;;2028:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;639:5:1;:18;;-1:-1:-1;;;;;;639:18:1;647:10;639:18;;;;;673:44;;647:10;;639:5;673:44;;639:5;;673:44;-1:-1:-1;;;;;;2127:26:9;;;;;;;;2163:13;:30;;;;2203;;;;;;399:6863;;456:563:-1;;;;619:2;607:9;598:7;594:23;590:32;587:2;;;-1:-1;;625:12;587:2;244:6;238:13;256:47;297:5;256:47;:::i;:::-;802:2;852:22;;393:13;921:2;971:22;;83:13;677:88;;-1:-1;393:13;-1:-1;101:33;83:13;101:33;:::i;:::-;929:74;;;;581:438;;;;;:::o;1443:117::-;-1:-1;;;;;1298:54;;1502:35;;1492:2;;1551:1;;1541:12;1492:2;1486:74;:::o;:::-;399:6863:9;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "immutableReferences": { + "2389": [ + { + "length": 32, + "start": 3371 + }, + { + "length": 32, + "start": 3635 + } + ], + "2426": [ + { + "length": 32, + "start": 1275 + }, + { + "length": 32, + "start": 1424 + }, + { + "length": 32, + "start": 2048 + }, + { + "length": 32, + "start": 2197 + }, + { + "length": 32, + "start": 3194 + } + ] + }, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106101005760003560e01c806357a5b58c116100975780638da5cb5b116100665780638da5cb5b146101fc57806393f1a40b14610211578063d63b3c4914610232578063e30c39781461025357610100565b806357a5b58c146101b057806369883b4e146101c3578063771602f7146101d65780638bf63742146101e957610100565b80634198709a116100d35780634198709a1461016d57806348e43af4146101755780634e71e0c81461018857806351eb05a61461019057610100565b8063078dfbe714610105578063081e3eda1461011a5780631526fe27146101385780631ab06ee51461015a575b600080fd5b6101186101133660046110ef565b61025b565b005b61012261034a565b60405161012f9190611698565b60405180910390f35b61014b6101463660046111e6565b610350565b60405161012f9392919061166e565b6101186101683660046112cd565b610387565b610122610466565b610122610183366004611216565b61046c565b6101186106fa565b6101a361019e3660046111e6565b610787565b60405161012f9190611635565b6101186101be366004611139565b610a85565b6101226101d13660046111e6565b610abb565b6101186101e43660046112cd565b610ad9565b6101186101f7366004611245565b610c6f565b610204610dd8565b60405161012f919061132f565b61022461021f366004611216565b610de7565b60405161012f9291906116a1565b610245610240366004611296565b610e0b565b60405161012f92919061135c565b610204610eca565b6000546001600160a01b0316331461028e5760405162461bcd60e51b81526004016102859061155d565b60405180910390fd5b8115610329576001600160a01b0383161515806102a85750805b6102c45760405162461bcd60e51b8152600401610285906114c0565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b031991821617909155600180549091169055610345565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b6002602052600090815260409020546001600160801b038116906001600160401b03600160801b8204811691600160c01b90041683565b6000546001600160a01b031633146103b15760405162461bcd60e51b81526004016102859061155d565b6000828152600260205260409020546005546103e89183916103e291600160c01b90046001600160401b0316610ed9565b90610f02565b6005556103f481610f25565b6000838152600260205260409081902080546001600160401b0393909316600160c01b026001600160c01b03909316929092179091555182907f942cc7e17a17c164bd977f32ab8c54265d5b9d481e4e352bf874f1e568874e7c9061045a908490611698565b60405180910390a25050565b60065481565b60006104766110cf565b506000838152600260209081526040808320815160608101835290546001600160801b0380821683526001600160401b03600160801b8304811684870152600160c01b9092049091168284015287855260048085528386206001600160a01b03808a1688529552838620835194516378ed5d1f60e01b815293969095949092169391927f0000000000000000000000000000000000000000000000000000000000000000909216916378ed5d1f91610530918b9101611698565b60206040518083038186803b15801561054857600080fd5b505afa15801561055c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058091906111ca565b6001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016105cb919061132f565b60206040518083038186803b1580156105e357600080fd5b505afa1580156105f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061b91906111fe565b905083602001516001600160401b03164311801561063857508015155b156106c457600061065f85602001516001600160401b031643610ed990919063ffffffff16565b9050600060055461069287604001516001600160401b031661068c60065486610f5290919063ffffffff16565b90610f52565b8161069957fe5b0490506106bf836106af8364e8d4a51000610f52565b816106b657fe5b86919004610f02565b935050505b600183015483546106ef919064e8d4a51000906106e19086610f52565b816106e857fe5b0490610ed9565b979650505050505050565b6001546001600160a01b03163381146107255760405162461bcd60e51b815260040161028590611592565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b61078f6110cf565b50600081815260026020908152604091829020825160608101845290546001600160801b03811682526001600160401b03600160801b82048116938301849052600160c01b9091041692810192909252431115610a80576040516378ed5d1f60e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906378ed5d1f90610835908690600401611698565b60206040518083038186803b15801561084d57600080fd5b505afa158015610861573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088591906111ca565b6001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016108d0919061132f565b60206040518083038186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092091906111fe565b905080156109c357600061094a83602001516001600160401b031643610ed990919063ffffffff16565b9050600060055461097785604001516001600160401b031661068c60065486610f5290919063ffffffff16565b8161097e57fe5b0490506109b56109a4846109978464e8d4a51000610f52565b8161099e57fe5b04610f89565b85516001600160801b031690610fb2565b6001600160801b0316845250505b6109cc43610f25565b6001600160401b03908116602084810191825260008681526002909152604090819020855181549351838801516001600160801b03199095166001600160801b0383161767ffffffffffffffff60801b1916600160801b82881602176001600160c01b0316600160c01b95909616949094029490941790555185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad35392610a7692909186916116af565b60405180910390a2505b919050565b8060005b81811015610ab557610aac848483818110610aa057fe5b90506020020135610787565b50600101610a89565b50505050565b60038181548110610ac857fe5b600091825260209091200154905081565b6000546001600160a01b03163314610b035760405162461bcd60e51b81526004016102859061155d565b600081815260026020526040902054600160801b90046001600160401b031615610b3f5760405162461bcd60e51b81526004016102859061141b565b6005544390610b4e9084610f02565b60055560408051606081019091526000815260208101610b6d83610f25565b6001600160401b03168152602001610b8485610f25565b6001600160401b0390811690915260008481526002602090815260408083208551815493870151968301518616600160c01b026001600160c01b0397909616600160801b0267ffffffffffffffff60801b196001600160801b039092166001600160801b031990951694909417169290921794909416929092179091556003805460018101825591527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018390555182907f38410508059921573ab9ebdca2a5034be738d236366b8f32de4434ea95ed3c8190610c62908690611698565b60405180910390a2505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cb75760405162461bcd60e51b81526004016102859061147f565b610cbf6110cf565b610cc886610787565b60008781526004602090815260408083206001600160a01b038a168452909152812080549293509115610d5257600182015483518354610d1c929164e8d4a51000916106e1916001600160801b0316610f52565b9050610d526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168783610fe1565b838255825164e8d4a5100090610d729086906001600160801b0316610f52565b81610d7957fe5b048260010181905550856001600160a01b031688886001600160a01b03167f2ece88ca2bc08dd018db50e1d25a20bf1241e5fab1c396caa51f01a54bd2f75b84604051610dc69190611698565b60405180910390a45050505050505050565b6000546001600160a01b031681565b60046020908152600092835260408084209091529082529020805460019091015482565b60408051600180825281830190925260609182918291602080830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110610e5f57fe5b6001600160a01b039290921660209283029190910190910152604080516001808252818301909252606091816020016020820280368337019050509050610ea6878761046c565b81600081518110610eb357fe5b602090810291909101015290969095509350505050565b6001546001600160a01b031681565b80820382811115610efc5760405162461bcd60e51b8152600401610285906113ec565b92915050565b81810181811015610efc5760405162461bcd60e51b815260040161028590611526565b60006001600160401b03821115610f4e5760405162461bcd60e51b8152600401610285906115c7565b5090565b6000811580610f6d57505080820282828281610f6a57fe5b04145b610efc5760405162461bcd60e51b8152600401610285906115fe565b60006001600160801b03821115610f4e5760405162461bcd60e51b8152600401610285906114ef565b8181016001600160801b038083169082161015610efc5760405162461bcd60e51b815260040161028590611526565b60006060846001600160a01b031663a9059cbb8585604051602401611007929190611343565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161104091906112f6565b6000604051808303816000865af19150503d806000811461107d576040519150601f19603f3d011682016040523d82523d6000602084013e611082565b606091505b50915091508180156110ac5750805115806110ac5750808060200190518101906110ac91906111a7565b6110c85760405162461bcd60e51b815260040161028590611448565b5050505050565b604080516060810182526000808252602082018190529181019190915290565b600080600060608486031215611103578283fd5b833561110e816116d9565b9250602084013561111e816116f1565b9150604084013561112e816116f1565b809150509250925092565b6000806020838503121561114b578182fd5b82356001600160401b0380821115611161578384fd5b818501915085601f830112611174578384fd5b813581811115611182578485fd5b8660208083028501011115611195578485fd5b60209290920196919550909350505050565b6000602082840312156111b8578081fd5b81516111c3816116f1565b9392505050565b6000602082840312156111db578081fd5b81516111c3816116d9565b6000602082840312156111f7578081fd5b5035919050565b60006020828403121561120f578081fd5b5051919050565b60008060408385031215611228578182fd5b82359150602083013561123a816116d9565b809150509250929050565b600080600080600060a0868803121561125c578081fd5b85359450602086013561126e816116d9565b9350604086013561127e816116d9565b94979396509394606081013594506080013592915050565b6000806000606084860312156112aa578283fd5b8335925060208401356112bc816116d9565b929592945050506040919091013590565b600080604083850312156112df578182fd5b50508035926020909101359150565b815260200190565b60008251815b8181101561131657602081860181015185830152016112fc565b818111156113245782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b8281101561139e5781516001600160a01b031684529284019290840190600101611379565b505050838103828501528085516113b58184611698565b91508387019250845b818110156113df576113d18385516112ee565b9385019392506001016113be565b5090979650505050505050565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b602080825260139082015272506f6f6c20616c72656164792065786973747360681b604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f4f6e6c79204d4356322063616e2063616c6c20746869732066756e6374696f6e6040820152601760f91b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6001600160a01b03811681146116ee57600080fd5b50565b80151581146116ee57600080fdfea26469706673582212205b02e67e50616308de8a2a0ea092220cbb6bab154c4c12313ce97766220ac5f864736f6c634300060c0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x100 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x57A5B58C GT PUSH2 0x97 JUMPI DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1FC JUMPI DUP1 PUSH4 0x93F1A40B EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xD63B3C49 EQ PUSH2 0x232 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x253 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x57A5B58C EQ PUSH2 0x1B0 JUMPI DUP1 PUSH4 0x69883B4E EQ PUSH2 0x1C3 JUMPI DUP1 PUSH4 0x771602F7 EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x8BF63742 EQ PUSH2 0x1E9 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x4198709A GT PUSH2 0xD3 JUMPI DUP1 PUSH4 0x4198709A EQ PUSH2 0x16D JUMPI DUP1 PUSH4 0x48E43AF4 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x4E71E0C8 EQ PUSH2 0x188 JUMPI DUP1 PUSH4 0x51EB05A6 EQ PUSH2 0x190 JUMPI PUSH2 0x100 JUMP JUMPDEST DUP1 PUSH4 0x78DFBE7 EQ PUSH2 0x105 JUMPI DUP1 PUSH4 0x81E3EDA EQ PUSH2 0x11A JUMPI DUP1 PUSH4 0x1526FE27 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0x1AB06EE5 EQ PUSH2 0x15A JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x118 PUSH2 0x113 CALLDATASIZE PUSH1 0x4 PUSH2 0x10EF JUMP JUMPDEST PUSH2 0x25B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x122 PUSH2 0x34A JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x14B PUSH2 0x146 CALLDATASIZE PUSH1 0x4 PUSH2 0x11E6 JUMP JUMPDEST PUSH2 0x350 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x166E JUMP JUMPDEST PUSH2 0x118 PUSH2 0x168 CALLDATASIZE PUSH1 0x4 PUSH2 0x12CD JUMP JUMPDEST PUSH2 0x387 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x466 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x183 CALLDATASIZE PUSH1 0x4 PUSH2 0x1216 JUMP JUMPDEST PUSH2 0x46C JUMP JUMPDEST PUSH2 0x118 PUSH2 0x6FA JUMP JUMPDEST PUSH2 0x1A3 PUSH2 0x19E CALLDATASIZE PUSH1 0x4 PUSH2 0x11E6 JUMP JUMPDEST PUSH2 0x787 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x1635 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x1BE CALLDATASIZE PUSH1 0x4 PUSH2 0x1139 JUMP JUMPDEST PUSH2 0xA85 JUMP JUMPDEST PUSH2 0x122 PUSH2 0x1D1 CALLDATASIZE PUSH1 0x4 PUSH2 0x11E6 JUMP JUMPDEST PUSH2 0xABB JUMP JUMPDEST PUSH2 0x118 PUSH2 0x1E4 CALLDATASIZE PUSH1 0x4 PUSH2 0x12CD JUMP JUMPDEST PUSH2 0xAD9 JUMP JUMPDEST PUSH2 0x118 PUSH2 0x1F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1245 JUMP JUMPDEST PUSH2 0xC6F JUMP JUMPDEST PUSH2 0x204 PUSH2 0xDD8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP2 SWAP1 PUSH2 0x132F JUMP JUMPDEST PUSH2 0x224 PUSH2 0x21F CALLDATASIZE PUSH1 0x4 PUSH2 0x1216 JUMP JUMPDEST PUSH2 0xDE7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP3 SWAP2 SWAP1 PUSH2 0x16A1 JUMP JUMPDEST PUSH2 0x245 PUSH2 0x240 CALLDATASIZE PUSH1 0x4 PUSH2 0x1296 JUMP JUMPDEST PUSH2 0xE0B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x12F SWAP3 SWAP2 SWAP1 PUSH2 0x135C JUMP JUMPDEST PUSH2 0x204 PUSH2 0xECA JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x28E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x155D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x329 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO ISZERO DUP1 PUSH2 0x2A8 JUMPI POP DUP1 JUMPDEST PUSH2 0x2C4 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x14C0 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP8 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP2 DUP3 AND OR SWAP1 SWAP2 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE PUSH2 0x345 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND OR SWAP1 SSTORE JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP2 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV AND DUP4 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x3B1 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x155D JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x5 SLOAD PUSH2 0x3E8 SWAP2 DUP4 SWAP2 PUSH2 0x3E2 SWAP2 PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0xED9 JUMP JUMPDEST SWAP1 PUSH2 0xF02 JUMP JUMPDEST PUSH1 0x5 SSTORE PUSH2 0x3F4 DUP2 PUSH2 0xF25 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 SWAP1 SWAP4 AND PUSH1 0x1 PUSH1 0xC0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE MLOAD DUP3 SWAP1 PUSH32 0x942CC7E17A17C164BD977F32AB8C54265D5B9D481E4E352BF874F1E568874E7C SWAP1 PUSH2 0x45A SWAP1 DUP5 SWAP1 PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x476 PUSH2 0x10CF JUMP JUMPDEST POP PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP2 MLOAD PUSH1 0x60 DUP2 ADD DUP4 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP3 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP4 DIV DUP2 AND DUP5 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP3 DIV SWAP1 SWAP2 AND DUP3 DUP5 ADD MSTORE DUP8 DUP6 MSTORE PUSH1 0x4 DUP1 DUP6 MSTORE DUP4 DUP7 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 AND DUP9 MSTORE SWAP6 MSTORE DUP4 DUP7 KECCAK256 DUP4 MLOAD SWAP5 MLOAD PUSH4 0x78ED5D1F PUSH1 0xE0 SHL DUP2 MSTORE SWAP4 SWAP7 SWAP1 SWAP6 SWAP5 SWAP1 SWAP3 AND SWAP4 SWAP2 SWAP3 PUSH32 0x0 SWAP1 SWAP3 AND SWAP2 PUSH4 0x78ED5D1F SWAP2 PUSH2 0x530 SWAP2 DUP12 SWAP2 ADD PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x548 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x55C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x580 SWAP2 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5CB SWAP2 SWAP1 PUSH2 0x132F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5E3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x5F7 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x61B SWAP2 SWAP1 PUSH2 0x11FE JUMP JUMPDEST SWAP1 POP DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER GT DUP1 ISZERO PUSH2 0x638 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x6C4 JUMPI PUSH1 0x0 PUSH2 0x65F DUP6 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER PUSH2 0xED9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x5 SLOAD PUSH2 0x692 DUP8 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0x68C PUSH1 0x6 SLOAD DUP7 PUSH2 0xF52 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0x699 JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x6BF DUP4 PUSH2 0x6AF DUP4 PUSH5 0xE8D4A51000 PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0x6B6 JUMPI INVALID JUMPDEST DUP7 SWAP2 SWAP1 DIV PUSH2 0xF02 JUMP JUMPDEST SWAP4 POP POP POP JUMPDEST PUSH1 0x1 DUP4 ADD SLOAD DUP4 SLOAD PUSH2 0x6EF SWAP2 SWAP1 PUSH5 0xE8D4A51000 SWAP1 PUSH2 0x6E1 SWAP1 DUP7 PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0x6E8 JUMPI INVALID JUMPDEST DIV SWAP1 PUSH2 0xED9 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER DUP2 EQ PUSH2 0x725 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x1592 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND SWAP4 SWAP3 AND SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 LOG3 PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP3 DUP4 AND OR SWAP1 SSTORE PUSH1 0x1 DUP1 SLOAD SWAP1 SWAP2 AND SWAP1 SSTORE JUMP JUMPDEST PUSH2 0x78F PUSH2 0x10CF JUMP JUMPDEST POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP3 MLOAD PUSH1 0x60 DUP2 ADD DUP5 MSTORE SWAP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP2 AND DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x1 PUSH1 0x80 SHL DUP3 DIV DUP2 AND SWAP4 DUP4 ADD DUP5 SWAP1 MSTORE PUSH1 0x1 PUSH1 0xC0 SHL SWAP1 SWAP2 DIV AND SWAP3 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE NUMBER GT ISZERO PUSH2 0xA80 JUMPI PUSH1 0x40 MLOAD PUSH4 0x78ED5D1F PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x78ED5D1F SWAP1 PUSH2 0x835 SWAP1 DUP7 SWAP1 PUSH1 0x4 ADD PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x84D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x861 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x885 SWAP2 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x70A08231 PUSH32 0x0 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8D0 SWAP2 SWAP1 PUSH2 0x132F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x8E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x8FC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x920 SWAP2 SWAP1 PUSH2 0x11FE JUMP JUMPDEST SWAP1 POP DUP1 ISZERO PUSH2 0x9C3 JUMPI PUSH1 0x0 PUSH2 0x94A DUP4 PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND NUMBER PUSH2 0xED9 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x5 SLOAD PUSH2 0x977 DUP6 PUSH1 0x40 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND PUSH2 0x68C PUSH1 0x6 SLOAD DUP7 PUSH2 0xF52 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP2 PUSH2 0x97E JUMPI INVALID JUMPDEST DIV SWAP1 POP PUSH2 0x9B5 PUSH2 0x9A4 DUP5 PUSH2 0x997 DUP5 PUSH5 0xE8D4A51000 PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0x99E JUMPI INVALID JUMPDEST DIV PUSH2 0xF89 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND SWAP1 PUSH2 0xFB2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP5 MSTORE POP POP JUMPDEST PUSH2 0x9CC NUMBER PUSH2 0xF25 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND PUSH1 0x20 DUP5 DUP2 ADD SWAP2 DUP3 MSTORE PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP1 DUP2 SWAP1 KECCAK256 DUP6 MLOAD DUP2 SLOAD SWAP4 MLOAD DUP4 DUP9 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP6 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP4 AND OR PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT AND PUSH1 0x1 PUSH1 0x80 SHL DUP3 DUP9 AND MUL OR PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB AND PUSH1 0x1 PUSH1 0xC0 SHL SWAP6 SWAP1 SWAP7 AND SWAP5 SWAP1 SWAP5 MUL SWAP5 SWAP1 SWAP5 OR SWAP1 SSTORE MLOAD DUP6 SWAP3 PUSH32 0xFC9545022A542541AD085D091FB09A2AB36FEE366A4576AB63714EA907AD353 SWAP3 PUSH2 0xA76 SWAP3 SWAP1 SWAP2 DUP7 SWAP2 PUSH2 0x16AF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xAB5 JUMPI PUSH2 0xAAC DUP5 DUP5 DUP4 DUP2 DUP2 LT PUSH2 0xAA0 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x20 MUL ADD CALLDATALOAD PUSH2 0x787 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0xA89 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x3 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xAC8 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xB03 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x155D JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0x80 SHL SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND ISZERO PUSH2 0xB3F JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x141B JUMP JUMPDEST PUSH1 0x5 SLOAD NUMBER SWAP1 PUSH2 0xB4E SWAP1 DUP5 PUSH2 0xF02 JUMP JUMPDEST PUSH1 0x5 SSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH2 0xB6D DUP4 PUSH2 0xF25 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xB84 DUP6 PUSH2 0xF25 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP6 MLOAD DUP2 SLOAD SWAP4 DUP8 ADD MLOAD SWAP7 DUP4 ADD MLOAD DUP7 AND PUSH1 0x1 PUSH1 0xC0 SHL MUL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB SWAP8 SWAP1 SWAP7 AND PUSH1 0x1 PUSH1 0x80 SHL MUL PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x80 SHL NOT PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP1 SWAP3 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB NOT SWAP1 SWAP6 AND SWAP5 SWAP1 SWAP5 OR AND SWAP3 SWAP1 SWAP3 OR SWAP5 SWAP1 SWAP5 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 DUP2 ADD DUP3 SSTORE SWAP2 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B ADD DUP4 SWAP1 SSTORE MLOAD DUP3 SWAP1 PUSH32 0x38410508059921573AB9EBDCA2A5034BE738D236366B8F32DE4434EA95ED3C81 SWAP1 PUSH2 0xC62 SWAP1 DUP7 SWAP1 PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG2 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EQ PUSH2 0xCB7 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x147F JUMP JUMPDEST PUSH2 0xCBF PUSH2 0x10CF JUMP JUMPDEST PUSH2 0xCC8 DUP7 PUSH2 0x787 JUMP JUMPDEST PUSH1 0x0 DUP8 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD SWAP3 SWAP4 POP SWAP2 ISZERO PUSH2 0xD52 JUMPI PUSH1 0x1 DUP3 ADD SLOAD DUP4 MLOAD DUP4 SLOAD PUSH2 0xD1C SWAP3 SWAP2 PUSH5 0xE8D4A51000 SWAP2 PUSH2 0x6E1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0xF52 JUMP JUMPDEST SWAP1 POP PUSH2 0xD52 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP8 DUP4 PUSH2 0xFE1 JUMP JUMPDEST DUP4 DUP3 SSTORE DUP3 MLOAD PUSH5 0xE8D4A51000 SWAP1 PUSH2 0xD72 SWAP1 DUP7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH2 0xF52 JUMP JUMPDEST DUP2 PUSH2 0xD79 JUMPI INVALID JUMPDEST DIV DUP3 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x2ECE88CA2BC08DD018DB50E1D25A20BF1241E5FAB1C396CAA51F01A54BD2F75B DUP5 PUSH1 0x40 MLOAD PUSH2 0xDC6 SWAP2 SWAP1 PUSH2 0x1698 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 SWAP1 SWAP2 ADD SLOAD DUP3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP3 SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP1 DUP4 ADD SWAP1 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH32 0x0 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xE5F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE PUSH1 0x60 SWAP2 DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH2 0xEA6 DUP8 DUP8 PUSH2 0x46C JUMP JUMPDEST DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0xEB3 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST DUP1 DUP3 SUB DUP3 DUP2 GT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x13EC JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP2 DUP2 ADD DUP2 DUP2 LT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x1526 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0xF4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x15C7 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO DUP1 PUSH2 0xF6D JUMPI POP POP DUP1 DUP3 MUL DUP3 DUP3 DUP3 DUP2 PUSH2 0xF6A JUMPI INVALID JUMPDEST DIV EQ JUMPDEST PUSH2 0xEFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x15FE JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP3 GT ISZERO PUSH2 0xF4E JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x14EF JUMP JUMPDEST DUP2 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB DUP1 DUP4 AND SWAP1 DUP3 AND LT ISZERO PUSH2 0xEFC JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x1526 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP6 DUP6 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1007 SWAP3 SWAP2 SWAP1 PUSH2 0x1343 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 PUSH1 0xE0 SHL PUSH1 0x20 DUP3 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB DUP4 DUP2 DUP4 AND OR DUP4 MSTORE POP POP POP POP PUSH1 0x40 MLOAD PUSH2 0x1040 SWAP2 SWAP1 PUSH2 0x12F6 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP7 GAS CALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x107D JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x1082 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 DUP1 ISZERO PUSH2 0x10AC JUMPI POP DUP1 MLOAD ISZERO DUP1 PUSH2 0x10AC JUMPI POP DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD DUP2 ADD SWAP1 PUSH2 0x10AC SWAP2 SWAP1 PUSH2 0x11A7 JUMP JUMPDEST PUSH2 0x10C8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x285 SWAP1 PUSH2 0x1448 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x60 DUP2 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP2 SWAP1 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x1103 JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x110E DUP2 PUSH2 0x16D9 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x111E DUP2 PUSH2 0x16F1 JUMP JUMPDEST SWAP2 POP PUSH1 0x40 DUP5 ADD CALLDATALOAD PUSH2 0x112E DUP2 PUSH2 0x16F1 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x114B JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x1161 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD SWAP2 POP DUP6 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x1174 JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 DUP2 GT ISZERO PUSH2 0x1182 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP1 DUP4 MUL DUP6 ADD ADD GT ISZERO PUSH2 0x1195 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x20 SWAP3 SWAP1 SWAP3 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11B8 JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x11C3 DUP2 PUSH2 0x16F1 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11DB JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH2 0x11C3 DUP2 PUSH2 0x16D9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x11F7 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x120F JUMPI DUP1 DUP2 REVERT JUMPDEST POP MLOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1228 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x123A DUP2 PUSH2 0x16D9 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP7 DUP9 SUB SLT ISZERO PUSH2 0x125C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP6 CALLDATALOAD SWAP5 POP PUSH1 0x20 DUP7 ADD CALLDATALOAD PUSH2 0x126E DUP2 PUSH2 0x16D9 JUMP JUMPDEST SWAP4 POP PUSH1 0x40 DUP7 ADD CALLDATALOAD PUSH2 0x127E DUP2 PUSH2 0x16D9 JUMP JUMPDEST SWAP5 SWAP8 SWAP4 SWAP7 POP SWAP4 SWAP5 PUSH1 0x60 DUP2 ADD CALLDATALOAD SWAP5 POP PUSH1 0x80 ADD CALLDATALOAD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x12AA JUMPI DUP3 DUP4 REVERT JUMPDEST DUP4 CALLDATALOAD SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x12BC DUP2 PUSH2 0x16D9 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x12DF JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1316 JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH2 0x12FC JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH2 0x1324 JUMPI DUP3 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 DUP3 MSTORE DUP4 MLOAD SWAP1 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP1 PUSH1 0x20 SWAP1 PUSH1 0x60 DUP5 ADD SWAP1 DUP3 DUP8 ADD DUP5 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x139E JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE SWAP3 DUP5 ADD SWAP3 SWAP1 DUP5 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1379 JUMP JUMPDEST POP POP POP DUP4 DUP2 SUB DUP3 DUP6 ADD MSTORE DUP1 DUP6 MLOAD PUSH2 0x13B5 DUP2 DUP5 PUSH2 0x1698 JUMP JUMPDEST SWAP2 POP DUP4 DUP8 ADD SWAP3 POP DUP5 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x13DF JUMPI PUSH2 0x13D1 DUP4 DUP6 MLOAD PUSH2 0x12EE JUMP JUMPDEST SWAP4 DUP6 ADD SWAP4 SWAP3 POP PUSH1 0x1 ADD PUSH2 0x13BE JUMP JUMPDEST POP SWAP1 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x426F72696E674D6174683A20556E646572666C6F77 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x13 SWAP1 DUP3 ADD MSTORE PUSH19 0x506F6F6C20616C726561647920657869737473 PUSH1 0x68 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E6745524332303A205472616E73666572206661696C656400000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x21 SWAP1 DUP3 ADD MSTORE PUSH32 0x4F6E6C79204D4356322063616E2063616C6C20746869732066756E6374696F6E PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x15 SWAP1 DUP3 ADD MSTORE PUSH21 0x4F776E61626C653A207A65726F2061646472657373 PUSH1 0x58 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1C SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A2075696E74313238204F766572666C6F7700000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A20416464204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 DUP2 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C657220213D2070656E64696E67206F776E6572 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x1B SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A2075696E743634204F766572666C6F770000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE PUSH1 0x18 SWAP1 DUP3 ADD MSTORE PUSH32 0x426F72696E674D6174683A204D756C204F766572666C6F770000000000000000 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 DUP2 AND SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 SWAP3 DUP4 ADD MLOAD AND SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 DUP3 AND PUSH1 0x20 DUP5 ADD MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP4 SWAP1 SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x80 SHL SUB AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x16EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x16EE JUMPI PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPDEST MUL 0xE6 PUSH31 0x50616308DE8A2A0EA092220CBB6BAB154C4C12313CE97766220AC5F864736F PUSH13 0x634300060C0033000000000000 ", + "sourceMap": "399:6863:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;774:472:1;;;;;;:::i;:::-;;:::i;:::-;;3557:97:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1186:45;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;4645:263::-;;;;;;:::i;:::-;;:::i;1521:28::-;;;:::i;5117:798::-;;;;;;:::i;:::-;;:::i;1295:348:1:-;;;:::i;6460:799:9:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6093:188::-;;;;;;:::i;:::-;;:::i;1238:24::-;;;;;;:::i;:::-;;:::i;3903:508::-;;;;;;:::i;:::-;;:::i;2247:670::-;;;;;;:::i;:::-;;:::i;350:20:1:-;;;:::i;:::-;;;;;;;:::i;1326:66:9:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2927:415::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;397:27:1:-;;;:::i;774:472::-;1746:5;;-1:-1:-1;;;;;1746:5:1;1732:10;:19;1724:64;;;;-1:-1:-1;;;1724:64:1;;;;;;;:::i;:::-;;;;;;;;;879:6:::1;875:364;;;-1:-1:-1::0;;;;;933:22:1;::::1;::::0;::::1;::::0;:34:::1;;;959:8;933:34;925:68;;;;-1:-1:-1::0;;;925:68:1::1;;;;;;;:::i;:::-;1060:5;::::0;;1039:37:::1;::::0;-1:-1:-1;;;;;1039:37:1;;::::1;::::0;1060:5;::::1;::::0;1039:37:::1;::::0;::::1;1091:5;:16:::0;;-1:-1:-1;;;;;1091:16:1;::::1;-1:-1:-1::0;;;;;;1091:16:1;;::::1;;::::0;;;;1122:25;;;;::::1;::::0;;875:364:::1;;;1204:12;:23:::0;;-1:-1:-1;;;;;;1204:23:1::1;-1:-1:-1::0;;;;;1204:23:1;::::1;;::::0;;875:364:::1;774:472:::0;;;:::o;3557:97:9:-;3633:7;:14;;3557:97::o;1186:45::-;;;;;;;;;;;;-1:-1:-1;;;;;1186:45:9;;;-1:-1:-1;;;;;;;;1186:45:9;;;;;-1:-1:-1;;;1186:45:9;;;;:::o;4645:263::-;1746:5:1;;-1:-1:-1;;;;;1746:5:1;1732:10;:19;1724:64;;;;-1:-1:-1;;;1724:64:1;;;;;;;:::i;:::-;4758:14:9::1;::::0;;;:8:::1;:14;::::0;;;;:25;4738:15:::1;::::0;:63:::1;::::0;4789:11;;4738:46:::1;::::0;-1:-1:-1;;;4758:25:9;::::1;-1:-1:-1::0;;;;;4758:25:9::1;4738:19;:46::i;:::-;:50:::0;::::1;:63::i;:::-;4720:15;:81:::0;4839:18:::1;:11:::0;:16:::1;:18::i;:::-;4811:14;::::0;;;:8:::1;:14;::::0;;;;;;:46;;-1:-1:-1;;;;;4811:46:9;;;::::1;-1:-1:-1::0;;;4811:46:9::1;-1:-1:-1::0;;;;;4811:46:9;;::::1;::::0;;;::::1;::::0;;;4872:29;4820:4;;4872:29:::1;::::0;::::1;::::0;4889:11;;4872:29:::1;:::i;:::-;;;;;;;;4645:263:::0;;:::o;1521:28::-;;;;:::o;5117:798::-;5189:15;5216:20;;:::i;:::-;-1:-1:-1;5239:14:9;;;;:8;:14;;;;;;;;5216:37;;;;;;;;;-1:-1:-1;;;;;5216:37:9;;;;;-1:-1:-1;;;;;;;;5216:37:9;;;;;;;;-1:-1:-1;;;5216:37:9;;;;;;;;;;5287:14;;;:8;:14;;;;;;-1:-1:-1;;;;;5287:21:9;;;;;;;;;;5345;;5395:41;;-1:-1:-1;;;5395:41:9;;5216:37;;5287:21;;5318:48;;;;;5239:14;;5408:13;5395:35;;;;;;:41;;5248:4;;5395:41;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5395:51:9;;5447:13;5395:66;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5376:85;;5490:4;:20;;;-1:-1:-1;;;;;5475:35:9;:12;:35;:52;;;;-1:-1:-1;5514:13:9;;;5475:52;5471:340;;;5543:14;5560:38;5577:4;:20;;;-1:-1:-1;;;;;5560:38:9;:12;:16;;:38;;;;:::i;:::-;5543:55;;5612:19;5683:15;;5634:46;5664:4;:15;;;-1:-1:-1;;;;;5634:46:9;:25;5645:13;;5634:6;:10;;:25;;;;:::i;:::-;:29;;:46::i;:::-;:64;;;;;;;-1:-1:-1;5731:69:9;5791:8;5752:36;5634:64;1602:4;5752:15;:36::i;:::-;:47;;;;;5731:16;;5752:47;;5731:20;:69::i;:::-;5712:88;;5471:340;;;5892:15;;;;5831:11;;5830:78;;5892:15;1602:4;;5831:33;;5847:16;5831:15;:33::i;:::-;:55;;;;;;;5830:61;:78::i;:::-;5820:88;5117:798;-1:-1:-1;;;;;;;5117:798:9:o;1295:348:1:-;1363:12;;-1:-1:-1;;;;;1363:12:1;1423:10;:27;;1415:72;;;;-1:-1:-1;;;1415:72:1;;;;;;;:::i;:::-;1546:5;;;1525:42;;-1:-1:-1;;;;;1525:42:1;;;;1546:5;;;1525:42;;;1578:5;:21;;-1:-1:-1;;;;;1578:21:1;;;-1:-1:-1;;;;;;1578:21:1;;;;;;;1610:25;;;;;;;1295:348::o;6460:799:9:-;6509:20;;:::i;:::-;-1:-1:-1;6548:13:9;;;;:8;:13;;;;;;;;;6541:20;;;;;;;;;-1:-1:-1;;;;;6541:20:9;;;;-1:-1:-1;;;;;;;;6541:20:9;;;;;;;;;;-1:-1:-1;;;6541:20:9;;;;;;;;;;;6575:12;:35;6571:682;;;6645:40;;-1:-1:-1;;;6645:40:9;;6626:16;;-1:-1:-1;;;;;6658:13:9;6645:35;;;;:40;;6681:3;;6645:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6645:50:9;;6696:13;6645:65;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6626:84;-1:-1:-1;6729:12:9;;6725:336;;6761:14;6778:38;6795:4;:20;;;-1:-1:-1;;;;;6778:38:9;:12;:16;;:38;;;;:::i;:::-;6761:55;;6834:19;6905:15;;6856:46;6886:4;:15;;;-1:-1:-1;;;;;6856:46:9;:25;6867:13;;6856:6;:10;;:25;;;;:::i;:46::-;:64;;;;;;;-1:-1:-1;6962:84:9;6988:57;7028:8;6989:36;6856:64;1602:4;6989:15;:36::i;:::-;:47;;;;;;6988:55;:57::i;:::-;6962:21;;-1:-1:-1;;;;;6962:25:9;;;:84::i;:::-;-1:-1:-1;;;;;6938:108:9;;;-1:-1:-1;;6725:336:9;7097:19;:12;:17;:19::i;:::-;-1:-1:-1;;;;;7074:42:9;;;:20;;;;:42;;;7130:13;;;;:8;:13;;;;;;;;:20;;;;;;;;;;-1:-1:-1;;;;;;7130:20:9;;;-1:-1:-1;;;;;7130:20:9;;;-1:-1:-1;;;;7130:20:9;-1:-1:-1;;;7130:20:9;;;;;-1:-1:-1;;;;;7130:20:9;-1:-1:-1;;;7130:20:9;;;;;;;;;;;;;;7169:73;7130:13;;7169:73;;;;7130:20;;7210:8;;7169:73;:::i;:::-;;;;;;;;6571:682;;6460:799;;;:::o;6093:188::-;6176:4;6162:11;6197:78;6221:3;6217:1;:7;6197:78;;;6245:19;6256:4;;6261:1;6256:7;;;;;;;;;;;;;6245:10;:19::i;:::-;-1:-1:-1;6226:3:9;;6197:78;;;;6093:188;;;:::o;1238:24::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1238:24:9;:::o;3903:508::-;1746:5:1;;-1:-1:-1;;;;;1746:5:1;1732:10;:19;1724:64;;;;-1:-1:-1;;;1724:64:1;;;;;;;:::i;:::-;3985:14:9::1;::::0;;;:8:::1;:14;::::0;;;;:30;-1:-1:-1;;;3985:30:9;::::1;-1:-1:-1::0;;;;;3985:30:9::1;:35:::0;3977:67:::1;;;;-1:-1:-1::0;;;3977:67:9::1;;;;;;;:::i;:::-;4120:15;::::0;4080:12:::1;::::0;4120:31:::1;::::0;4140:10;4120:19:::1;:31::i;:::-;4102:15;:49:::0;4179:149:::1;::::0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;4179:149:9;;::::1;::::0;::::1;4262:22;:15:::0;:20:::1;:22::i;:::-;-1:-1:-1::0;;;;;4179:149:9::1;;;;;4214:17;:10;:15;:17::i;:::-;-1:-1:-1::0;;;;;4179:149:9;;::::1;::::0;;;4162:14:::1;::::0;;;:8:::1;:14;::::0;;;;;;;:166;;;;;;::::1;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;;4162:166:9::1;-1:-1:-1::0;;;;;4162:166:9;;;::::1;-1:-1:-1::0;;;4162:166:9::1;-1:-1:-1::0;;;;;;;;;4162:166:9;;::::1;-1:-1:-1::0;;;;;;4162:166:9;;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;4338:7:::1;:18:::0;;4162:166;4338:18;::::1;::::0;;;;;::::1;::::0;;;4371:33;4171:4;;4371:33:::1;::::0;::::1;::::0;4393:10;;4371:33:::1;:::i;:::-;;;;;;;;1799:1:1;3903:508:9::0;;:::o;2247:670::-;3397:10;-1:-1:-1;;;;;3411:13:9;3397:27;;3376:107;;;;-1:-1:-1;;;3376:107:9;;;;;;;:::i;:::-;2374:20:::1;;:::i;:::-;2397:15;2408:3;2397:10;:15::i;:::-;2422:21;2446:13:::0;;;:8:::1;:13;::::0;;;;;;;-1:-1:-1;;;;;2446:20:9;::::1;::::0;;;;;;;2505:11;;2374:38;;-1:-1:-1;2446:20:9;2505:15;2501:244:::1;;2650:15;::::0;::::1;::::0;2579:21;;2563:11;;2562:121:::1;::::0;2650:15;1602:4:::1;::::0;2563:38:::1;::::0;-1:-1:-1;;;;;2563:38:9::1;:15;:38::i;2562:121::-;2536:147:::0;-1:-1:-1;2697:37:9::1;-1:-1:-1::0;;;;;2697:11:9::1;:24;2722:2:::0;2536:147;2697:24:::1;:37::i;:::-;2754:21:::0;;;2815;;1602:4:::1;::::0;2803:34:::1;::::0;2768:7;;-1:-1:-1;;;;;2803:34:9::1;:11;:34::i;:::-;:56;;;;;;2785:4;:15;;:74;;;;2907:2;-1:-1:-1::0;;;;;2874:36:9::1;2893:3;2886:5;-1:-1:-1::0;;;;;2874:36:9::1;;2898:7;2874:36;;;;;;:::i;:::-;;;;;;;;3493:1;;;2247:670:::0;;;;;:::o;350:20:1:-;;;-1:-1:-1;;;;;350:20:1;;:::o;1326:66:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2927:415::-;3117:15;;;3130:1;3117:15;;;;;;;;;3013:28;;;;;;3117:15;;;;;;;;;;;-1:-1:-1;3117:15:9;3085:47;;3162:11;3142:13;3156:1;3142:16;;;;;;;;-1:-1:-1;;;;;3142:32:9;;;;:16;;;;;;;;;;;:32;3218:16;;;3232:1;3218:16;;;;;;;;;3184:31;;3218:16;;;;;;;;;;;;-1:-1:-1;3218:16:9;3184:50;;3264:23;3277:3;3282:4;3264:12;:23::i;:::-;3244:14;3259:1;3244:17;;;;;;;;;;;;;;;;;:43;3305:13;;;;-1:-1:-1;2927:415:9;-1:-1:-1;;;;2927:415:9:o;397:27:1:-;;;-1:-1:-1;;;;;397:27:1;;:::o;342:122:4:-;425:5;;;420:16;;;;412:50;;;;-1:-1:-1;;;412:50:4;;;;;;;:::i;:::-;342:122;;;;:::o;211:125::-;294:5;;;289:16;;;;281:53;;;;-1:-1:-1;;;281:53:4;;;;;;;:::i;780:156::-;828:8;-1:-1:-1;;;;;857:15:4;;;849:55;;;;-1:-1:-1;;;849:55:4;;;;;;;:::i;:::-;-1:-1:-1;926:1:4;780:156::o;470:137::-;528:9;548:6;;;:28;;-1:-1:-1;;563:5:4;;;575:1;570;563:5;570:1;558:13;;;;;:18;548:28;540:65;;;;-1:-1:-1;;;540:65:4;;;;;;;:::i;613:161::-;662:9;-1:-1:-1;;;;;692:16:4;;;684:57;;;;-1:-1:-1;;;684:57:4;;;;;;;:::i;1134:125::-;1217:5;;;-1:-1:-1;;;;;1212:16:4;;;;;;;;1204:53;;;;-1:-1:-1;;;1204:53:4;;;;;;;:::i;951:304:3:-;1036:12;1050:17;1079:5;-1:-1:-1;;;;;1071:19:3;1114:10;1126:2;1130:6;1091:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1091:46:3;;;;;;;;;;;1071:67;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1035:103;;;;1157:7;:57;;;;-1:-1:-1;1169:11:3;;:16;;:44;;;1200:4;1189:24;;;;;;;;;;;;:::i;:::-;1149:98;;;;-1:-1:-1;;;1149:98:3;;;;;;;:::i;:::-;951:304;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1233:479::-;;;;1365:2;1353:9;1344:7;1340:23;1336:32;1333:2;;;-1:-1;;1371:12;1333:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;1423:63;-1:-1;1523:2;1559:22;;584:20;609:30;584:20;609:30;:::i;:::-;1531:60;-1:-1;1628:2;1664:22;;584:20;609:30;584:20;609:30;:::i;:::-;1636:60;;;;1327:385;;;;;:::o;1719:397::-;;;1858:2;1846:9;1837:7;1833:23;1829:32;1826:2;;;-1:-1;;1864:12;1826:2;1922:17;1909:31;-1:-1;;;;;1960:18;1952:6;1949:30;1946:2;;;-1:-1;;1982:12;1946:2;2083:6;2072:9;2068:22;;;290:3;283:4;275:6;271:17;267:27;257:2;;-1:-1;;298:12;257:2;341:6;328:20;1960:18;360:6;357:30;354:2;;;-1:-1;;390:12;354:2;485:3;1858:2;;469:6;465:17;426:6;451:32;;448:41;445:2;;;-1:-1;;492:12;445:2;1858;422:17;;;;;2002:98;;-1:-1;1820:296;;-1:-1;;;;1820:296::o;2123:257::-;;2235:2;2223:9;2214:7;2210:23;2206:32;2203:2;;;-1:-1;;2241:12;2203:2;732:6;726:13;744:30;768:5;744:30;:::i;:::-;2293:71;2197:183;-1:-1;;;2197:183::o;2387:291::-;;2516:2;2504:9;2495:7;2491:23;2487:32;2484:2;;;-1:-1;;2522:12;2484:2;884:6;878:13;896:47;937:5;896:47;:::i;2685:241::-;;2789:2;2777:9;2768:7;2764:23;2760:32;2757:2;;;-1:-1;;2795:12;2757:2;-1:-1;1022:20;;2751:175;-1:-1;2751:175::o;2933:263::-;;3048:2;3036:9;3027:7;3023:23;3019:32;3016:2;;;-1:-1;;3054:12;3016:2;-1:-1;1170:13;;3010:186;-1:-1;3010:186::o;3203:366::-;;;3324:2;3312:9;3303:7;3299:23;3295:32;3292:2;;;-1:-1;;3330:12;3292:2;1035:6;1022:20;3382:63;;3482:2;3525:9;3521:22;72:20;97:33;124:5;97:33;:::i;:::-;3490:63;;;;3286:283;;;;;:::o;3576:743::-;;;;;;3748:3;3736:9;3727:7;3723:23;3719:33;3716:2;;;-1:-1;;3755:12;3716:2;1035:6;1022:20;3807:63;;3907:2;3950:9;3946:22;72:20;97:33;124:5;97:33;:::i;:::-;3915:63;-1:-1;4015:2;4054:22;;72:20;97:33;72:20;97:33;:::i;:::-;3710:609;;;;-1:-1;4023:63;;4123:2;4162:22;;1022:20;;-1:-1;4231:3;4271:22;1022:20;;3710:609;-1:-1;;3710:609::o;4326:491::-;;;;4464:2;4452:9;4443:7;4439:23;4435:32;4432:2;;;-1:-1;;4470:12;4432:2;1035:6;1022:20;4522:63;;4622:2;4665:9;4661:22;72:20;97:33;124:5;97:33;:::i;:::-;4426:391;;4630:63;;-1:-1;;;4730:2;4769:22;;;;1022:20;;4426:391::o;4824:366::-;;;4945:2;4933:9;4924:7;4920:23;4916:32;4913:2;;;-1:-1;;4951:12;4913:2;-1:-1;;1022:20;;;5103:2;5142:22;;;1022:20;;-1:-1;4907:283::o;5408:173::-;12645:37;;5570:4;5561:14;;5488:93::o;13038:271::-;;7405:5;21441:12;-1:-1;23902:101;23916:6;23913:1;23910:13;23902:101;;;7549:4;23983:11;;;;;23977:18;23964:11;;;23957:39;23931:10;23902:101;;;24018:6;24015:1;24012:13;24009:2;;;-1:-1;24074:6;24069:3;24065:16;24058:27;24009:2;-1:-1;7580:16;;;;;13172:137;-1:-1;;13172:137::o;13316:222::-;-1:-1;;;;;23181:54;;;;5660:37;;13443:2;13428:18;;13414:124::o;13545:333::-;-1:-1;;;;;23181:54;;;;5660:37;;13864:2;13849:18;;12645:37;13700:2;13685:18;;13671:207::o;13885:657::-;14154:2;14168:47;;;21441:12;;14139:18;;;22117:19;;;13885:657;;22166:4;;22157:14;;;;21123;;;13885:657;6198:288;6223:6;6220:1;6217:13;6198:288;;;6284:13;;-1:-1;;;;;23181:54;7683:64;;5379:14;;;;21857;;;;1960:18;6238:9;6198:288;;;6202:14;;;14399:9;14393:4;14389:20;22166:4;14373:9;14369:18;14362:48;14424:108;6740:5;21441:12;6759:86;6838:6;6833:3;6759:86;:::i;:::-;6752:93;;22166:4;6916:5;21123:14;6928:21;;-1:-1;6955:260;6980:6;6977:1;6974:13;6955:260;;;7068:63;7127:3;7047:6;7041:13;7068:63;:::i;:::-;21857:14;;;;7061:70;-1:-1;6245:1;6995:9;6955:260;;;-1:-1;14416:116;;14125:417;-1:-1;;;;;;;14125:417::o;14549:416::-;14749:2;14763:47;;;7984:2;14734:18;;;22117:19;-1:-1;;;22157:14;;;8000:44;8063:12;;;14720:245::o;14972:416::-;15172:2;15186:47;;;8314:2;15157:18;;;22117:19;-1:-1;;;22157:14;;;8330:42;8391:12;;;15143:245::o;15395:416::-;15595:2;15609:47;;;8642:2;15580:18;;;22117:19;8678:30;22157:14;;;8658:51;8728:12;;;15566:245::o;15818:416::-;16018:2;16032:47;;;8979:2;16003:18;;;22117:19;9015:34;22157:14;;;8995:55;-1:-1;;;9070:12;;;9063:25;9107:12;;;15989:245::o;16241:416::-;16441:2;16455:47;;;9358:2;16426:18;;;22117:19;-1:-1;;;22157:14;;;9374:44;9437:12;;;16412:245::o;16664:416::-;16864:2;16878:47;;;9688:2;16849:18;;;22117:19;9724:30;22157:14;;;9704:51;9774:12;;;16835:245::o;17087:416::-;17287:2;17301:47;;;10025:2;17272:18;;;22117:19;10061:26;22157:14;;;10041:47;10107:12;;;17258:245::o;17510:416::-;17710:2;17724:47;;;17695:18;;;22117:19;10394:34;22157:14;;;10374:55;10448:12;;;17681:245::o;17933:416::-;18133:2;18147:47;;;18118:18;;;22117:19;10735:34;22157:14;;;10715:55;10789:12;;;18104:245::o;18356:416::-;18556:2;18570:47;;;11040:2;18541:18;;;22117:19;11076:29;22157:14;;;11056:50;11125:12;;;18527:245::o;18779:416::-;18979:2;18993:47;;;11376:2;18964:18;;;22117:19;11412:26;22157:14;;;11392:47;11458:12;;;18950:245::o;19202:326::-;11780:23;;-1:-1;;;;;23061:46;12282:37;;11962:4;11951:16;;;11945:23;-1:-1;;;;;23387:30;;;12020:14;;;12873:36;;;;12120:4;12109:16;;;12103:23;23387:30;12178:14;;;12873:36;;;;19381:2;19366:18;;19352:176::o;19535:436::-;-1:-1;;;;;23061:46;;;;12282:37;;-1:-1;;;;;23387:30;;;19876:2;19861:18;;12873:36;23387:30;19957:2;19942:18;;12873:36;19714:2;19699:18;;19685:286::o;19978:222::-;12645:37;;;20105:2;20090:18;;20076:124::o;20207:333::-;12645:37;;;20526:2;20511:18;;12645:37;20362:2;20347:18;;20333:207::o;20547:440::-;-1:-1;;;;;23387:30;;;;12873:36;;20890:2;20875:18;;12645:37;;;;-1:-1;;;;;23061:46;20973:2;20958:18;;12522:50;20728:2;20713:18;;20699:288::o;24106:117::-;-1:-1;;;;;23181:54;;24165:35;;24155:2;;24214:1;;24204:12;24155:2;24149:74;:::o;24230:111::-;24311:5;22861:13;22854:21;24289:5;24286:32;24276:2;;24332:1;;24322:12" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "1188200", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "add(uint256,uint256)": "infinite", + "claimOwnership()": "45089", + "massUpdatePools(uint256[])": "infinite", + "onSushiReward(uint256,address,address,uint256,uint256)": "infinite", + "owner()": "1092", + "pendingOwner()": "1158", + "pendingToken(uint256,address)": "infinite", + "pendingTokens(uint256,address,uint256)": "infinite", + "poolIds(uint256)": "2041", + "poolInfo(uint256)": "1411", + "poolLength()": "1074", + "set(uint256,uint256)": "infinite", + "tokenPerBlock()": "1051", + "transferOwnership(address,bool,bool)": "infinite", + "updatePool(uint256)": "infinite", + "userInfo(uint256,address)": "2226" + } + }, + "methodIdentifiers": { + "add(uint256,uint256)": "771602f7", + "claimOwnership()": "4e71e0c8", + "massUpdatePools(uint256[])": "57a5b58c", + "onSushiReward(uint256,address,address,uint256,uint256)": "8bf63742", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "pendingToken(uint256,address)": "48e43af4", + "pendingTokens(uint256,address,uint256)": "d63b3c49", + "poolIds(uint256)": "69883b4e", + "poolInfo(uint256)": "1526fe27", + "poolLength()": "081e3eda", + "set(uint256,uint256)": "1ab06ee5", + "tokenPerBlock()": "4198709a", + "transferOwnership(address,bool,bool)": "078dfbe7", + "updatePool(uint256)": "51eb05a6", + "userInfo(uint256,address)": "93f1a40b" + } + }, + "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_rewardToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenPerBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_MASTERCHEF_V2\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogInit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"LogOnReward\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"}],\"name\":\"LogPoolAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"}],\"name\":\"LogSetPool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"lastRewardBlock\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"lpSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"accSushiPerShare\",\"type\":\"uint256\"}],\"name\":\"LogUpdatePool\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"}],\"name\":\"add\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pids\",\"type\":\"uint256[]\"}],\"name\":\"massUpdatePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lpToken\",\"type\":\"uint256\"}],\"name\":\"onSushiReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"pendingToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pending\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"pendingTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"rewardTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"rewardAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"poolIds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"poolInfo\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"accSushiPerShare\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lastRewardBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"allocPoint\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"pools\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_pid\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_allocPoint\",\"type\":\"uint256\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenPerBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"direct\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"renounce\",\"type\":\"bool\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pid\",\"type\":\"uint256\"}],\"name\":\"updatePool\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"accSushiPerShare\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lastRewardBlock\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"allocPoint\",\"type\":\"uint64\"}],\"internalType\":\"struct ComplexRewarder.PoolInfo\",\"name\":\"pool\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"userInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"rewardDebt\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"@0xKeno\",\"kind\":\"dev\",\"methods\":{\"add(uint256,uint256)\":{\"params\":{\"_pid\":\"Pid on MCV2\",\"allocPoint\":\"AP of the new pool.\"}},\"massUpdatePools(uint256[])\":{\"params\":{\"pids\":\"Pool IDs of all to be updated. Make sure to update all active pools.\"}},\"pendingToken(uint256,address)\":{\"params\":{\"_pid\":\"The index of the pool. See `poolInfo`.\",\"_user\":\"Address of user.\"},\"returns\":{\"pending\":\"SUSHI reward for a given user.\"}},\"set(uint256,uint256)\":{\"params\":{\"_allocPoint\":\"New AP of the pool.\",\"_pid\":\"The index of the pool. See `poolInfo`.\"}},\"updatePool(uint256)\":{\"params\":{\"pid\":\"The index of the pool. See `poolInfo`.\"},\"returns\":{\"pool\":\"Returns the pool that was updated.\"}}},\"stateVariables\":{\"totalAllocPoint\":{\"details\":\"Total allocation points. Must be the sum of all allocation points in all pools.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"add(uint256,uint256)\":{\"notice\":\"Add a new LP to the pool. Can only be called by the owner. DO NOT add the same LP token more than once. Rewards will be messed up if you do.\"},\"massUpdatePools(uint256[])\":{\"notice\":\"Update reward variables for all pools. Be careful of gas spending!\"},\"pendingToken(uint256,address)\":{\"notice\":\"View function to see pending Token\"},\"poolInfo(uint256)\":{\"notice\":\"Info of each pool.\"},\"poolLength()\":{\"notice\":\"Returns the number of MCV2 pools.\"},\"set(uint256,uint256)\":{\"notice\":\"Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\"},\"updatePool(uint256)\":{\"notice\":\"Update reward variables of the given pool.\"},\"userInfo(uint256,address)\":{\"notice\":\"Info of each user that stakes LP tokens.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/ComplexRewarder.sol\":\"ComplexRewarder\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@boringcrypto/boring-solidity/contracts/BoringBatchable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\r\\n// Audit on 5-Jan-2021 by Keno and BoringCrypto\\r\\n\\r\\n// P1 - P3: OK\\r\\npragma solidity 0.6.12;\\r\\npragma experimental ABIEncoderV2;\\r\\n// solhint-disable avoid-low-level-calls\\r\\n\\r\\nimport \\\"./libraries/BoringERC20.sol\\\";\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BaseBoringBatchable {\\r\\n function _getRevertMsg(bytes memory _returnData) internal pure returns (string memory) {\\r\\n // If the _res length is less than 68, then the transaction failed silently (without a revert message)\\r\\n if (_returnData.length < 68) return \\\"Transaction reverted silently\\\";\\r\\n\\r\\n assembly {\\r\\n // Slice the sighash.\\r\\n _returnData := add(_returnData, 0x04)\\r\\n }\\r\\n return abi.decode(_returnData, (string)); // All that remains is the revert string\\r\\n } \\r\\n \\r\\n // F3 - F9: OK\\r\\n // F1: External is ok here because this is the batch function, adding it to a batch makes no sense\\r\\n // F2: Calls in the batch may be payable, delegatecall operates in the same context, so each call in the batch has access to msg.value\\r\\n // C1 - C21: OK\\r\\n // C3: The length of the loop is fully under user control, so can't be exploited\\r\\n // C7: Delegatecall is only used on the same contract, so it's safe\\r\\n function batch(bytes[] calldata calls, bool revertOnFail) external payable returns(bool[] memory successes, bytes[] memory results) {\\r\\n // Interactions\\r\\n successes = new bool[](calls.length);\\r\\n results = new bytes[](calls.length);\\r\\n for (uint256 i = 0; i < calls.length; i++) {\\r\\n (bool success, bytes memory result) = address(this).delegatecall(calls[i]);\\r\\n require(success || !revertOnFail, _getRevertMsg(result));\\r\\n successes[i] = success;\\r\\n results[i] = result;\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BoringBatchable is BaseBoringBatchable {\\r\\n // F1 - F9: OK\\r\\n // F6: Parameters can be used front-run the permit and the user's permit will fail (due to nonce or other revert)\\r\\n // if part of a batch this could be used to grief once as the second call would not need the permit\\r\\n // C1 - C21: OK\\r\\n function permitToken(IERC20 token, address from, address to, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\\r\\n // Interactions\\r\\n // X1 - X5\\r\\n token.permit(from, to, amount, deadline, v, r, s);\\r\\n }\\r\\n}\",\"keccak256\":\"0xe0b0316b015447ee28c6b7d96c4347b410a66e5d26e922ef3bcccc22f3b4d590\",\"license\":\"UNLICENSED\"},\"@boringcrypto/boring-solidity/contracts/BoringOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\n// Audit on 5-Jan-2021 by Keno and BoringCrypto\\r\\n\\r\\n// P1 - P3: OK\\r\\npragma solidity 0.6.12;\\r\\n\\r\\n// Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol\\r\\n// Edited by BoringCrypto\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BoringOwnableData {\\r\\n // V1 - V5: OK\\r\\n address public owner;\\r\\n // V1 - V5: OK\\r\\n address public pendingOwner;\\r\\n}\\r\\n\\r\\n// T1 - T4: OK\\r\\ncontract BoringOwnable is BoringOwnableData {\\r\\n // E1: OK\\r\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\r\\n\\r\\n constructor () public {\\r\\n owner = msg.sender;\\r\\n emit OwnershipTransferred(address(0), msg.sender);\\r\\n }\\r\\n\\r\\n // F1 - F9: OK\\r\\n // C1 - C21: OK\\r\\n function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner {\\r\\n if (direct) {\\r\\n // Checks\\r\\n require(newOwner != address(0) || renounce, \\\"Ownable: zero address\\\");\\r\\n\\r\\n // Effects\\r\\n emit OwnershipTransferred(owner, newOwner);\\r\\n owner = newOwner;\\r\\n pendingOwner = address(0);\\r\\n } else {\\r\\n // Effects\\r\\n pendingOwner = newOwner;\\r\\n }\\r\\n }\\r\\n\\r\\n // F1 - F9: OK\\r\\n // C1 - C21: OK\\r\\n function claimOwnership() public {\\r\\n address _pendingOwner = pendingOwner;\\r\\n \\r\\n // Checks\\r\\n require(msg.sender == _pendingOwner, \\\"Ownable: caller != pending owner\\\");\\r\\n\\r\\n // Effects\\r\\n emit OwnershipTransferred(owner, _pendingOwner);\\r\\n owner = _pendingOwner;\\r\\n pendingOwner = address(0);\\r\\n }\\r\\n\\r\\n // M1 - M5: OK\\r\\n // C1 - C21: OK\\r\\n modifier onlyOwner() {\\r\\n require(msg.sender == owner, \\\"Ownable: caller is not the owner\\\");\\r\\n _;\\r\\n }\\r\\n}\",\"keccak256\":\"0xfafb586b248c1c697227f5745397562cfe5be2f04e19fb80fc79fc94e3afaba1\",\"license\":\"MIT\"},\"@boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\npragma solidity 0.6.12;\\r\\n\\r\\ninterface IERC20 {\\r\\n function totalSupply() external view returns (uint256);\\r\\n function balanceOf(address account) external view returns (uint256);\\r\\n function allowance(address owner, address spender) external view returns (uint256);\\r\\n function approve(address spender, uint256 amount) external returns (bool);\\r\\n event Transfer(address indexed from, address indexed to, uint256 value);\\r\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\r\\n\\r\\n // EIP 2612\\r\\n function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;\\r\\n}\",\"keccak256\":\"0x8004f86e4536cca55b8eeb2621fe18e1ee57d779396ddef50bce5bf70fb59867\",\"license\":\"MIT\"},\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"../interfaces/IERC20.sol\\\";\\r\\n\\r\\nlibrary BoringERC20 {\\r\\n function safeSymbol(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeName(IERC20 token) internal view returns(string memory) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));\\r\\n return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\r\\n }\\r\\n\\r\\n function safeDecimals(IERC20 token) internal view returns (uint8) {\\r\\n (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));\\r\\n return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;\\r\\n }\\r\\n\\r\\n function safeTransfer(IERC20 token, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: Transfer failed\\\");\\r\\n }\\r\\n\\r\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal {\\r\\n (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount));\\r\\n require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"BoringERC20: TransferFrom failed\\\");\\r\\n }\\r\\n}\",\"keccak256\":\"0x69f1ccf716991e5d6d64dc0e3bc3828fd1990bc18400d680b1aa1960675daaaa\",\"license\":\"UNLICENSED\"},\"@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\r\\npragma solidity 0.6.12;\\r\\n// a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)\\r\\nlibrary BoringMath {\\r\\n function add(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {require(b == 0 || (c = a * b)/b == a, \\\"BoringMath: Mul Overflow\\\");}\\r\\n function to128(uint256 a) internal pure returns (uint128 c) {\\r\\n require(a <= uint128(-1), \\\"BoringMath: uint128 Overflow\\\");\\r\\n c = uint128(a);\\r\\n }\\r\\n function to64(uint256 a) internal pure returns (uint64 c) {\\r\\n require(a <= uint64(-1), \\\"BoringMath: uint64 Overflow\\\");\\r\\n c = uint64(a);\\r\\n }\\r\\n function to32(uint256 a) internal pure returns (uint32 c) {\\r\\n require(a <= uint32(-1), \\\"BoringMath: uint32 Overflow\\\");\\r\\n c = uint32(a);\\r\\n }\\r\\n}\\r\\n\\r\\nlibrary BoringMath128 {\\r\\n function add(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n}\\r\\n\\r\\nlibrary BoringMath64 {\\r\\n function add(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n}\\r\\n\\r\\nlibrary BoringMath32 {\\r\\n function add(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a + b) >= b, \\\"BoringMath: Add Overflow\\\");}\\r\\n function sub(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a - b) <= a, \\\"BoringMath: Underflow\\\");}\\r\\n}\",\"keccak256\":\"0x2d0e99483c5618251d4b52e8551918253bf044c63e0d09a2f1f652671f9ff762\",\"license\":\"MIT\"},\"contracts/MasterChefV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol\\\";\\nimport \\\"@boringcrypto/boring-solidity/contracts/BoringBatchable.sol\\\";\\nimport \\\"@boringcrypto/boring-solidity/contracts/BoringOwnable.sol\\\";\\nimport \\\"./libraries/SignedSafeMath.sol\\\";\\nimport \\\"./interfaces/IRewarder.sol\\\";\\nimport \\\"./interfaces/IMasterChef.sol\\\";\\n\\ninterface IMigratorChef {\\n // Take the current LP token address and return the new LP token address.\\n // Migrator should have full access to the caller's LP token.\\n function migrate(IERC20 token) external returns (IERC20);\\n}\\n\\n/// @notice The (older) MasterChef contract gives out a constant number of SUSHI tokens per block.\\n/// It is the only address with minting rights for SUSHI.\\n/// The idea for this MasterChef V2 (MCV2) contract is therefore to be the owner of a dummy token\\n/// that is deposited into the MasterChef V1 (MCV1) contract.\\n/// The allocation point for this pool on MCV1 is the total allocation point for all pools that receive double incentives.\\ncontract MasterChefV2 is BoringOwnable, BoringBatchable {\\n using BoringMath for uint256;\\n using BoringMath128 for uint128;\\n using BoringERC20 for IERC20;\\n using SignedSafeMath for int256;\\n\\n /// @notice Info of each MCV2 user.\\n /// `amount` LP token amount the user has provided.\\n /// `rewardDebt` The amount of SUSHI entitled to the user.\\n struct UserInfo {\\n uint256 amount;\\n int256 rewardDebt;\\n }\\n\\n /// @notice Info of each MCV2 pool.\\n /// `allocPoint` The amount of allocation points assigned to the pool.\\n /// Also known as the amount of SUSHI to distribute per block.\\n struct PoolInfo {\\n uint128 accSushiPerShare;\\n uint64 lastRewardBlock;\\n uint64 allocPoint;\\n }\\n\\n /// @notice Address of MCV1 contract.\\n IMasterChef public immutable MASTER_CHEF;\\n /// @notice Address of SUSHI contract.\\n IERC20 public immutable SUSHI;\\n /// @notice The index of MCV2 master pool in MCV1.\\n uint256 public immutable MASTER_PID;\\n // @notice The migrator contract. It has a lot of power. Can only be set through governance (owner).\\n IMigratorChef public migrator;\\n\\n /// @notice Info of each MCV2 pool.\\n PoolInfo[] public poolInfo;\\n /// @notice Address of the LP token for each MCV2 pool.\\n IERC20[] public lpToken;\\n /// @notice Address of each `IRewarder` contract in MCV2.\\n IRewarder[] public rewarder;\\n\\n /// @notice Info of each user that stakes LP tokens.\\n mapping (uint256 => mapping (address => UserInfo)) public userInfo;\\n /// @dev Total allocation points. Must be the sum of all allocation points in all pools.\\n uint256 public totalAllocPoint;\\n\\n uint256 private constant MASTERCHEF_SUSHI_PER_BLOCK = 1e20;\\n uint256 private constant ACC_SUSHI_PRECISION = 1e12;\\n\\n event Deposit(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event Withdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event Harvest(address indexed user, uint256 indexed pid, uint256 amount);\\n event LogPoolAddition(uint256 indexed pid, uint256 allocPoint, IERC20 indexed lpToken, IRewarder indexed rewarder);\\n event LogSetPool(uint256 indexed pid, uint256 allocPoint, IRewarder indexed rewarder, bool overwrite);\\n event LogUpdatePool(uint256 indexed pid, uint64 lastRewardBlock, uint256 lpSupply, uint256 accSushiPerShare);\\n event LogInit();\\n\\n /// @param _MASTER_CHEF The SushiSwap MCV1 contract address.\\n /// @param _sushi The SUSHI token contract address.\\n /// @param _MASTER_PID The pool ID of the dummy token on the base MCV1 contract.\\n constructor(IMasterChef _MASTER_CHEF, IERC20 _sushi, uint256 _MASTER_PID) public {\\n MASTER_CHEF = _MASTER_CHEF;\\n SUSHI = _sushi;\\n MASTER_PID = _MASTER_PID;\\n }\\n\\n /// @notice Deposits a dummy token to `MASTER_CHEF` MCV1. This is required because MCV1 holds the minting rights for SUSHI.\\n /// Any balance of transaction sender in `dummyToken` is transferred.\\n /// The allocation point for the pool on MCV1 is the total allocation point for all pools that receive double incentives.\\n /// @param dummyToken The address of the ERC-20 token to deposit into MCV1.\\n function init(IERC20 dummyToken) external {\\n uint256 balance = dummyToken.balanceOf(msg.sender);\\n require(balance != 0, \\\"MasterChefV2: Balance must exceed 0\\\");\\n dummyToken.safeTransferFrom(msg.sender, address(this), balance);\\n dummyToken.approve(address(MASTER_CHEF), balance);\\n MASTER_CHEF.deposit(MASTER_PID, balance);\\n emit LogInit();\\n }\\n\\n /// @notice Returns the number of MCV2 pools.\\n function poolLength() public view returns (uint256 pools) {\\n pools = poolInfo.length;\\n }\\n\\n /// @notice Add a new LP to the pool. Can only be called by the owner.\\n /// DO NOT add the same LP token more than once. Rewards will be messed up if you do.\\n /// @param allocPoint AP of the new pool.\\n /// @param _lpToken Address of the LP ERC-20 token.\\n /// @param _rewarder Address of the rewarder delegate.\\n function add(uint256 allocPoint, IERC20 _lpToken, IRewarder _rewarder) public onlyOwner {\\n uint256 lastRewardBlock = block.number;\\n totalAllocPoint = totalAllocPoint.add(allocPoint);\\n lpToken.push(_lpToken);\\n rewarder.push(_rewarder);\\n\\n poolInfo.push(PoolInfo({\\n allocPoint: allocPoint.to64(),\\n lastRewardBlock: lastRewardBlock.to64(),\\n accSushiPerShare: 0\\n }));\\n emit LogPoolAddition(lpToken.length.sub(1), allocPoint, _lpToken, _rewarder);\\n }\\n\\n /// @notice Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n /// @param _allocPoint New AP of the pool.\\n /// @param _rewarder Address of the rewarder delegate.\\n /// @param overwrite True if _rewarder should be `set`. Otherwise `_rewarder` is ignored.\\n function set(uint256 _pid, uint256 _allocPoint, IRewarder _rewarder, bool overwrite) public onlyOwner {\\n totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);\\n poolInfo[_pid].allocPoint = _allocPoint.to64();\\n if (overwrite) { rewarder[_pid] = _rewarder; }\\n emit LogSetPool(_pid, _allocPoint, overwrite ? _rewarder : rewarder[_pid], overwrite);\\n }\\n\\n /// @notice Set the `migrator` contract. Can only be called by the owner.\\n /// @param _migrator The contract address to set.\\n function setMigrator(IMigratorChef _migrator) public onlyOwner {\\n migrator = _migrator;\\n }\\n\\n /// @notice Migrate LP token to another LP contract through the `migrator` contract.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n function migrate(uint256 _pid) public {\\n require(address(migrator) != address(0), \\\"MasterChefV2: no migrator set\\\");\\n IERC20 _lpToken = lpToken[_pid];\\n uint256 bal = _lpToken.balanceOf(address(this));\\n _lpToken.approve(address(migrator), bal);\\n IERC20 newLpToken = migrator.migrate(_lpToken);\\n require(bal == newLpToken.balanceOf(address(this)), \\\"MasterChefV2: migrated balance must match\\\");\\n lpToken[_pid] = newLpToken;\\n }\\n\\n /// @notice View function to see pending SUSHI on frontend.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n /// @param _user Address of user.\\n /// @return pending SUSHI reward for a given user.\\n function pendingSushi(uint256 _pid, address _user) external view returns (uint256 pending) {\\n PoolInfo memory pool = poolInfo[_pid];\\n UserInfo storage user = userInfo[_pid][_user];\\n uint256 accSushiPerShare = pool.accSushiPerShare;\\n uint256 lpSupply = lpToken[_pid].balanceOf(address(this));\\n if (block.number > pool.lastRewardBlock && lpSupply != 0) {\\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\\n uint256 sushiReward = blocks.mul(sushiPerBlock()).mul(pool.allocPoint) / totalAllocPoint;\\n accSushiPerShare = accSushiPerShare.add(sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply);\\n }\\n pending = int256(user.amount.mul(accSushiPerShare) / ACC_SUSHI_PRECISION).sub(user.rewardDebt).toUInt256();\\n }\\n\\n /// @notice Update reward variables for all pools. Be careful of gas spending!\\n /// @param pids Pool IDs of all to be updated. Make sure to update all active pools.\\n function massUpdatePools(uint256[] calldata pids) external {\\n uint256 len = pids.length;\\n for (uint256 i = 0; i < len; ++i) {\\n updatePool(pids[i]);\\n }\\n }\\n\\n /// @notice Calculates and returns the `amount` of SUSHI per block.\\n function sushiPerBlock() public view returns (uint256 amount) {\\n amount = uint256(MASTERCHEF_SUSHI_PER_BLOCK)\\n .mul(MASTER_CHEF.poolInfo(MASTER_PID).allocPoint) / MASTER_CHEF.totalAllocPoint();\\n }\\n\\n /// @notice Update reward variables of the given pool.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @return pool Returns the pool that was updated.\\n function updatePool(uint256 pid) public returns (PoolInfo memory pool) {\\n pool = poolInfo[pid];\\n if (block.number > pool.lastRewardBlock) {\\n uint256 lpSupply = lpToken[pid].balanceOf(address(this));\\n if (lpSupply > 0) {\\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\\n uint256 sushiReward = blocks.mul(sushiPerBlock()).mul(pool.allocPoint) / totalAllocPoint;\\n pool.accSushiPerShare = pool.accSushiPerShare.add((sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply).to128());\\n }\\n pool.lastRewardBlock = block.number.to64();\\n poolInfo[pid] = pool;\\n emit LogUpdatePool(pid, pool.lastRewardBlock, lpSupply, pool.accSushiPerShare);\\n }\\n }\\n\\n /// @notice Deposit LP tokens to MCV2 for SUSHI allocation.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param amount LP token amount to deposit.\\n /// @param to The receiver of `amount` deposit benefit.\\n function deposit(uint256 pid, uint256 amount, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][to];\\n\\n // Effects\\n user.amount = user.amount.add(amount);\\n user.rewardDebt = user.rewardDebt.add(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\\n\\n // Interactions\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, to, to, 0, user.amount);\\n }\\n\\n lpToken[pid].safeTransferFrom(msg.sender, address(this), amount);\\n\\n emit Deposit(msg.sender, pid, amount, to);\\n }\\n\\n /// @notice Withdraw LP tokens from MCV2.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param amount LP token amount to withdraw.\\n /// @param to Receiver of the LP tokens.\\n function withdraw(uint256 pid, uint256 amount, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][msg.sender];\\n\\n // Effects\\n user.rewardDebt = user.rewardDebt.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\\n user.amount = user.amount.sub(amount);\\n\\n // Interactions\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, msg.sender, to, 0, user.amount);\\n }\\n \\n lpToken[pid].safeTransfer(to, amount);\\n\\n emit Withdraw(msg.sender, pid, amount, to);\\n }\\n\\n /// @notice Harvest proceeds for transaction sender to `to`.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param to Receiver of SUSHI rewards.\\n function harvest(uint256 pid, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][msg.sender];\\n int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION);\\n uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256();\\n\\n // Effects\\n user.rewardDebt = accumulatedSushi;\\n\\n // Interactions\\n if (_pendingSushi != 0) {\\n SUSHI.safeTransfer(to, _pendingSushi);\\n }\\n \\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward( pid, msg.sender, to, _pendingSushi, user.amount);\\n }\\n\\n emit Harvest(msg.sender, pid, _pendingSushi);\\n }\\n \\n /// @notice Withdraw LP tokens from MCV2 and harvest proceeds for transaction sender to `to`.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param amount LP token amount to withdraw.\\n /// @param to Receiver of the LP tokens and SUSHI rewards.\\n function withdrawAndHarvest(uint256 pid, uint256 amount, address to) public {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][msg.sender];\\n int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION);\\n uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256();\\n\\n // Effects\\n user.rewardDebt = accumulatedSushi.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION));\\n user.amount = user.amount.sub(amount);\\n \\n // Interactions\\n SUSHI.safeTransfer(to, _pendingSushi);\\n\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, msg.sender, to, _pendingSushi, user.amount);\\n }\\n\\n lpToken[pid].safeTransfer(to, amount);\\n\\n emit Withdraw(msg.sender, pid, amount, to);\\n emit Harvest(msg.sender, pid, _pendingSushi);\\n }\\n\\n /// @notice Harvests SUSHI from `MASTER_CHEF` MCV1 and pool `MASTER_PID` to this MCV2 contract.\\n function harvestFromMasterChef() public {\\n MASTER_CHEF.deposit(MASTER_PID, 0);\\n }\\n\\n /// @notice Withdraw without caring about rewards. EMERGENCY ONLY.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @param to Receiver of the LP tokens.\\n function emergencyWithdraw(uint256 pid, address to) public {\\n UserInfo storage user = userInfo[pid][msg.sender];\\n uint256 amount = user.amount;\\n user.amount = 0;\\n user.rewardDebt = 0;\\n\\n IRewarder _rewarder = rewarder[pid];\\n if (address(_rewarder) != address(0)) {\\n _rewarder.onSushiReward(pid, msg.sender, to, 0, 0);\\n }\\n\\n // Note: transfer can fail or succeed if `amount` is zero.\\n lpToken[pid].safeTransfer(to, amount);\\n emit EmergencyWithdraw(msg.sender, pid, amount, to);\\n }\\n}\\n\",\"keccak256\":\"0x2048c5e7b174e2f8f931045df32b1d56f09f488cfac3c87632b9730e0aba9bc3\",\"license\":\"MIT\"},\"contracts/interfaces/IMasterChef.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\\\";\\n\\ninterface IMasterChef {\\n using BoringERC20 for IERC20;\\n struct UserInfo {\\n uint256 amount; // How many LP tokens the user has provided.\\n uint256 rewardDebt; // Reward debt. See explanation below.\\n }\\n\\n struct PoolInfo {\\n IERC20 lpToken; // Address of LP token contract.\\n uint256 allocPoint; // How many allocation points assigned to this pool. SUSHI to distribute per block.\\n uint256 lastRewardBlock; // Last block number that SUSHI distribution occurs.\\n uint256 accSushiPerShare; // Accumulated SUSHI per share, times 1e12. See below.\\n }\\n\\n function poolInfo(uint256 pid) external view returns (IMasterChef.PoolInfo memory);\\n function totalAllocPoint() external view returns (uint256);\\n function deposit(uint256 _pid, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xbbb2138d7b8be86b5d0bed347ab7f6d2d3e66043393abc882ad37a75fdd860d3\",\"license\":\"MIT\"},\"contracts/interfaces/IRewarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\\\";\\ninterface IRewarder {\\n using BoringERC20 for IERC20;\\n function onSushiReward(uint256 pid, address user, address recipient, uint256 sushiAmount, uint256 newLpAmount) external;\\n function pendingTokens(uint256 pid, address user, uint256 sushiAmount) external returns (IERC20[] memory, uint256[] memory);\\n}\\n\",\"keccak256\":\"0xf9fa549b5fe5d156c908a3ca612b1acd219666dbadc195d9bea4dd34d3cec94a\",\"license\":\"MIT\"},\"contracts/libraries/SignedSafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\n\\nlibrary SignedSafeMath {\\n int256 constant private _INT256_MIN = -2**255;\\n\\n /**\\n * @dev Returns the multiplication of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(int256 a, int256 b) internal pure returns (int256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) {\\n return 0;\\n }\\n\\n require(!(a == -1 && b == _INT256_MIN), \\\"SignedSafeMath: multiplication overflow\\\");\\n\\n int256 c = a * b;\\n require(c / a == b, \\\"SignedSafeMath: multiplication overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two signed integers. Reverts on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(int256 a, int256 b) internal pure returns (int256) {\\n require(b != 0, \\\"SignedSafeMath: division by zero\\\");\\n require(!(b == -1 && a == _INT256_MIN), \\\"SignedSafeMath: division overflow\\\");\\n\\n int256 c = a / b;\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(int256 a, int256 b) internal pure returns (int256) {\\n int256 c = a - b;\\n require((b >= 0 && c <= a) || (b < 0 && c > a), \\\"SignedSafeMath: subtraction overflow\\\");\\n\\n return c;\\n }\\n\\n /**\\n * @dev Returns the addition of two signed integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(int256 a, int256 b) internal pure returns (int256) {\\n int256 c = a + b;\\n require((b >= 0 && c >= a) || (b < 0 && c < a), \\\"SignedSafeMath: addition overflow\\\");\\n\\n return c;\\n }\\n\\n function toUInt256(int256 a) internal pure returns (uint256) {\\n require(a >= 0, \\\"Integer < 0\\\");\\n return uint256(a);\\n }\\n}\",\"keccak256\":\"0x4991beb21b224dfcdc3d251e0a60fdc304d4f6b699b2c35d08f3974e5b84c86a\",\"license\":\"MIT\"},\"contracts/mocks/ComplexRewarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\nimport \\\"../interfaces/IRewarder.sol\\\";\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol\\\";\\nimport \\\"@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol\\\";\\nimport \\\"@boringcrypto/boring-solidity/contracts/BoringOwnable.sol\\\";\\nimport \\\"../MasterChefV2.sol\\\";\\n\\n/// @author @0xKeno\\ncontract ComplexRewarder is IRewarder, BoringOwnable{\\n using BoringMath for uint256;\\n using BoringMath128 for uint128;\\n using BoringERC20 for IERC20;\\n\\n IERC20 private immutable rewardToken;\\n\\n /// @notice Info of each MCV2 user.\\n /// `amount` LP token amount the user has provided.\\n /// `rewardDebt` The amount of SUSHI entitled to the user.\\n struct UserInfo {\\n uint256 amount;\\n uint256 rewardDebt;\\n }\\n\\n /// @notice Info of each MCV2 pool.\\n /// `allocPoint` The amount of allocation points assigned to the pool.\\n /// Also known as the amount of SUSHI to distribute per block.\\n struct PoolInfo {\\n uint128 accSushiPerShare;\\n uint64 lastRewardBlock;\\n uint64 allocPoint;\\n }\\n\\n /// @notice Info of each pool.\\n mapping (uint256 => PoolInfo) public poolInfo;\\n\\n uint256[] public poolIds;\\n\\n /// @notice Info of each user that stakes LP tokens.\\n mapping (uint256 => mapping (address => UserInfo)) public userInfo;\\n /// @dev Total allocation points. Must be the sum of all allocation points in all pools.\\n uint256 totalAllocPoint;\\n\\n uint256 public tokenPerBlock;\\n uint256 private constant ACC_TOKEN_PRECISION = 1e12;\\n\\n address private immutable MASTERCHEF_V2;\\n\\n event LogOnReward(address indexed user, uint256 indexed pid, uint256 amount, address indexed to);\\n event LogPoolAddition(uint256 indexed pid, uint256 allocPoint);\\n event LogSetPool(uint256 indexed pid, uint256 allocPoint);\\n event LogUpdatePool(uint256 indexed pid, uint64 lastRewardBlock, uint256 lpSupply, uint256 accSushiPerShare);\\n event LogInit();\\n\\n constructor (IERC20 _rewardToken, uint256 _tokenPerBlock, address _MASTERCHEF_V2) public {\\n rewardToken = _rewardToken;\\n tokenPerBlock = _tokenPerBlock;\\n MASTERCHEF_V2 = _MASTERCHEF_V2;\\n }\\n\\n\\n function onSushiReward (uint256 pid, address _user, address to, uint256, uint256 lpToken) onlyMCV2 override external {\\n PoolInfo memory pool = updatePool(pid);\\n UserInfo storage user = userInfo[pid][_user];\\n uint256 pending;\\n if (user.amount > 0) {\\n pending =\\n (user.amount.mul(pool.accSushiPerShare) / ACC_TOKEN_PRECISION).sub(\\n user.rewardDebt\\n );\\n rewardToken.safeTransfer(to, pending);\\n }\\n user.amount = lpToken;\\n user.rewardDebt = lpToken.mul(pool.accSushiPerShare) / ACC_TOKEN_PRECISION;\\n emit LogOnReward(_user, pid, pending, to);\\n }\\n \\n function pendingTokens(uint256 pid, address user, uint256) override external returns (IERC20[] memory rewardTokens, uint256[] memory rewardAmounts) {\\n IERC20[] memory _rewardTokens = new IERC20[](1);\\n _rewardTokens[0] = (rewardToken);\\n uint256[] memory _rewardAmounts = new uint256[](1);\\n _rewardAmounts[0] = pendingToken(pid, user);\\n return (_rewardTokens, _rewardAmounts);\\n }\\n\\n modifier onlyMCV2 {\\n require(\\n msg.sender == MASTERCHEF_V2,\\n \\\"Only MCV2 can call this function.\\\"\\n );\\n _;\\n }\\n\\n /// @notice Returns the number of MCV2 pools.\\n function poolLength() public view returns (uint256 pools) {\\n pools = poolIds.length;\\n }\\n\\n /// @notice Add a new LP to the pool. Can only be called by the owner.\\n /// DO NOT add the same LP token more than once. Rewards will be messed up if you do.\\n /// @param allocPoint AP of the new pool.\\n /// @param _pid Pid on MCV2\\n function add(uint256 allocPoint, uint256 _pid) public onlyOwner {\\n require(poolInfo[_pid].lastRewardBlock == 0, \\\"Pool already exists\\\");\\n uint256 lastRewardBlock = block.number;\\n totalAllocPoint = totalAllocPoint.add(allocPoint);\\n\\n poolInfo[_pid] = PoolInfo({\\n allocPoint: allocPoint.to64(),\\n lastRewardBlock: lastRewardBlock.to64(),\\n accSushiPerShare: 0\\n });\\n poolIds.push(_pid);\\n emit LogPoolAddition(_pid, allocPoint);\\n }\\n\\n /// @notice Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\\n /// @param _pid The index of the pool. See `poolInfo`.\\n /// @param _allocPoint New AP of the pool.\\n function set(uint256 _pid, uint256 _allocPoint) public onlyOwner {\\n totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint);\\n poolInfo[_pid].allocPoint = _allocPoint.to64();\\n emit LogSetPool(_pid, _allocPoint);\\n }\\n\\n /// @notice View function to see pending Token\\n /// @param _pid The index of the pool. See `poolInfo`.\\n /// @param _user Address of user.\\n /// @return pending SUSHI reward for a given user.\\n function pendingToken(uint256 _pid, address _user) public view returns (uint256 pending) {\\n PoolInfo memory pool = poolInfo[_pid];\\n UserInfo storage user = userInfo[_pid][_user];\\n uint256 accSushiPerShare = pool.accSushiPerShare;\\n uint256 lpSupply = MasterChefV2(MASTERCHEF_V2).lpToken(_pid).balanceOf(MASTERCHEF_V2);\\n if (block.number > pool.lastRewardBlock && lpSupply != 0) {\\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\\n uint256 sushiReward = blocks.mul(tokenPerBlock).mul(pool.allocPoint) / totalAllocPoint;\\n accSushiPerShare = accSushiPerShare.add(sushiReward.mul(ACC_TOKEN_PRECISION) / lpSupply);\\n }\\n pending = (user.amount.mul(accSushiPerShare) / ACC_TOKEN_PRECISION).sub(user.rewardDebt);\\n }\\n\\n /// @notice Update reward variables for all pools. Be careful of gas spending!\\n /// @param pids Pool IDs of all to be updated. Make sure to update all active pools.\\n function massUpdatePools(uint256[] calldata pids) external {\\n uint256 len = pids.length;\\n for (uint256 i = 0; i < len; ++i) {\\n updatePool(pids[i]);\\n }\\n }\\n\\n /// @notice Update reward variables of the given pool.\\n /// @param pid The index of the pool. See `poolInfo`.\\n /// @return pool Returns the pool that was updated.\\n function updatePool(uint256 pid) public returns (PoolInfo memory pool) {\\n pool = poolInfo[pid];\\n if (block.number > pool.lastRewardBlock) {\\n uint256 lpSupply = MasterChefV2(MASTERCHEF_V2).lpToken(pid).balanceOf(MASTERCHEF_V2);\\n\\n if (lpSupply > 0) {\\n uint256 blocks = block.number.sub(pool.lastRewardBlock);\\n uint256 sushiReward = blocks.mul(tokenPerBlock).mul(pool.allocPoint) / totalAllocPoint;\\n pool.accSushiPerShare = pool.accSushiPerShare.add((sushiReward.mul(ACC_TOKEN_PRECISION) / lpSupply).to128());\\n }\\n pool.lastRewardBlock = block.number.to64();\\n poolInfo[pid] = pool;\\n emit LogUpdatePool(pid, pool.lastRewardBlock, lpSupply, pool.accSushiPerShare);\\n }\\n }\\n\\n}\",\"keccak256\":\"0xfacc62575e2a6b8894e3bc2b031ddeaa2547dd2d84523f678a1a8876ef8831a2\",\"license\":\"MIT\"}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 149, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 151, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "pendingOwner", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 2406, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "poolInfo", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_uint256,t_struct(PoolInfo)2401_storage)" + }, + { + "astId": 2409, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "poolIds", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 2416, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "userInfo", + "offset": 0, + "slot": "4", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_struct(UserInfo)2394_storage))" + }, + { + "astId": 2419, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "totalAllocPoint", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 2421, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "tokenPerBlock", + "offset": 0, + "slot": "6", + "type": "t_uint256" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)dyn_storage": { + "base": "t_uint256", + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(UserInfo)2394_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct ComplexRewarder.UserInfo)", + "numberOfBytes": "32", + "value": "t_struct(UserInfo)2394_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_struct(UserInfo)2394_storage))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => struct ComplexRewarder.UserInfo))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_struct(UserInfo)2394_storage)" + }, + "t_mapping(t_uint256,t_struct(PoolInfo)2401_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct ComplexRewarder.PoolInfo)", + "numberOfBytes": "32", + "value": "t_struct(PoolInfo)2401_storage" + }, + "t_struct(PoolInfo)2401_storage": { + "encoding": "inplace", + "label": "struct ComplexRewarder.PoolInfo", + "members": [ + { + "astId": 2396, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "accSushiPerShare", + "offset": 0, + "slot": "0", + "type": "t_uint128" + }, + { + "astId": 2398, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "lastRewardBlock", + "offset": 16, + "slot": "0", + "type": "t_uint64" + }, + { + "astId": 2400, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "allocPoint", + "offset": 24, + "slot": "0", + "type": "t_uint64" + } + ], + "numberOfBytes": "32" + }, + "t_struct(UserInfo)2394_storage": { + "encoding": "inplace", + "label": "struct ComplexRewarder.UserInfo", + "members": [ + { + "astId": 2391, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "amount", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 2393, + "contract": "contracts/mocks/ComplexRewarder.sol:ComplexRewarder", + "label": "rewardDebt", + "offset": 0, + "slot": "1", + "type": "t_uint256" + } + ], + "numberOfBytes": "64" + }, + "t_uint128": { + "encoding": "inplace", + "label": "uint128", + "numberOfBytes": "16" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + } + } + }, + "userdoc": { + "kind": "user", + "methods": { + "add(uint256,uint256)": { + "notice": "Add a new LP to the pool. Can only be called by the owner. DO NOT add the same LP token more than once. Rewards will be messed up if you do." + }, + "massUpdatePools(uint256[])": { + "notice": "Update reward variables for all pools. Be careful of gas spending!" + }, + "pendingToken(uint256,address)": { + "notice": "View function to see pending Token" + }, + "poolInfo(uint256)": { + "notice": "Info of each pool." + }, + "poolLength()": { + "notice": "Returns the number of MCV2 pools." + }, + "set(uint256,uint256)": { + "notice": "Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner." + }, + "updatePool(uint256)": { + "notice": "Update reward variables of the given pool." + }, + "userInfo(uint256,address)": { + "notice": "Info of each user that stakes LP tokens." + } + }, + "version": 1 + } + } + } + }, + "errors": [ + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "contracts/mocks/RewarderBrokenMock.sol:13:28: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n function pendingTokens(uint256 pid, address user, uint256 sushiAmount ...\n ^---------^\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 297, + "file": "contracts/mocks/RewarderBrokenMock.sol", + "start": 286 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "contracts/mocks/RewarderBrokenMock.sol:13:41: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n ... unction pendingTokens(uint256 pid, address user, uint256 sushiAmount) override ext ...\n ^----------^\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 311, + "file": "contracts/mocks/RewarderBrokenMock.sol", + "start": 299 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "contracts/mocks/RewarderBrokenMock.sol:13:55: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n ... gTokens(uint256 pid, address user, uint256 sushiAmount) override external returns (IERC20 ...\n ^-----------------^\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 332, + "file": "contracts/mocks/RewarderBrokenMock.sol", + "start": 313 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "contracts/mocks/RewarderBrokenMock.sol:13:103: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n ... Amount) override external returns (IERC20[] memory rewardTokens, uint256[] memory rewardAmounts){\n ^--------------------------^\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 389, + "file": "contracts/mocks/RewarderBrokenMock.sol", + "start": 361 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "contracts/mocks/RewarderBrokenMock.sol:13:133: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n ... rns (IERC20[] memory rewardTokens, uint256[] memory rewardAmounts){\n ^----------------------------^\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 421, + "file": "contracts/mocks/RewarderBrokenMock.sol", + "start": 391 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "contracts/mocks/RewarderMock.sol:23:38: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n function onSushiReward (uint256, address user, address to, uint256 sushiAmount, uint256) onlyMCV2 override external {\n ^----------^\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 823, + "file": "contracts/mocks/RewarderMock.sol", + "start": 811 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "contracts/mocks/RewarderMock.sol:33:28: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n function pendingTokens(uint256 pid, address user, uint256 sushiAmount ...\n ^---------^\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 1279, + "file": "contracts/mocks/RewarderMock.sol", + "start": 1268 + }, + "type": "Warning" + }, + { + "component": "general", + "errorCode": "5667", + "formattedMessage": "contracts/mocks/RewarderMock.sol:33:41: Warning: Unused function parameter. Remove or comment out the variable name to silence this warning.\n ... unction pendingTokens(uint256 pid, address user, uint256 sushiAmount) override ext ...\n ^----------^\n", + "message": "Unused function parameter. Remove or comment out the variable name to silence this warning.", + "severity": "warning", + "sourceLocation": { + "end": 1293, + "file": "contracts/mocks/RewarderMock.sol", + "start": 1281 + }, + "type": "Warning" + } + ], + "sources": { + "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol": { + "ast": { + "absolutePath": "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol", + "exportedSymbols": { + "BoringERC20": [ + 553 + ] + }, + "id": 554, + "license": "UNLICENSED", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 339, + "literals": [ + "solidity", + "0.6", + ".12" + ], + "nodeType": "PragmaDirective", + "src": "40:23:3" + }, + { + "absolutePath": "@boringcrypto/boring-solidity/contracts/interfaces/IERC20.sol", + "file": "../interfaces/IERC20.sol", + "id": 340, + "nodeType": "ImportDirective", + "scope": 554, + "sourceUnit": 338, + "src": "67:34:3", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": null, + "fullyImplemented": true, + "id": 553, + "linearizedBaseContracts": [ + 553 + ], + "name": "BoringERC20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 378, + "nodeType": "Block", + "src": "203:197:3", + "statements": [ + { + "assignments": [ + 348, + 350 + ], + "declarations": [ + { + "constant": false, + "id": 348, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 378, + "src": "215:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 347, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "215:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 350, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 378, + "src": "229:17:3", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 349, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "229:5:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 361, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30783935643839623431", + "id": 358, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "299:10:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_2514000705_by_1", + "typeString": "int_const 2514000705" + }, + "value": "0x95d89b41" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_2514000705_by_1", + "typeString": "int_const 2514000705" + } + ], + "expression": { + "argumentTypes": null, + "id": 356, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "276:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 357, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "276:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 359, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "276:34:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 353, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 342, + "src": "258:5:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + ], + "id": 352, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "250:7:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 351, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "250:7:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "250:14:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "staticcall", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "250:25:3", + "typeDescriptions": { + "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) view returns (bool,bytes memory)" + } + }, + "id": 360, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "250:61:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "214:97:3" + }, + { + "expression": { + "argumentTypes": null, + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 362, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 348, + "src": "329:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 363, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 350, + "src": "340:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 364, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "340:11:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 365, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "354:1:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "340:15:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "329:26:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "argumentTypes": null, + "hexValue": "3f3f3f", + "id": 375, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "387:5:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ad68b4dd5516c9b8c2050c111c09e315e44fd13499c6724a87c1b4642b615187", + "typeString": "literal_string \"???\"" + }, + "value": "???" + }, + "id": 376, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "329:63:3", + "trueExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 370, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 350, + "src": "369:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "id": 372, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "376:6:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 371, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "376:6:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + } + ], + "id": 373, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "375:8:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + } + ], + "expression": { + "argumentTypes": null, + "id": 368, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "358:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 369, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "358:10:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "358:26:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 346, + "id": 377, + "nodeType": "Return", + "src": "322:70:3" + } + ] + }, + "documentation": null, + "id": 379, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeSymbol", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 343, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 342, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 379, + "src": "152:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 341, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "152:6:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "151:14:3" + }, + "returnParameters": { + "id": 346, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 345, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 379, + "src": "188:13:3", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 344, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "188:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "187:15:3" + }, + "scope": 553, + "src": "132:268:3", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 417, + "nodeType": "Block", + "src": "477:197:3", + "statements": [ + { + "assignments": [ + 387, + 389 + ], + "declarations": [ + { + "constant": false, + "id": 387, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 417, + "src": "489:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 386, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "489:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 389, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 417, + "src": "503:17:3", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 388, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "503:5:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 400, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30783036666464653033", + "id": 397, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "573:10:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_117300739_by_1", + "typeString": "int_const 117300739" + }, + "value": "0x06fdde03" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_117300739_by_1", + "typeString": "int_const 117300739" + } + ], + "expression": { + "argumentTypes": null, + "id": 395, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "550:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 396, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "550:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 398, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "550:34:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 392, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 381, + "src": "532:5:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + ], + "id": 391, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "524:7:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 390, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "524:7:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "524:14:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "staticcall", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "524:25:3", + "typeDescriptions": { + "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) view returns (bool,bytes memory)" + } + }, + "id": 399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "524:61:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "488:97:3" + }, + { + "expression": { + "argumentTypes": null, + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 401, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 387, + "src": "603:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 402, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 389, + "src": "614:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "614:11:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 404, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "628:1:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "614:15:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "603:26:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "argumentTypes": null, + "hexValue": "3f3f3f", + "id": 414, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "661:5:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ad68b4dd5516c9b8c2050c111c09e315e44fd13499c6724a87c1b4642b615187", + "typeString": "literal_string \"???\"" + }, + "value": "???" + }, + "id": 415, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "603:63:3", + "trueExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 409, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 389, + "src": "643:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "id": 411, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "650:6:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 410, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "650:6:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + } + ], + "id": 412, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "649:8:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + } + ], + "expression": { + "argumentTypes": null, + "id": 407, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "632:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 408, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "632:10:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "632:26:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "functionReturnParameters": 385, + "id": 416, + "nodeType": "Return", + "src": "596:70:3" + } + ] + }, + "documentation": null, + "id": 418, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeName", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 382, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 381, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 418, + "src": "426:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 380, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "426:6:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "425:14:3" + }, + "returnParameters": { + "id": 385, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 384, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 418, + "src": "462:13:3", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 383, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "462:6:3", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "461:15:3" + }, + "scope": 553, + "src": "408:266:3", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 456, + "nodeType": "Block", + "src": "748:195:3", + "statements": [ + { + "assignments": [ + 426, + 428 + ], + "declarations": [ + { + "constant": false, + "id": 426, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 456, + "src": "760:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 425, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "760:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 428, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 456, + "src": "774:17:3", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 427, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "774:5:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 439, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30783331336365353637", + "id": 436, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "844:10:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_826074471_by_1", + "typeString": "int_const 826074471" + }, + "value": "0x313ce567" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_826074471_by_1", + "typeString": "int_const 826074471" + } + ], + "expression": { + "argumentTypes": null, + "id": 434, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "821:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 435, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "821:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 437, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "821:34:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 431, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 420, + "src": "803:5:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + ], + "id": 430, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "795:7:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 429, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "795:7:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "795:14:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 433, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "staticcall", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "795:25:3", + "typeDescriptions": { + "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) view returns (bool,bytes memory)" + } + }, + "id": 438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "795:61:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "759:97:3" + }, + { + "expression": { + "argumentTypes": null, + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 440, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 426, + "src": "874:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 444, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 441, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "885:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "885:11:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "3332", + "id": 443, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "900:2:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "885:17:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "874:28:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "argumentTypes": null, + "hexValue": "3138", + "id": 453, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "933:2:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "id": 454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "874:61:3", + "trueExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 448, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 428, + "src": "916:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "id": 450, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "923:5:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + }, + "typeName": { + "id": 449, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "923:5:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + } + ], + "id": 451, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "922:7:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_uint8_$", + "typeString": "type(uint8)" + } + ], + "expression": { + "argumentTypes": null, + "id": 446, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "905:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 447, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "905:10:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "905:25:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "functionReturnParameters": 424, + "id": 455, + "nodeType": "Return", + "src": "867:68:3" + } + ] + }, + "documentation": null, + "id": 457, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeDecimals", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 421, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 420, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 457, + "src": "704:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 419, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "704:6:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "703:14:3" + }, + "returnParameters": { + "id": 424, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 423, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 457, + "src": "741:5:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 422, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "741:5:3", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "740:7:3" + }, + "scope": 553, + "src": "682:261:3", + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 502, + "nodeType": "Block", + "src": "1024:231:3", + "statements": [ + { + "assignments": [ + 467, + 469 + ], + "declarations": [ + { + "constant": false, + "id": 467, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 502, + "src": "1036:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 466, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1036:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 469, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 502, + "src": "1050:17:3", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 468, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1050:5:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 482, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30786139303539636262", + "id": 477, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1114:10:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_2835717307_by_1", + "typeString": "int_const 2835717307" + }, + "value": "0xa9059cbb" + }, + { + "argumentTypes": null, + "id": 478, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 461, + "src": "1126:2:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 479, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 463, + "src": "1130:6:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_2835717307_by_1", + "typeString": "int_const 2835717307" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 475, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1091:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 476, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1091:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1091:46:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 472, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 459, + "src": "1079:5:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + ], + "id": 471, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1071:7:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 470, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1071:7:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 473, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1071:14:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1071:19:3", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1071:67:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1035:103:3" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 498, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 484, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 467, + "src": "1157:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 496, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 485, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "1169:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1169:11:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 487, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1184:1:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1169:16:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 491, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 469, + "src": "1200:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "id": 493, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1207:4:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + }, + "typeName": { + "id": 492, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1207:4:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + } + ], + "id": 494, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1206:6:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + } + ], + "expression": { + "argumentTypes": null, + "id": 489, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1189:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 490, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1189:10:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 495, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1189:24:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1169:44:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 497, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1168:46:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1157:57:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "426f72696e6745524332303a205472616e73666572206661696c6564", + "id": 499, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1216:30:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1a3f0851ddc9e157ae96e52ed9dfd71a8cb4b1cf2a73b26b9f3f9e0aa9469d27", + "typeString": "literal_string \"BoringERC20: Transfer failed\"" + }, + "value": "BoringERC20: Transfer failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1a3f0851ddc9e157ae96e52ed9dfd71a8cb4b1cf2a73b26b9f3f9e0aa9469d27", + "typeString": "literal_string \"BoringERC20: Transfer failed\"" + } + ], + "id": 483, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1149:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1149:98:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 501, + "nodeType": "ExpressionStatement", + "src": "1149:98:3" + } + ] + }, + "documentation": null, + "id": 503, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeTransfer", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 464, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 459, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 503, + "src": "973:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 458, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "973:6:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 461, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 503, + "src": "987:10:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 460, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "987:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 463, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 503, + "src": "999:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 462, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "999:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "972:42:3" + }, + "returnParameters": { + "id": 465, + "nodeType": "ParameterList", + "parameters": [], + "src": "1024:0:3" + }, + "scope": 553, + "src": "951:304:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 551, + "nodeType": "Block", + "src": "1354:241:3", + "statements": [ + { + "assignments": [ + 515, + 517 + ], + "declarations": [ + { + "constant": false, + "id": 515, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 551, + "src": "1366:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 514, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1366:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 517, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 551, + "src": "1380:17:3", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 516, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1380:5:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 531, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30783233623837326464", + "id": 525, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1444:10:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_599290589_by_1", + "typeString": "int_const 599290589" + }, + "value": "0x23b872dd" + }, + { + "argumentTypes": null, + "id": 526, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 507, + "src": "1456:4:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 527, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 509, + "src": "1462:2:3", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 528, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 511, + "src": "1466:6:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_599290589_by_1", + "typeString": "int_const 599290589" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 523, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1421:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 524, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encodeWithSelector", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1421:22:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (bytes4) pure returns (bytes memory)" + } + }, + "id": 529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1421:52:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 520, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 505, + "src": "1409:5:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + ], + "id": 519, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1401:7:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 518, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1401:7:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1401:14:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1401:19:3", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1401:73:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1365:109:3" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 547, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 533, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 515, + "src": "1493:7:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 534, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 517, + "src": "1505:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1505:11:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 536, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1520:1:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1505:16:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 540, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 517, + "src": "1536:4:3", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "id": 542, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1543:4:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + }, + "typeName": { + "id": 541, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "1543:4:3", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + } + ], + "id": 543, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1542:6:3", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + } + ], + "expression": { + "argumentTypes": null, + "id": 538, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "1525:3:3", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 539, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "1525:10:3", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1525:24:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1505:44:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 546, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1504:46:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1493:57:3", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "426f72696e6745524332303a205472616e7366657246726f6d206661696c6564", + "id": 548, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1552:34:3", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_dffd2f381f9235cb5927387124071d63a91c90f587c3edae76629d7dc4794f26", + "typeString": "literal_string \"BoringERC20: TransferFrom failed\"" + }, + "value": "BoringERC20: TransferFrom failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_dffd2f381f9235cb5927387124071d63a91c90f587c3edae76629d7dc4794f26", + "typeString": "literal_string \"BoringERC20: TransferFrom failed\"" + } + ], + "id": 532, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1485:7:3", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1485:102:3", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 550, + "nodeType": "ExpressionStatement", + "src": "1485:102:3" + } + ] + }, + "documentation": null, + "id": 552, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "safeTransferFrom", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 512, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 505, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 552, + "src": "1289:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 504, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "1289:6:3", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 507, + "mutability": "mutable", + "name": "from", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 552, + "src": "1303:12:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 506, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1303:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 509, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 552, + "src": "1317:10:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 508, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1317:7:3", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 511, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 552, + "src": "1329:14:3", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 510, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1329:7:3", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1288:56:3" + }, + "returnParameters": { + "id": 513, + "nodeType": "ParameterList", + "parameters": [], + "src": "1354:0:3" + }, + "scope": 553, + "src": "1263:332:3", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 554, + "src": "105:1493:3" + } + ], + "src": "40:1558:3" + }, + "id": 3 + }, + "contracts/MasterChefV2.sol": { + "ast": { + "absolutePath": "contracts/MasterChefV2.sol", + "exportedSymbols": { + "IMigratorChef": [ + 858 + ], + "MasterChefV2": [ + 2091 + ] + }, + "id": 2092, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 843, + "literals": [ + "solidity", + "0.6", + ".12" + ], + "nodeType": "PragmaDirective", + "src": "33:23:5" + }, + { + "id": 844, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "57:33:5" + }, + { + "absolutePath": "@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol", + "file": "@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol", + "id": 845, + "nodeType": "ImportDirective", + "scope": 2092, + "sourceUnit": 842, + "src": "92:74:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@boringcrypto/boring-solidity/contracts/BoringBatchable.sol", + "file": "@boringcrypto/boring-solidity/contracts/BoringBatchable.sol", + "id": 846, + "nodeType": "ImportDirective", + "scope": 2092, + "sourceUnit": 146, + "src": "167:69:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@boringcrypto/boring-solidity/contracts/BoringOwnable.sol", + "file": "@boringcrypto/boring-solidity/contracts/BoringOwnable.sol", + "id": 847, + "nodeType": "ImportDirective", + "scope": 2092, + "sourceUnit": 272, + "src": "237:67:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/libraries/SignedSafeMath.sol", + "file": "./libraries/SignedSafeMath.sol", + "id": 848, + "nodeType": "ImportDirective", + "scope": 2092, + "sourceUnit": 2366, + "src": "305:40:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/interfaces/IRewarder.sol", + "file": "./interfaces/IRewarder.sol", + "id": 849, + "nodeType": "ImportDirective", + "scope": 2092, + "sourceUnit": 2168, + "src": "346:36:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/interfaces/IMasterChef.sol", + "file": "./interfaces/IMasterChef.sol", + "id": 850, + "nodeType": "ImportDirective", + "scope": 2092, + "sourceUnit": 2133, + "src": "383:38:5", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": null, + "fullyImplemented": false, + "id": 858, + "linearizedBaseContracts": [ + 858 + ], + "name": "IMigratorChef", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": null, + "documentation": null, + "functionSelector": "ce5494bb", + "id": 857, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "migrate", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 853, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 852, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 857, + "src": "614:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 851, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "614:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "613:14:5" + }, + "returnParameters": { + "id": 856, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 855, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 857, + "src": "646:6:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 854, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "646:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "645:8:5" + }, + "scope": 858, + "src": "597:57:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2092, + "src": "423:233:5" + }, + { + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 860, + "name": "BoringOwnable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 271, + "src": "1123:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringOwnable_$271", + "typeString": "contract BoringOwnable" + } + }, + "id": 861, + "nodeType": "InheritanceSpecifier", + "src": "1123:13:5" + }, + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 862, + "name": "BoringBatchable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 145, + "src": "1138:15:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringBatchable_$145", + "typeString": "contract BoringBatchable" + } + }, + "id": 863, + "nodeType": "InheritanceSpecifier", + "src": "1138:15:5" + } + ], + "contractDependencies": [ + 110, + 145, + 152, + 271 + ], + "contractKind": "contract", + "documentation": { + "id": 859, + "nodeType": "StructuredDocumentation", + "src": "658:440:5", + "text": "@notice The (older) MasterChef contract gives out a constant number of SUSHI tokens per block.\n It is the only address with minting rights for SUSHI.\n The idea for this MasterChef V2 (MCV2) contract is therefore to be the owner of a dummy token\n that is deposited into the MasterChef V1 (MCV1) contract.\n The allocation point for this pool on MCV1 is the total allocation point for all pools that receive double incentives." + }, + "fullyImplemented": true, + "id": 2091, + "linearizedBaseContracts": [ + 2091, + 145, + 110, + 271, + 152 + ], + "name": "MasterChefV2", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 866, + "libraryName": { + "contractScope": null, + "id": 864, + "name": "BoringMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 706, + "src": "1166:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringMath_$706", + "typeString": "library BoringMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1160:29:5", + "typeName": { + "id": 865, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1181:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 869, + "libraryName": { + "contractScope": null, + "id": 867, + "name": "BoringMath128", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 751, + "src": "1200:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringMath128_$751", + "typeString": "library BoringMath128" + } + }, + "nodeType": "UsingForDirective", + "src": "1194:32:5", + "typeName": { + "id": 868, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "1218:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + }, + { + "id": 872, + "libraryName": { + "contractScope": null, + "id": 870, + "name": "BoringERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 553, + "src": "1237:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringERC20_$553", + "typeString": "library BoringERC20" + } + }, + "nodeType": "UsingForDirective", + "src": "1231:29:5", + "typeName": { + "contractScope": null, + "id": 871, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "1253:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + }, + { + "id": 875, + "libraryName": { + "contractScope": null, + "id": 873, + "name": "SignedSafeMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2365, + "src": "1271:14:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SignedSafeMath_$2365", + "typeString": "library SignedSafeMath" + } + }, + "nodeType": "UsingForDirective", + "src": "1265:32:5", + "typeName": { + "id": 874, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1290:6:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + }, + { + "canonicalName": "MasterChefV2.UserInfo", + "id": 880, + "members": [ + { + "constant": false, + "id": 877, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 880, + "src": "1488:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 876, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1488:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 879, + "mutability": "mutable", + "name": "rewardDebt", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 880, + "src": "1512:17:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 878, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1512:6:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "UserInfo", + "nodeType": "StructDefinition", + "scope": 2091, + "src": "1462:74:5", + "visibility": "public" + }, + { + "canonicalName": "MasterChefV2.PoolInfo", + "id": 887, + "members": [ + { + "constant": false, + "id": 882, + "mutability": "mutable", + "name": "accSushiPerShare", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 887, + "src": "1750:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + }, + "typeName": { + "id": 881, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "1750:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 884, + "mutability": "mutable", + "name": "lastRewardBlock", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 887, + "src": "1784:22:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 883, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1784:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 886, + "mutability": "mutable", + "name": "allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 887, + "src": "1816:17:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 885, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1816:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "PoolInfo", + "nodeType": "StructDefinition", + "scope": 2091, + "src": "1724:116:5", + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 888, + "nodeType": "StructuredDocumentation", + "src": "1846:37:5", + "text": "@notice Address of MCV1 contract." + }, + "functionSelector": "edd8b170", + "id": 890, + "mutability": "immutable", + "name": "MASTER_CHEF", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "1888:40:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + }, + "typeName": { + "contractScope": null, + "id": 889, + "name": "IMasterChef", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2132, + "src": "1888:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 891, + "nodeType": "StructuredDocumentation", + "src": "1934:38:5", + "text": "@notice Address of SUSHI contract." + }, + "functionSelector": "ab560e10", + "id": 893, + "mutability": "immutable", + "name": "SUSHI", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "1977:29:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 892, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "1977:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 894, + "nodeType": "StructuredDocumentation", + "src": "2012:50:5", + "text": "@notice The index of MCV2 master pool in MCV1." + }, + "functionSelector": "61621aaa", + "id": 896, + "mutability": "immutable", + "name": "MASTER_PID", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "2067:35:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 895, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2067:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "7cd07e47", + "id": 898, + "mutability": "mutable", + "name": "migrator", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "2213:29:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + }, + "typeName": { + "contractScope": null, + "id": 897, + "name": "IMigratorChef", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 858, + "src": "2213:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 899, + "nodeType": "StructuredDocumentation", + "src": "2249:35:5", + "text": "@notice Info of each MCV2 pool." + }, + "functionSelector": "1526fe27", + "id": 902, + "mutability": "mutable", + "name": "poolInfo", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "2289:26:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolInfo_$887_storage_$dyn_storage", + "typeString": "struct MasterChefV2.PoolInfo[]" + }, + "typeName": { + "baseType": { + "contractScope": null, + "id": 900, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 887, + "src": "2289:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + } + }, + "id": 901, + "length": null, + "nodeType": "ArrayTypeName", + "src": "2289:10:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolInfo_$887_storage_$dyn_storage_ptr", + "typeString": "struct MasterChefV2.PoolInfo[]" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 903, + "nodeType": "StructuredDocumentation", + "src": "2321:55:5", + "text": "@notice Address of the LP token for each MCV2 pool." + }, + "functionSelector": "78ed5d1f", + "id": 906, + "mutability": "mutable", + "name": "lpToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "2381:23:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "contractScope": null, + "id": 904, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "2381:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 905, + "length": null, + "nodeType": "ArrayTypeName", + "src": "2381:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 907, + "nodeType": "StructuredDocumentation", + "src": "2410:57:5", + "text": "@notice Address of each `IRewarder` contract in MCV2." + }, + "functionSelector": "c346253d", + "id": 910, + "mutability": "mutable", + "name": "rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "2472:27:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage", + "typeString": "contract IRewarder[]" + }, + "typeName": { + "baseType": { + "contractScope": null, + "id": 908, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "2472:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "id": 909, + "length": null, + "nodeType": "ArrayTypeName", + "src": "2472:11:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage_ptr", + "typeString": "contract IRewarder[]" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 911, + "nodeType": "StructuredDocumentation", + "src": "2506:52:5", + "text": "@notice Info of each user that stakes LP tokens." + }, + "functionSelector": "93f1a40b", + "id": 917, + "mutability": "mutable", + "name": "userInfo", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "2563:66:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct MasterChefV2.UserInfo))" + }, + "typeName": { + "id": 916, + "keyType": { + "id": 912, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2572:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "2563:50:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct MasterChefV2.UserInfo))" + }, + "valueType": { + "id": 915, + "keyType": { + "id": 913, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2592:7:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2583:29:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$", + "typeString": "mapping(address => struct MasterChefV2.UserInfo)" + }, + "valueType": { + "contractScope": null, + "id": 914, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 880, + "src": "2603:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + } + } + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 918, + "nodeType": "StructuredDocumentation", + "src": "2635:88:5", + "text": "@dev Total allocation points. Must be the sum of all allocation points in all pools." + }, + "functionSelector": "17caf6f1", + "id": 920, + "mutability": "mutable", + "name": "totalAllocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "2728:30:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 919, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2728:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": true, + "id": 923, + "mutability": "constant", + "name": "MASTERCHEF_SUSHI_PER_BLOCK", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "2765:58:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 921, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2765:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "31653230", + "id": 922, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2819:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_100000000000000000000_by_1", + "typeString": "int_const 100000000000000000000" + }, + "value": "1e20" + }, + "visibility": "private" + }, + { + "constant": true, + "id": 926, + "mutability": "constant", + "name": "ACC_SUSHI_PRECISION", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2091, + "src": "2829:51:5", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 924, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2829:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "31653132", + "id": 925, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2876:4:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000_by_1", + "typeString": "int_const 1000000000000" + }, + "value": "1e12" + }, + "visibility": "private" + }, + { + "anonymous": false, + "documentation": null, + "id": 936, + "name": "Deposit", + "nodeType": "EventDefinition", + "parameters": { + "id": 935, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 928, + "indexed": true, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 936, + "src": "2901:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 927, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2901:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 930, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 936, + "src": "2923:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 929, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2923:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 932, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 936, + "src": "2944:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 931, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2944:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 934, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 936, + "src": "2960:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 933, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2960:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2900:79:5" + }, + "src": "2887:93:5" + }, + { + "anonymous": false, + "documentation": null, + "id": 946, + "name": "Withdraw", + "nodeType": "EventDefinition", + "parameters": { + "id": 945, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 938, + "indexed": true, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 946, + "src": "3000:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 937, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3000:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 940, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 946, + "src": "3022:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 939, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3022:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 942, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 946, + "src": "3043:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 941, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3043:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 944, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 946, + "src": "3059:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 943, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3059:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2999:79:5" + }, + "src": "2985:94:5" + }, + { + "anonymous": false, + "documentation": null, + "id": 956, + "name": "EmergencyWithdraw", + "nodeType": "EventDefinition", + "parameters": { + "id": 955, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 948, + "indexed": true, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 956, + "src": "3108:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 947, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3108:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 950, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 956, + "src": "3130:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 949, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3130:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 952, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 956, + "src": "3151:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 951, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3151:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 954, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 956, + "src": "3167:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 953, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3167:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3107:79:5" + }, + "src": "3084:103:5" + }, + { + "anonymous": false, + "documentation": null, + "id": 964, + "name": "Harvest", + "nodeType": "EventDefinition", + "parameters": { + "id": 963, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 958, + "indexed": true, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 964, + "src": "3206:20:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 957, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3206:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 960, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 964, + "src": "3228:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 959, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3228:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 962, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 964, + "src": "3249:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 961, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3249:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3205:59:5" + }, + "src": "3192:73:5" + }, + { + "anonymous": false, + "documentation": null, + "id": 974, + "name": "LogPoolAddition", + "nodeType": "EventDefinition", + "parameters": { + "id": 973, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 966, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 974, + "src": "3292:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 965, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3292:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 968, + "indexed": false, + "mutability": "mutable", + "name": "allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 974, + "src": "3313:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 967, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3313:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 970, + "indexed": true, + "mutability": "mutable", + "name": "lpToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 974, + "src": "3333:22:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 969, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "3333:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 972, + "indexed": true, + "mutability": "mutable", + "name": "rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 974, + "src": "3357:26:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + "typeName": { + "contractScope": null, + "id": 971, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "3357:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3291:93:5" + }, + "src": "3270:115:5" + }, + { + "anonymous": false, + "documentation": null, + "id": 984, + "name": "LogSetPool", + "nodeType": "EventDefinition", + "parameters": { + "id": 983, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 976, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 984, + "src": "3407:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 975, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3407:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 978, + "indexed": false, + "mutability": "mutable", + "name": "allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 984, + "src": "3428:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 977, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3428:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 980, + "indexed": true, + "mutability": "mutable", + "name": "rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 984, + "src": "3448:26:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + "typeName": { + "contractScope": null, + "id": 979, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "3448:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 982, + "indexed": false, + "mutability": "mutable", + "name": "overwrite", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 984, + "src": "3476:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 981, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3476:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3406:85:5" + }, + "src": "3390:102:5" + }, + { + "anonymous": false, + "documentation": null, + "id": 994, + "name": "LogUpdatePool", + "nodeType": "EventDefinition", + "parameters": { + "id": 993, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 986, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 994, + "src": "3517:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 985, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3517:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 988, + "indexed": false, + "mutability": "mutable", + "name": "lastRewardBlock", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 994, + "src": "3538:22:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 987, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "3538:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 990, + "indexed": false, + "mutability": "mutable", + "name": "lpSupply", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 994, + "src": "3562:16:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 989, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3562:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 992, + "indexed": false, + "mutability": "mutable", + "name": "accSushiPerShare", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 994, + "src": "3580:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 991, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3580:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3516:89:5" + }, + "src": "3497:109:5" + }, + { + "anonymous": false, + "documentation": null, + "id": 996, + "name": "LogInit", + "nodeType": "EventDefinition", + "parameters": { + "id": 995, + "nodeType": "ParameterList", + "parameters": [], + "src": "3624:2:5" + }, + "src": "3611:16:5" + }, + { + "body": { + "id": 1018, + "nodeType": "Block", + "src": "3920:101:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1008, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1006, + "name": "MASTER_CHEF", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 890, + "src": "3930:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 1007, + "name": "_MASTER_CHEF", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 999, + "src": "3944:12:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + }, + "src": "3930:26:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + }, + "id": 1009, + "nodeType": "ExpressionStatement", + "src": "3930:26:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1012, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1010, + "name": "SUSHI", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 893, + "src": "3966:5:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 1011, + "name": "_sushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1001, + "src": "3974:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "src": "3966:14:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1013, + "nodeType": "ExpressionStatement", + "src": "3966:14:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1014, + "name": "MASTER_PID", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 896, + "src": "3990:10:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 1015, + "name": "_MASTER_PID", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1003, + "src": "4003:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3990:24:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1017, + "nodeType": "ExpressionStatement", + "src": "3990:24:5" + } + ] + }, + "documentation": { + "id": 997, + "nodeType": "StructuredDocumentation", + "src": "3633:201:5", + "text": "@param _MASTER_CHEF The SushiSwap MCV1 contract address.\n @param _sushi The SUSHI token contract address.\n @param _MASTER_PID The pool ID of the dummy token on the base MCV1 contract." + }, + "id": 1019, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1004, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 999, + "mutability": "mutable", + "name": "_MASTER_CHEF", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1019, + "src": "3851:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + }, + "typeName": { + "contractScope": null, + "id": 998, + "name": "IMasterChef", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2132, + "src": "3851:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1001, + "mutability": "mutable", + "name": "_sushi", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1019, + "src": "3877:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 1000, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "3877:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1003, + "mutability": "mutable", + "name": "_MASTER_PID", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1019, + "src": "3892:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1002, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3892:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3850:62:5" + }, + "returnParameters": { + "id": 1005, + "nodeType": "ParameterList", + "parameters": [], + "src": "3920:0:5" + }, + "scope": 2091, + "src": "3839:182:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1072, + "nodeType": "Block", + "src": "4477:343:5", + "statements": [ + { + "assignments": [ + 1026 + ], + "declarations": [ + { + "constant": false, + "id": 1026, + "mutability": "mutable", + "name": "balance", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1072, + "src": "4487:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1025, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4487:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1032, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1029, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4526:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4526:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "argumentTypes": null, + "id": 1027, + "name": "dummyToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1022, + "src": "4505:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1028, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 285, + "src": "4505:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 1031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4505:32:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4487:50:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 1034, + "name": "balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1026, + "src": "4555:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 1035, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4566:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4555:12:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4d61737465724368656656323a2042616c616e6365206d757374206578636565642030", + "id": 1037, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4569:37:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0e871e6ed6c66f490f6ac471b1b62f1c2f31fc35f4cf61165473eb8eae289983", + "typeString": "literal_string \"MasterChefV2: Balance must exceed 0\"" + }, + "value": "MasterChefV2: Balance must exceed 0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_0e871e6ed6c66f490f6ac471b1b62f1c2f31fc35f4cf61165473eb8eae289983", + "typeString": "literal_string \"MasterChefV2: Balance must exceed 0\"" + } + ], + "id": 1033, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "4547:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1038, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4547:60:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1039, + "nodeType": "ExpressionStatement", + "src": "4547:60:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1043, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4645:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4645:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1047, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "4665:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + ], + "id": 1046, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4657:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1045, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4657:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4657:13:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1049, + "name": "balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1026, + "src": "4672:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1040, + "name": "dummyToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1022, + "src": "4617:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 552, + "src": "4617:27:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$337_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$337_$", + "typeString": "function (contract IERC20,address,address,uint256)" + } + }, + "id": 1050, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4617:63:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1051, + "nodeType": "ExpressionStatement", + "src": "4617:63:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1057, + "name": "MASTER_CHEF", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 890, + "src": "4717:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + ], + "id": 1056, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4709:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1055, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4709:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1058, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4709:20:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1059, + "name": "balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1026, + "src": "4731:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1052, + "name": "dummyToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1022, + "src": "4690:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 303, + "src": "4690:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 1060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4690:49:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1061, + "nodeType": "ExpressionStatement", + "src": "4690:49:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1065, + "name": "MASTER_PID", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 896, + "src": "4769:10:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1066, + "name": "balance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1026, + "src": "4781:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1062, + "name": "MASTER_CHEF", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 890, + "src": "4749:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + }, + "id": 1064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 2131, + "src": "4749:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) external" + } + }, + "id": 1067, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4749:40:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1068, + "nodeType": "ExpressionStatement", + "src": "4749:40:5" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1069, + "name": "LogInit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 996, + "src": "4804:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 1070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4804:9:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1071, + "nodeType": "EmitStatement", + "src": "4799:14:5" + } + ] + }, + "documentation": { + "id": 1020, + "nodeType": "StructuredDocumentation", + "src": "4027:403:5", + "text": "@notice Deposits a dummy token to `MASTER_CHEF` MCV1. This is required because MCV1 holds the minting rights for SUSHI.\n Any balance of transaction sender in `dummyToken` is transferred.\n The allocation point for the pool on MCV1 is the total allocation point for all pools that receive double incentives.\n @param dummyToken The address of the ERC-20 token to deposit into MCV1." + }, + "functionSelector": "19ab453c", + "id": 1073, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "init", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1023, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1022, + "mutability": "mutable", + "name": "dummyToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1073, + "src": "4449:17:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 1021, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "4449:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4448:19:5" + }, + "returnParameters": { + "id": 1024, + "nodeType": "ParameterList", + "parameters": [], + "src": "4477:0:5" + }, + "scope": 2091, + "src": "4435:385:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 1084, + "nodeType": "Block", + "src": "4934:40:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1079, + "name": "pools", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1077, + "src": "4944:5:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1080, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 902, + "src": "4952:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolInfo_$887_storage_$dyn_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref[] storage ref" + } + }, + "id": 1081, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4952:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4944:23:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1083, + "nodeType": "ExpressionStatement", + "src": "4944:23:5" + } + ] + }, + "documentation": { + "id": 1074, + "nodeType": "StructuredDocumentation", + "src": "4826:45:5", + "text": "@notice Returns the number of MCV2 pools." + }, + "functionSelector": "081e3eda", + "id": 1085, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "poolLength", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1075, + "nodeType": "ParameterList", + "parameters": [], + "src": "4895:2:5" + }, + "returnParameters": { + "id": 1078, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1077, + "mutability": "mutable", + "name": "pools", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1085, + "src": "4919:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1076, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4919:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4918:15:5" + }, + "scope": 2091, + "src": "4876:98:5", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1146, + "nodeType": "Block", + "src": "5394:441:5", + "statements": [ + { + "assignments": [ + 1098 + ], + "declarations": [ + { + "constant": false, + "id": 1098, + "mutability": "mutable", + "name": "lastRewardBlock", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1146, + "src": "5404:23:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1097, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5404:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1101, + "initialValue": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1099, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5430:5:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 1100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5430:12:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5404:38:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1107, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1102, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 920, + "src": "5452:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1105, + "name": "allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1088, + "src": "5490:10:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1103, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 920, + "src": "5470:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 577, + "src": "5470:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5470:31:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5452:49:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1108, + "nodeType": "ExpressionStatement", + "src": "5452:49:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1112, + "name": "_lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1090, + "src": "5524:8:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + ], + "expression": { + "argumentTypes": null, + "id": 1109, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "5511:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 1111, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "push", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5511:12:5", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypush_nonpayable$_t_contract$_IERC20_$337_$returns$__$", + "typeString": "function (contract IERC20)" + } + }, + "id": 1113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5511:22:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1114, + "nodeType": "ExpressionStatement", + "src": "5511:22:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1118, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1092, + "src": "5557:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + ], + "expression": { + "argumentTypes": null, + "id": 1115, + "name": "rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 910, + "src": "5543:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage", + "typeString": "contract IRewarder[] storage ref" + } + }, + "id": 1117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "push", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5543:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypush_nonpayable$_t_contract$_IRewarder_$2167_$returns$__$", + "typeString": "function (contract IRewarder)" + } + }, + "id": 1119, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5543:24:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1120, + "nodeType": "ExpressionStatement", + "src": "5543:24:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "id": 1125, + "name": "allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1088, + "src": "5627:10:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1126, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to64", + "nodeType": "MemberAccess", + "referencedDeclaration": 679, + "src": "5627:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 1127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5627:17:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "id": 1128, + "name": "lastRewardBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1098, + "src": "5675:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to64", + "nodeType": "MemberAccess", + "referencedDeclaration": 679, + "src": "5675:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 1130, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5675:22:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "argumentTypes": null, + "hexValue": "30", + "id": 1131, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5729:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1124, + "name": "PoolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 887, + "src": "5592:8:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_PoolInfo_$887_storage_ptr_$", + "typeString": "type(struct MasterChefV2.PoolInfo storage pointer)" + } + }, + "id": 1132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "allocPoint", + "lastRewardBlock", + "accSushiPerShare" + ], + "nodeType": "FunctionCall", + "src": "5592:149:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + ], + "expression": { + "argumentTypes": null, + "id": 1121, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 902, + "src": "5578:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolInfo_$887_storage_$dyn_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref[] storage ref" + } + }, + "id": 1123, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "push", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5578:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_PoolInfo_$887_storage_$returns$__$", + "typeString": "function (struct MasterChefV2.PoolInfo storage ref)" + } + }, + "id": 1133, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5578:164:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1134, + "nodeType": "ExpressionStatement", + "src": "5578:164:5" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "31", + "id": 1139, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5792:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1136, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "5773:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 1137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5773:14:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1138, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "5773:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5773:21:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1141, + "name": "allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1088, + "src": "5796:10:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1142, + "name": "_lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1090, + "src": "5808:8:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + { + "argumentTypes": null, + "id": 1143, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1092, + "src": "5818:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + ], + "id": 1135, + "name": "LogPoolAddition", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 974, + "src": "5757:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_contract$_IERC20_$337_$_t_contract$_IRewarder_$2167_$returns$__$", + "typeString": "function (uint256,uint256,contract IERC20,contract IRewarder)" + } + }, + "id": 1144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5757:71:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1145, + "nodeType": "EmitStatement", + "src": "5752:76:5" + } + ] + }, + "documentation": { + "id": 1086, + "nodeType": "StructuredDocumentation", + "src": "4980:321:5", + "text": "@notice Add a new LP to the pool. Can only be called by the owner.\n DO NOT add the same LP token more than once. Rewards will be messed up if you do.\n @param allocPoint AP of the new pool.\n @param _lpToken Address of the LP ERC-20 token.\n @param _rewarder Address of the rewarder delegate." + }, + "functionSelector": "ab7de098", + "id": 1147, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": null, + "id": 1095, + "modifierName": { + "argumentTypes": null, + "id": 1094, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 270, + "src": "5384:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5384:9:5" + } + ], + "name": "add", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1088, + "mutability": "mutable", + "name": "allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1147, + "src": "5319:18:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1087, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5319:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1090, + "mutability": "mutable", + "name": "_lpToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1147, + "src": "5339:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 1089, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "5339:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1092, + "mutability": "mutable", + "name": "_rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1147, + "src": "5356:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + "typeName": { + "contractScope": null, + "id": 1091, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "5356:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5318:58:5" + }, + "returnParameters": { + "id": 1096, + "nodeType": "ParameterList", + "parameters": [], + "src": "5394:0:5" + }, + "scope": 2091, + "src": "5306:529:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1204, + "nodeType": "Block", + "src": "6324:304:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1161, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 920, + "src": "6334:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1170, + "name": "_allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "6403:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1164, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 902, + "src": "6372:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolInfo_$887_storage_$dyn_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref[] storage ref" + } + }, + "id": 1166, + "indexExpression": { + "argumentTypes": null, + "id": 1165, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1150, + "src": "6381:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6372:14:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref" + } + }, + "id": 1167, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "allocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 886, + "src": "6372:25:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "id": 1162, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 920, + "src": "6352:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "6352:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6352:46:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1169, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 577, + "src": "6352:50:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1171, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6352:63:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6334:81:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1173, + "nodeType": "ExpressionStatement", + "src": "6334:81:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1174, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 902, + "src": "6425:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolInfo_$887_storage_$dyn_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref[] storage ref" + } + }, + "id": 1176, + "indexExpression": { + "argumentTypes": null, + "id": 1175, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1150, + "src": "6434:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6425:14:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref" + } + }, + "id": 1177, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "allocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 886, + "src": "6425:25:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "id": 1178, + "name": "_allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "6453:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1179, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to64", + "nodeType": "MemberAccess", + "referencedDeclaration": 679, + "src": "6453:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 1180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6453:18:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "6425:46:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 1182, + "nodeType": "ExpressionStatement", + "src": "6425:46:5" + }, + { + "condition": { + "argumentTypes": null, + "id": 1183, + "name": "overwrite", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1156, + "src": "6485:9:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 1191, + "nodeType": "IfStatement", + "src": "6481:46:5", + "trueBody": { + "id": 1190, + "nodeType": "Block", + "src": "6496:31:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1184, + "name": "rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 910, + "src": "6498:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage", + "typeString": "contract IRewarder[] storage ref" + } + }, + "id": 1186, + "indexExpression": { + "argumentTypes": null, + "id": 1185, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1150, + "src": "6507:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6498:14:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 1187, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1154, + "src": "6515:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "src": "6498:26:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "id": 1189, + "nodeType": "ExpressionStatement", + "src": "6498:26:5" + } + ] + } + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1193, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1150, + "src": "6552:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1194, + "name": "_allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1152, + "src": "6558:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "condition": { + "argumentTypes": null, + "id": 1195, + "name": "overwrite", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1156, + "src": "6571:9:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1197, + "name": "rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 910, + "src": "6595:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage", + "typeString": "contract IRewarder[] storage ref" + } + }, + "id": 1199, + "indexExpression": { + "argumentTypes": null, + "id": 1198, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1150, + "src": "6604:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6595:14:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "id": 1200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "Conditional", + "src": "6571:38:5", + "trueExpression": { + "argumentTypes": null, + "id": 1196, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1154, + "src": "6583:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + { + "argumentTypes": null, + "id": 1201, + "name": "overwrite", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1156, + "src": "6611:9:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 1192, + "name": "LogSetPool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 984, + "src": "6541:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_contract$_IRewarder_$2167_$_t_bool_$returns$__$", + "typeString": "function (uint256,uint256,contract IRewarder,bool)" + } + }, + "id": 1202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6541:80:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1203, + "nodeType": "EmitStatement", + "src": "6536:85:5" + } + ] + }, + "documentation": { + "id": 1148, + "nodeType": "StructuredDocumentation", + "src": "5841:376:5", + "text": "@notice Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\n @param _pid The index of the pool. See `poolInfo`.\n @param _allocPoint New AP of the pool.\n @param _rewarder Address of the rewarder delegate.\n @param overwrite True if _rewarder should be `set`. Otherwise `_rewarder` is ignored." + }, + "functionSelector": "88bba42f", + "id": 1205, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": null, + "id": 1159, + "modifierName": { + "argumentTypes": null, + "id": 1158, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 270, + "src": "6314:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6314:9:5" + } + ], + "name": "set", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1157, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1150, + "mutability": "mutable", + "name": "_pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1205, + "src": "6235:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1149, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6235:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1152, + "mutability": "mutable", + "name": "_allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1205, + "src": "6249:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1151, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6249:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1154, + "mutability": "mutable", + "name": "_rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1205, + "src": "6270:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + "typeName": { + "contractScope": null, + "id": 1153, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "6270:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1156, + "mutability": "mutable", + "name": "overwrite", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1205, + "src": "6291:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 1155, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6291:4:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6234:72:5" + }, + "returnParameters": { + "id": 1160, + "nodeType": "ParameterList", + "parameters": [], + "src": "6324:0:5" + }, + "scope": 2091, + "src": "6222:406:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1217, + "nodeType": "Block", + "src": "6829:37:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1213, + "name": "migrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 898, + "src": "6839:8:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 1214, + "name": "_migrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1208, + "src": "6850:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + }, + "src": "6839:20:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + }, + "id": 1216, + "nodeType": "ExpressionStatement", + "src": "6839:20:5" + } + ] + }, + "documentation": { + "id": 1206, + "nodeType": "StructuredDocumentation", + "src": "6634:127:5", + "text": "@notice Set the `migrator` contract. Can only be called by the owner.\n @param _migrator The contract address to set." + }, + "functionSelector": "23cf3118", + "id": 1218, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": null, + "id": 1211, + "modifierName": { + "argumentTypes": null, + "id": 1210, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 270, + "src": "6819:9:5", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6819:9:5" + } + ], + "name": "setMigrator", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1209, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1208, + "mutability": "mutable", + "name": "_migrator", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1218, + "src": "6787:23:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + }, + "typeName": { + "contractScope": null, + "id": 1207, + "name": "IMigratorChef", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 858, + "src": "6787:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6786:25:5" + }, + "returnParameters": { + "id": 1212, + "nodeType": "ParameterList", + "parameters": [], + "src": "6829:0:5" + }, + "scope": 2091, + "src": "6766:100:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1289, + "nodeType": "Block", + "src": "7058:436:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1233, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1227, + "name": "migrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 898, + "src": "7084:8:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + ], + "id": 1226, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7076:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1225, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7076:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7076:17:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 1231, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7105:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1230, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7097:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1229, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7097:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1232, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7097:10:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "7076:31:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4d61737465724368656656323a206e6f206d69677261746f7220736574", + "id": 1234, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7109:31:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_db733e5612b6ea507bf1315a9949f7b2f36477c7d6bedf5cbd0acae80e12dfdf", + "typeString": "literal_string \"MasterChefV2: no migrator set\"" + }, + "value": "MasterChefV2: no migrator set" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_db733e5612b6ea507bf1315a9949f7b2f36477c7d6bedf5cbd0acae80e12dfdf", + "typeString": "literal_string \"MasterChefV2: no migrator set\"" + } + ], + "id": 1224, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7068:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7068:73:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1236, + "nodeType": "ExpressionStatement", + "src": "7068:73:5" + }, + { + "assignments": [ + 1238 + ], + "declarations": [ + { + "constant": false, + "id": 1238, + "mutability": "mutable", + "name": "_lpToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1289, + "src": "7151:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 1237, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "7151:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1242, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1239, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "7169:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 1241, + "indexExpression": { + "argumentTypes": null, + "id": 1240, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1221, + "src": "7177:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7169:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7151:31:5" + }, + { + "assignments": [ + 1244 + ], + "declarations": [ + { + "constant": false, + "id": 1244, + "mutability": "mutable", + "name": "bal", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1289, + "src": "7192:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1243, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7192:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1252, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1249, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "7233:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + ], + "id": 1248, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7225:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1247, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7225:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7225:13:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1245, + "name": "_lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1238, + "src": "7206:8:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1246, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 285, + "src": "7206:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 1251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7206:33:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7192:47:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1258, + "name": "migrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 898, + "src": "7274:8:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + ], + "id": 1257, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7266:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1256, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7266:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1259, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7266:17:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1260, + "name": "bal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1244, + "src": "7285:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1253, + "name": "_lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1238, + "src": "7249:8:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1255, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 303, + "src": "7249:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 1261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7249:40:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1262, + "nodeType": "ExpressionStatement", + "src": "7249:40:5" + }, + { + "assignments": [ + 1264 + ], + "declarations": [ + { + "constant": false, + "id": 1264, + "mutability": "mutable", + "name": "newLpToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1289, + "src": "7299:17:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 1263, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "7299:6:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1269, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1267, + "name": "_lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1238, + "src": "7336:8:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + ], + "expression": { + "argumentTypes": null, + "id": 1265, + "name": "migrator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 898, + "src": "7319:8:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMigratorChef_$858", + "typeString": "contract IMigratorChef" + } + }, + "id": 1266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "migrate", + "nodeType": "MemberAccess", + "referencedDeclaration": 857, + "src": "7319:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_contract$_IERC20_$337_$returns$_t_contract$_IERC20_$337_$", + "typeString": "function (contract IERC20) external returns (contract IERC20)" + } + }, + "id": 1268, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7319:26:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7299:46:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 1271, + "name": "bal", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1244, + "src": "7363:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1276, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "7399:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + ], + "id": 1275, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7391:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1274, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7391:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7391:13:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "id": 1272, + "name": "newLpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1264, + "src": "7370:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1273, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 285, + "src": "7370:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 1278, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7370:35:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7363:42:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4d61737465724368656656323a206d696772617465642062616c616e6365206d757374206d61746368", + "id": 1280, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7407:43:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_52b373b8abd140702e448133a0dd7129935d941acfcf9ee8942c32166eb56caf", + "typeString": "literal_string \"MasterChefV2: migrated balance must match\"" + }, + "value": "MasterChefV2: migrated balance must match" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_52b373b8abd140702e448133a0dd7129935d941acfcf9ee8942c32166eb56caf", + "typeString": "literal_string \"MasterChefV2: migrated balance must match\"" + } + ], + "id": 1270, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "7355:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 1281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7355:96:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1282, + "nodeType": "ExpressionStatement", + "src": "7355:96:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1287, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1283, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "7461:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 1285, + "indexExpression": { + "argumentTypes": null, + "id": 1284, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1221, + "src": "7469:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7461:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 1286, + "name": "newLpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1264, + "src": "7477:10:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "src": "7461:26:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1288, + "nodeType": "ExpressionStatement", + "src": "7461:26:5" + } + ] + }, + "documentation": { + "id": 1219, + "nodeType": "StructuredDocumentation", + "src": "6872:143:5", + "text": "@notice Migrate LP token to another LP contract through the `migrator` contract.\n @param _pid The index of the pool. See `poolInfo`." + }, + "functionSelector": "454b0608", + "id": 1290, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "migrate", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1222, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1221, + "mutability": "mutable", + "name": "_pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1290, + "src": "7037:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1220, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7037:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7036:14:5" + }, + "returnParameters": { + "id": 1223, + "nodeType": "ParameterList", + "parameters": [], + "src": "7058:0:5" + }, + "scope": 2091, + "src": "7020:474:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1396, + "nodeType": "Block", + "src": "7807:701:5", + "statements": [ + { + "assignments": [ + 1301 + ], + "declarations": [ + { + "constant": false, + "id": 1301, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1396, + "src": "7817:20:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 1300, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 887, + "src": "7817:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1305, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1302, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 902, + "src": "7840:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolInfo_$887_storage_$dyn_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref[] storage ref" + } + }, + "id": 1304, + "indexExpression": { + "argumentTypes": null, + "id": 1303, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1293, + "src": "7849:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7840:14:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7817:37:5" + }, + { + "assignments": [ + 1307 + ], + "declarations": [ + { + "constant": false, + "id": 1307, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1396, + "src": "7864:21:5", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + }, + "typeName": { + "contractScope": null, + "id": 1306, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 880, + "src": "7864:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1313, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1308, + "name": "userInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 917, + "src": "7888:8:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct MasterChefV2.UserInfo storage ref))" + } + }, + "id": 1310, + "indexExpression": { + "argumentTypes": null, + "id": 1309, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1293, + "src": "7897:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7888:14:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$", + "typeString": "mapping(address => struct MasterChefV2.UserInfo storage ref)" + } + }, + "id": 1312, + "indexExpression": { + "argumentTypes": null, + "id": 1311, + "name": "_user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1295, + "src": "7903:5:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7888:21:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage", + "typeString": "struct MasterChefV2.UserInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7864:45:5" + }, + { + "assignments": [ + 1315 + ], + "declarations": [ + { + "constant": false, + "id": 1315, + "mutability": "mutable", + "name": "accSushiPerShare", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1396, + "src": "7919:24:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1314, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7919:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1318, + "initialValue": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1316, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1301, + "src": "7946:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1317, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 882, + "src": "7946:21:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7919:48:5" + }, + { + "assignments": [ + 1320 + ], + "declarations": [ + { + "constant": false, + "id": 1320, + "mutability": "mutable", + "name": "lpSupply", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1396, + "src": "7977:16:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1319, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7977:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1330, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1327, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "8028:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + ], + "id": 1326, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8020:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1325, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8020:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8020:13:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1321, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "7996:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 1323, + "indexExpression": { + "argumentTypes": null, + "id": 1322, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1293, + "src": "8004:4:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7996:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 285, + "src": "7996:23:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 1329, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7996:38:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7977:57:5" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 1339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1331, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "8048:5:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 1332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "8048:12:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1333, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1301, + "src": "8063:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1334, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 884, + "src": "8063:20:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "8048:35:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1338, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 1336, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1320, + "src": "8087:8:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 1337, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8099:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8087:13:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8048:52:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 1376, + "nodeType": "IfStatement", + "src": "8044:342:5", + "trueBody": { + "id": 1375, + "nodeType": "Block", + "src": "8102:284:5", + "statements": [ + { + "assignments": [ + 1341 + ], + "declarations": [ + { + "constant": false, + "id": 1341, + "mutability": "mutable", + "name": "blocks", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1375, + "src": "8116:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1340, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8116:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1348, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1345, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1301, + "src": "8150:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1346, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 884, + "src": "8150:20:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1342, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "8133:5:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 1343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "8133:12:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1344, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "8133:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8133:38:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8116:55:5" + }, + { + "assignments": [ + 1350 + ], + "declarations": [ + { + "constant": false, + "id": 1350, + "mutability": "mutable", + "name": "sushiReward", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1375, + "src": "8185:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1349, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8185:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1362, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1357, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1301, + "src": "8239:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1358, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "allocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 886, + "src": "8239:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1353, + "name": "sushiPerBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1453, + "src": "8218:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 1354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8218:15:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1351, + "name": "blocks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1341, + "src": "8207:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "8207:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8207:27:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "8207:31:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1359, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8207:48:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1360, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 920, + "src": "8258:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8207:66:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8185:88:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1363, + "name": "accSushiPerShare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1315, + "src": "8287:16:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1368, + "name": "ACC_SUSHI_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 926, + "src": "8343:19:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1366, + "name": "sushiReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1350, + "src": "8327:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "8327:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1369, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8327:36:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1370, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1320, + "src": "8366:8:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8327:47:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1364, + "name": "accSushiPerShare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1315, + "src": "8306:16:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 577, + "src": "8306:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8306:69:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8287:88:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1374, + "nodeType": "ExpressionStatement", + "src": "8287:88:5" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "id": 1394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1377, + "name": "pending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1298, + "src": "8395:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1389, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1307, + "src": "8473:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1390, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "8473:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1383, + "name": "accSushiPerShare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1315, + "src": "8428:16:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1380, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1307, + "src": "8412:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1381, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "8412:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "8412:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8412:33:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1385, + "name": "ACC_SUSHI_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 926, + "src": "8448:19:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8412:55:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1379, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8405:6:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 1378, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "8405:6:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8405:63:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1388, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 2304, + "src": "8405:67:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$", + "typeString": "function (int256,int256) pure returns (int256)" + } + }, + "id": 1391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8405:84:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toUInt256", + "nodeType": "MemberAccess", + "referencedDeclaration": 2364, + "src": "8405:94:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$", + "typeString": "function (int256) pure returns (uint256)" + } + }, + "id": 1393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8405:96:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8395:106:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1395, + "nodeType": "ExpressionStatement", + "src": "8395:106:5" + } + ] + }, + "documentation": { + "id": 1291, + "nodeType": "StructuredDocumentation", + "src": "7500:211:5", + "text": "@notice View function to see pending SUSHI on frontend.\n @param _pid The index of the pool. See `poolInfo`.\n @param _user Address of user.\n @return pending SUSHI reward for a given user." + }, + "functionSelector": "195426ec", + "id": 1397, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "pendingSushi", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1296, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1293, + "mutability": "mutable", + "name": "_pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1397, + "src": "7738:12:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1292, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7738:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1295, + "mutability": "mutable", + "name": "_user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1397, + "src": "7752:13:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1294, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7752:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7737:29:5" + }, + "returnParameters": { + "id": 1299, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1298, + "mutability": "mutable", + "name": "pending", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1397, + "src": "7790:15:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1297, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7790:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "7789:17:5" + }, + "scope": 2091, + "src": "7716:792:5", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 1427, + "nodeType": "Block", + "src": "8745:129:5", + "statements": [ + { + "assignments": [ + 1405 + ], + "declarations": [ + { + "constant": false, + "id": 1405, + "mutability": "mutable", + "name": "len", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1427, + "src": "8755:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1404, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8755:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1408, + "initialValue": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1406, + "name": "pids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1401, + "src": "8769:4:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 1407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "8769:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8755:25:5" + }, + { + "body": { + "id": 1425, + "nodeType": "Block", + "src": "8824:44:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1420, + "name": "pids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1401, + "src": "8849:4:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 1422, + "indexExpression": { + "argumentTypes": null, + "id": 1421, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1410, + "src": "8854:1:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8849:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1419, + "name": "updatePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1557, + "src": "8838:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_struct$_PoolInfo_$887_memory_ptr_$", + "typeString": "function (uint256) returns (struct MasterChefV2.PoolInfo memory)" + } + }, + "id": 1423, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8838:19:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1424, + "nodeType": "ExpressionStatement", + "src": "8838:19:5" + } + ] + }, + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1415, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 1413, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1410, + "src": "8810:1:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "argumentTypes": null, + "id": 1414, + "name": "len", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1405, + "src": "8814:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8810:7:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 1426, + "initializationExpression": { + "assignments": [ + 1410 + ], + "declarations": [ + { + "constant": false, + "id": 1410, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1426, + "src": "8795:9:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1409, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8795:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1412, + "initialValue": { + "argumentTypes": null, + "hexValue": "30", + "id": 1411, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8807:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8795:13:5" + }, + "loopExpression": { + "expression": { + "argumentTypes": null, + "id": 1417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "8819:3:5", + "subExpression": { + "argumentTypes": null, + "id": 1416, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1410, + "src": "8821:1:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1418, + "nodeType": "ExpressionStatement", + "src": "8819:3:5" + }, + "nodeType": "ForStatement", + "src": "8790:78:5" + } + ] + }, + "documentation": { + "id": 1398, + "nodeType": "StructuredDocumentation", + "src": "8514:167:5", + "text": "@notice Update reward variables for all pools. Be careful of gas spending!\n @param pids Pool IDs of all to be updated. Make sure to update all active pools." + }, + "functionSelector": "57a5b58c", + "id": 1428, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "massUpdatePools", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1402, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1401, + "mutability": "mutable", + "name": "pids", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1428, + "src": "8711:23:5", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 1399, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8711:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1400, + "length": null, + "nodeType": "ArrayTypeName", + "src": "8711:9:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8710:25:5" + }, + "returnParameters": { + "id": 1403, + "nodeType": "ParameterList", + "parameters": [], + "src": "8745:0:5" + }, + "scope": 2091, + "src": "8686:188:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 1452, + "nodeType": "Block", + "src": "9014:155:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1434, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1432, + "src": "9024:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1442, + "name": "MASTER_PID", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 896, + "src": "9107:10:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1440, + "name": "MASTER_CHEF", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 890, + "src": "9086:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + }, + "id": 1441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "poolInfo", + "nodeType": "MemberAccess", + "referencedDeclaration": 2119, + "src": "9086:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_PoolInfo_$2112_memory_ptr_$", + "typeString": "function (uint256) view external returns (struct IMasterChef.PoolInfo memory)" + } + }, + "id": 1443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9086:32:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2112_memory_ptr", + "typeString": "struct IMasterChef.PoolInfo memory" + } + }, + "id": 1444, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "allocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 2107, + "src": "9086:43:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1437, + "name": "MASTERCHEF_SUSHI_PER_BLOCK", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 923, + "src": "9041:26:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1436, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9033:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 1435, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9033:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1438, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9033:35:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "9033:52:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9033:97:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "id": 1446, + "name": "MASTER_CHEF", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 890, + "src": "9133:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + }, + "id": 1447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "totalAllocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 2124, + "src": "9133:27:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$", + "typeString": "function () view external returns (uint256)" + } + }, + "id": 1448, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9133:29:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9033:129:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9024:138:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1451, + "nodeType": "ExpressionStatement", + "src": "9024:138:5" + } + ] + }, + "documentation": { + "id": 1429, + "nodeType": "StructuredDocumentation", + "src": "8880:67:5", + "text": "@notice Calculates and returns the `amount` of SUSHI per block." + }, + "functionSelector": "b0bcf42a", + "id": 1453, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sushiPerBlock", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1430, + "nodeType": "ParameterList", + "parameters": [], + "src": "8974:2:5" + }, + "returnParameters": { + "id": 1433, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1432, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1453, + "src": "8998:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1431, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8998:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "8997:16:5" + }, + "scope": 2091, + "src": "8952:217:5", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1556, + "nodeType": "Block", + "src": "9419:701:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 1465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 1461, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "9429:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1462, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 902, + "src": "9436:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolInfo_$887_storage_$dyn_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref[] storage ref" + } + }, + "id": 1464, + "indexExpression": { + "argumentTypes": null, + "id": 1463, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1456, + "src": "9445:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9436:13:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref" + } + }, + "src": "9429:20:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1466, + "nodeType": "ExpressionStatement", + "src": "9429:20:5" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1467, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "9463:5:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 1468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9463:12:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1469, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "9478:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1470, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 884, + "src": "9478:20:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "9463:35:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 1555, + "nodeType": "IfStatement", + "src": "9459:655:5", + "trueBody": { + "id": 1554, + "nodeType": "Block", + "src": "9500:614:5", + "statements": [ + { + "assignments": [ + 1473 + ], + "declarations": [ + { + "constant": false, + "id": 1473, + "mutability": "mutable", + "name": "lpSupply", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1554, + "src": "9514:16:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1472, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9514:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1483, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1480, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "9564:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + ], + "id": 1479, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9556:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1478, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9556:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9556:13:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1474, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "9533:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 1476, + "indexExpression": { + "argumentTypes": null, + "id": 1475, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1456, + "src": "9541:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9533:12:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1477, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 285, + "src": "9533:22:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 1482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9533:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9514:56:5" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1486, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 1484, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1473, + "src": "9588:8:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 1485, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9599:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "9588:12:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 1529, + "nodeType": "IfStatement", + "src": "9584:338:5", + "trueBody": { + "id": 1528, + "nodeType": "Block", + "src": "9602:320:5", + "statements": [ + { + "assignments": [ + 1488 + ], + "declarations": [ + { + "constant": false, + "id": 1488, + "mutability": "mutable", + "name": "blocks", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1528, + "src": "9620:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1487, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9620:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1495, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1492, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "9654:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1493, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 884, + "src": "9654:20:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1489, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "9637:5:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 1490, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9637:12:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "9637:16:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9637:38:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9620:55:5" + }, + { + "assignments": [ + 1497 + ], + "declarations": [ + { + "constant": false, + "id": 1497, + "mutability": "mutable", + "name": "sushiReward", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1528, + "src": "9693:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1496, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9693:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1509, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1508, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1504, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "9747:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1505, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "allocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 886, + "src": "9747:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 1500, + "name": "sushiPerBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1453, + "src": "9726:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$", + "typeString": "function () view returns (uint256)" + } + }, + "id": 1501, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9726:15:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1498, + "name": "blocks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1488, + "src": "9715:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "9715:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9715:27:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "9715:31:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9715:48:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1507, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 920, + "src": "9766:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9715:66:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9693:88:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1510, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "9799:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1512, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 882, + "src": "9799:21:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1518, + "name": "ACC_SUSHI_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 926, + "src": "9866:19:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1516, + "name": "sushiReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1497, + "src": "9850:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "9850:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1519, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9850:36:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1520, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1473, + "src": "9889:8:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9850:47:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 1522, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9849:49:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to128", + "nodeType": "MemberAccess", + "referencedDeclaration": 653, + "src": "9849:55:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint128)" + } + }, + "id": 1524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9849:57:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1513, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "9823:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1514, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 882, + "src": "9823:21:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "id": 1515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 728, + "src": "9823:25:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint128_$_t_uint128_$returns$_t_uint128_$bound_to$_t_uint128_$", + "typeString": "function (uint128,uint128) pure returns (uint128)" + } + }, + "id": 1525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9823:84:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "src": "9799:108:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "id": 1527, + "nodeType": "ExpressionStatement", + "src": "9799:108:5" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "id": 1537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1530, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "9935:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1532, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 884, + "src": "9935:20:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1533, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "9958:5:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 1534, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9958:12:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to64", + "nodeType": "MemberAccess", + "referencedDeclaration": 679, + "src": "9958:17:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 1536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9958:19:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "9935:42:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 1538, + "nodeType": "ExpressionStatement", + "src": "9935:42:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1539, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 902, + "src": "9991:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PoolInfo_$887_storage_$dyn_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref[] storage ref" + } + }, + "id": 1541, + "indexExpression": { + "argumentTypes": null, + "id": 1540, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1456, + "src": "10000:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "9991:13:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 1542, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "10007:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "src": "9991:20:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage", + "typeString": "struct MasterChefV2.PoolInfo storage ref" + } + }, + "id": 1544, + "nodeType": "ExpressionStatement", + "src": "9991:20:5" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1546, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1456, + "src": "10044:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1547, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "10049:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1548, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 884, + "src": "10049:20:5", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "argumentTypes": null, + "id": 1549, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1473, + "src": "10071:8:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1550, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1459, + "src": "10081:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1551, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 882, + "src": "10081:21:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "id": 1545, + "name": "LogUpdatePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 994, + "src": "10030:13:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint64_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint64,uint256,uint256)" + } + }, + "id": 1552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10030:73:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1553, + "nodeType": "EmitStatement", + "src": "10025:78:5" + } + ] + } + } + ] + }, + "documentation": { + "id": 1454, + "nodeType": "StructuredDocumentation", + "src": "9175:168:5", + "text": "@notice Update reward variables of the given pool.\n @param pid The index of the pool. See `poolInfo`.\n @return pool Returns the pool that was updated." + }, + "functionSelector": "51eb05a6", + "id": 1557, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updatePool", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1457, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1456, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1557, + "src": "9368:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1455, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9368:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9367:13:5" + }, + "returnParameters": { + "id": 1460, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1459, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1557, + "src": "9397:20:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 1458, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 887, + "src": "9397:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "9396:22:5" + }, + "scope": 2091, + "src": "9348:772:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1659, + "nodeType": "Block", + "src": "10423:606:5", + "statements": [ + { + "assignments": [ + 1568 + ], + "declarations": [ + { + "constant": false, + "id": 1568, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1659, + "src": "10433:20:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 1567, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 887, + "src": "10433:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1572, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1570, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1560, + "src": "10467:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1569, + "name": "updatePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1557, + "src": "10456:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_struct$_PoolInfo_$887_memory_ptr_$", + "typeString": "function (uint256) returns (struct MasterChefV2.PoolInfo memory)" + } + }, + "id": 1571, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10456:15:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10433:38:5" + }, + { + "assignments": [ + 1574 + ], + "declarations": [ + { + "constant": false, + "id": 1574, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1659, + "src": "10481:21:5", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + }, + "typeName": { + "contractScope": null, + "id": 1573, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 880, + "src": "10481:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1580, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1575, + "name": "userInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 917, + "src": "10505:8:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct MasterChefV2.UserInfo storage ref))" + } + }, + "id": 1577, + "indexExpression": { + "argumentTypes": null, + "id": 1576, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1560, + "src": "10514:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10505:13:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$", + "typeString": "mapping(address => struct MasterChefV2.UserInfo storage ref)" + } + }, + "id": 1579, + "indexExpression": { + "argumentTypes": null, + "id": 1578, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1564, + "src": "10519:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10505:17:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage", + "typeString": "struct MasterChefV2.UserInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10481:41:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1589, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1581, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1574, + "src": "10552:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1583, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "10552:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1587, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1562, + "src": "10582:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1584, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1574, + "src": "10566:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1585, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "10566:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 577, + "src": "10566:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10566:23:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10552:37:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1590, + "nodeType": "ExpressionStatement", + "src": "10552:37:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1591, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1574, + "src": "10599:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1593, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "10599:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1601, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1568, + "src": "10655:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1602, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 882, + "src": "10655:21:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "argumentTypes": null, + "id": 1599, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1562, + "src": "10644:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1600, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "10644:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1603, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10644:33:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1604, + "name": "ACC_SUSHI_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 926, + "src": "10680:19:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10644:55:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1598, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10637:6:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 1597, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "10637:6:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10637:63:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1594, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1574, + "src": "10617:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1595, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "10617:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 2344, + "src": "10617:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$", + "typeString": "function (int256,int256) pure returns (int256)" + } + }, + "id": 1607, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10617:84:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "10599:102:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1609, + "nodeType": "ExpressionStatement", + "src": "10599:102:5" + }, + { + "assignments": [ + 1611 + ], + "declarations": [ + { + "constant": false, + "id": 1611, + "mutability": "mutable", + "name": "_rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1659, + "src": "10736:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + "typeName": { + "contractScope": null, + "id": 1610, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "10736:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1615, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1612, + "name": "rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 910, + "src": "10758:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage", + "typeString": "contract IRewarder[] storage ref" + } + }, + "id": 1614, + "indexExpression": { + "argumentTypes": null, + "id": 1613, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1560, + "src": "10767:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10758:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10736:35:5" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1618, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1611, + "src": "10793:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + ], + "id": 1617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10785:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1616, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10785:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10785:18:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 1622, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10815:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1621, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10807:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1620, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10807:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1623, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10807:10:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "10785:32:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 1637, + "nodeType": "IfStatement", + "src": "10781:115:5", + "trueBody": { + "id": 1636, + "nodeType": "Block", + "src": "10819:77:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1628, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1560, + "src": "10857:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1629, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1564, + "src": "10862:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1630, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1564, + "src": "10866:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "30", + "id": 1631, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10870:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1632, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1574, + "src": "10873:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1633, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "10873:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1625, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1611, + "src": "10833:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "id": 1627, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "onSushiReward", + "nodeType": "MemberAccess", + "referencedDeclaration": 2151, + "src": "10833:23:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,address,address,uint256,uint256) external" + } + }, + "id": 1634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10833:52:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1635, + "nodeType": "ExpressionStatement", + "src": "10833:52:5" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1642, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "10936:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10936:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1646, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "10956:4:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + ], + "id": 1645, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10948:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1644, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10948:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10948:13:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1648, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1562, + "src": "10963:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1638, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "10906:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 1640, + "indexExpression": { + "argumentTypes": null, + "id": 1639, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1560, + "src": "10914:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10906:12:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 552, + "src": "10906:29:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$337_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$337_$", + "typeString": "function (contract IERC20,address,address,uint256)" + } + }, + "id": 1649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10906:64:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1650, + "nodeType": "ExpressionStatement", + "src": "10906:64:5" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1652, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "10994:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1653, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "10994:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 1654, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1560, + "src": "11006:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1655, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1562, + "src": "11011:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1656, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1564, + "src": "11019:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1651, + "name": "Deposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 936, + "src": "10986:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (address,uint256,uint256,address)" + } + }, + "id": 1657, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10986:36:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1658, + "nodeType": "EmitStatement", + "src": "10981:41:5" + } + ] + }, + "documentation": { + "id": 1558, + "nodeType": "StructuredDocumentation", + "src": "10126:227:5", + "text": "@notice Deposit LP tokens to MCV2 for SUSHI allocation.\n @param pid The index of the pool. See `poolInfo`.\n @param amount LP token amount to deposit.\n @param to The receiver of `amount` deposit benefit." + }, + "functionSelector": "8dbdbe6d", + "id": 1660, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1565, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1560, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1660, + "src": "10375:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1559, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10375:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1562, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1660, + "src": "10388:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1561, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10388:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1564, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1660, + "src": "10404:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1563, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10404:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "10374:41:5" + }, + "returnParameters": { + "id": 1566, + "nodeType": "ParameterList", + "parameters": [], + "src": "10423:0:5" + }, + "scope": 2091, + "src": "10358:671:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1759, + "nodeType": "Block", + "src": "11301:604:5", + "statements": [ + { + "assignments": [ + 1671 + ], + "declarations": [ + { + "constant": false, + "id": 1671, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1759, + "src": "11311:20:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 1670, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 887, + "src": "11311:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1675, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1673, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1663, + "src": "11345:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1672, + "name": "updatePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1557, + "src": "11334:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_struct$_PoolInfo_$887_memory_ptr_$", + "typeString": "function (uint256) returns (struct MasterChefV2.PoolInfo memory)" + } + }, + "id": 1674, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11334:15:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11311:38:5" + }, + { + "assignments": [ + 1677 + ], + "declarations": [ + { + "constant": false, + "id": 1677, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1759, + "src": "11359:21:5", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + }, + "typeName": { + "contractScope": null, + "id": 1676, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 880, + "src": "11359:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1684, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1678, + "name": "userInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 917, + "src": "11383:8:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct MasterChefV2.UserInfo storage ref))" + } + }, + "id": 1680, + "indexExpression": { + "argumentTypes": null, + "id": 1679, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1663, + "src": "11392:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11383:13:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$", + "typeString": "mapping(address => struct MasterChefV2.UserInfo storage ref)" + } + }, + "id": 1683, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1681, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "11397:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1682, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "11397:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11383:25:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage", + "typeString": "struct MasterChefV2.UserInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11359:49:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1702, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1685, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1677, + "src": "11438:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1687, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "11438:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1695, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1671, + "src": "11494:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1696, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 882, + "src": "11494:21:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "argumentTypes": null, + "id": 1693, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1665, + "src": "11483:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1694, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "11483:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11483:33:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1698, + "name": "ACC_SUSHI_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 926, + "src": "11519:19:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11483:55:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1692, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11476:6:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 1691, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "11476:6:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11476:63:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1688, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1677, + "src": "11456:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1689, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "11456:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 2304, + "src": "11456:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$", + "typeString": "function (int256,int256) pure returns (int256)" + } + }, + "id": 1701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11456:84:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "11438:102:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1703, + "nodeType": "ExpressionStatement", + "src": "11438:102:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1712, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1704, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1677, + "src": "11550:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1706, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "11550:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1710, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1665, + "src": "11580:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1707, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1677, + "src": "11564:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1708, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "11564:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "11564:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1711, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11564:23:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11550:37:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1713, + "nodeType": "ExpressionStatement", + "src": "11550:37:5" + }, + { + "assignments": [ + 1715 + ], + "declarations": [ + { + "constant": false, + "id": 1715, + "mutability": "mutable", + "name": "_rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1759, + "src": "11622:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + "typeName": { + "contractScope": null, + "id": 1714, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "11622:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1719, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1716, + "name": "rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 910, + "src": "11644:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage", + "typeString": "contract IRewarder[] storage ref" + } + }, + "id": 1718, + "indexExpression": { + "argumentTypes": null, + "id": 1717, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1663, + "src": "11653:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11644:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11622:35:5" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1728, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1722, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1715, + "src": "11679:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + ], + "id": 1721, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11671:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1720, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11671:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11671:18:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 1726, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11701:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1725, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11693:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1724, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11693:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1727, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11693:10:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "11671:32:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 1742, + "nodeType": "IfStatement", + "src": "11667:123:5", + "trueBody": { + "id": 1741, + "nodeType": "Block", + "src": "11705:85:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1732, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1663, + "src": "11743:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1733, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "11748:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "11748:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 1735, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1667, + "src": "11760:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "30", + "id": 1736, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11764:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1737, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1677, + "src": "11767:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1738, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "11767:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1729, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1715, + "src": "11719:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "id": 1731, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "onSushiReward", + "nodeType": "MemberAccess", + "referencedDeclaration": 2151, + "src": "11719:23:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,address,address,uint256,uint256) external" + } + }, + "id": 1739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11719:60:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1740, + "nodeType": "ExpressionStatement", + "src": "11719:60:5" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1747, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1667, + "src": "11834:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1748, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1665, + "src": "11838:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1743, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "11808:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 1745, + "indexExpression": { + "argumentTypes": null, + "id": 1744, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1663, + "src": "11816:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11808:12:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 503, + "src": "11808:25:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$337_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$337_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 1749, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11808:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1750, + "nodeType": "ExpressionStatement", + "src": "11808:37:5" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1752, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "11870:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1753, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "11870:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 1754, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1663, + "src": "11882:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1755, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1665, + "src": "11887:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1756, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1667, + "src": "11895:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1751, + "name": "Withdraw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 946, + "src": "11861:8:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (address,uint256,uint256,address)" + } + }, + "id": 1757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11861:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1758, + "nodeType": "EmitStatement", + "src": "11856:42:5" + } + ] + }, + "documentation": { + "id": 1661, + "nodeType": "StructuredDocumentation", + "src": "11035:195:5", + "text": "@notice Withdraw LP tokens from MCV2.\n @param pid The index of the pool. See `poolInfo`.\n @param amount LP token amount to withdraw.\n @param to Receiver of the LP tokens." + }, + "functionSelector": "0ad58d2f", + "id": 1760, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1668, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1663, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1760, + "src": "11253:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1662, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11253:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1665, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1760, + "src": "11266:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1664, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11266:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1667, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1760, + "src": "11282:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11282:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "11252:41:5" + }, + "returnParameters": { + "id": 1669, + "nodeType": "ParameterList", + "parameters": [], + "src": "11301:0:5" + }, + "scope": 2091, + "src": "11235:670:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1861, + "nodeType": "Block", + "src": "12128:739:5", + "statements": [ + { + "assignments": [ + 1769 + ], + "declarations": [ + { + "constant": false, + "id": 1769, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1861, + "src": "12138:20:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 1768, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 887, + "src": "12138:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1773, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1771, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1763, + "src": "12172:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1770, + "name": "updatePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1557, + "src": "12161:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_struct$_PoolInfo_$887_memory_ptr_$", + "typeString": "function (uint256) returns (struct MasterChefV2.PoolInfo memory)" + } + }, + "id": 1772, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12161:15:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12138:38:5" + }, + { + "assignments": [ + 1775 + ], + "declarations": [ + { + "constant": false, + "id": 1775, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1861, + "src": "12186:21:5", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + }, + "typeName": { + "contractScope": null, + "id": 1774, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 880, + "src": "12186:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1782, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1776, + "name": "userInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 917, + "src": "12210:8:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct MasterChefV2.UserInfo storage ref))" + } + }, + "id": 1778, + "indexExpression": { + "argumentTypes": null, + "id": 1777, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1763, + "src": "12219:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12210:13:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$", + "typeString": "mapping(address => struct MasterChefV2.UserInfo storage ref)" + } + }, + "id": 1781, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1779, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "12224:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "12224:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12210:25:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage", + "typeString": "struct MasterChefV2.UserInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12186:49:5" + }, + { + "assignments": [ + 1784 + ], + "declarations": [ + { + "constant": false, + "id": 1784, + "mutability": "mutable", + "name": "accumulatedSushi", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1861, + "src": "12245:23:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 1783, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "12245:6:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1796, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1790, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1769, + "src": "12294:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1791, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 882, + "src": "12294:21:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1787, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1775, + "src": "12278:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1788, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "12278:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1789, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "12278:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12278:38:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1793, + "name": "ACC_SUSHI_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 926, + "src": "12319:19:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12278:60:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1786, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12271:6:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 1785, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "12271:6:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12271:68:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12245:94:5" + }, + { + "assignments": [ + 1798 + ], + "declarations": [ + { + "constant": false, + "id": 1798, + "mutability": "mutable", + "name": "_pendingSushi", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1861, + "src": "12349:21:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1797, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12349:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1806, + "initialValue": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1801, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1775, + "src": "12394:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1802, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "12394:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1799, + "name": "accumulatedSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1784, + "src": "12373:16:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1800, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 2304, + "src": "12373:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$", + "typeString": "function (int256,int256) pure returns (int256)" + } + }, + "id": 1803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12373:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toUInt256", + "nodeType": "MemberAccess", + "referencedDeclaration": 2364, + "src": "12373:47:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$", + "typeString": "function (int256) pure returns (uint256)" + } + }, + "id": 1805, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12373:49:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12349:73:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1811, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1807, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1775, + "src": "12452:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1809, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "12452:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 1810, + "name": "accumulatedSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1784, + "src": "12470:16:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "12452:34:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1812, + "nodeType": "ExpressionStatement", + "src": "12452:34:5" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1815, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 1813, + "name": "_pendingSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1798, + "src": "12525:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 1814, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12542:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "12525:18:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 1824, + "nodeType": "IfStatement", + "src": "12521:86:5", + "trueBody": { + "id": 1823, + "nodeType": "Block", + "src": "12545:62:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1819, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1765, + "src": "12578:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1820, + "name": "_pendingSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1798, + "src": "12582:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1816, + "name": "SUSHI", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 893, + "src": "12559:5:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 503, + "src": "12559:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$337_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$337_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 1821, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12559:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1822, + "nodeType": "ExpressionStatement", + "src": "12559:37:5" + } + ] + } + }, + { + "assignments": [ + 1826 + ], + "declarations": [ + { + "constant": false, + "id": 1826, + "mutability": "mutable", + "name": "_rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1861, + "src": "12625:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + "typeName": { + "contractScope": null, + "id": 1825, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "12625:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1830, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1827, + "name": "rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 910, + "src": "12647:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage", + "typeString": "contract IRewarder[] storage ref" + } + }, + "id": 1829, + "indexExpression": { + "argumentTypes": null, + "id": 1828, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1763, + "src": "12656:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12647:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12625:35:5" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1833, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1826, + "src": "12682:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + ], + "id": 1832, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12674:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1831, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12674:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1834, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12674:18:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 1837, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12704:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1836, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12696:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1835, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12696:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1838, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12696:10:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "12674:32:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 1853, + "nodeType": "IfStatement", + "src": "12670:136:5", + "trueBody": { + "id": 1852, + "nodeType": "Block", + "src": "12708:98:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1843, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1763, + "src": "12747:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1844, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "12752:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1845, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "12752:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 1846, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1765, + "src": "12764:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1847, + "name": "_pendingSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1798, + "src": "12768:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1848, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1775, + "src": "12783:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1849, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "12783:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1840, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1826, + "src": "12722:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "id": 1842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "onSushiReward", + "nodeType": "MemberAccess", + "referencedDeclaration": 2151, + "src": "12722:23:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,address,address,uint256,uint256) external" + } + }, + "id": 1850, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12722:73:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1851, + "nodeType": "ExpressionStatement", + "src": "12722:73:5" + } + ] + } + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1855, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "12829:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1856, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "12829:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 1857, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1763, + "src": "12841:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1858, + "name": "_pendingSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1798, + "src": "12846:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1854, + "name": "Harvest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 964, + "src": "12821:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256,uint256)" + } + }, + "id": 1859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12821:39:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1860, + "nodeType": "EmitStatement", + "src": "12816:44:5" + } + ] + }, + "documentation": { + "id": 1761, + "nodeType": "StructuredDocumentation", + "src": "11911:163:5", + "text": "@notice Harvest proceeds for transaction sender to `to`.\n @param pid The index of the pool. See `poolInfo`.\n @param to Receiver of SUSHI rewards." + }, + "functionSelector": "18fccc76", + "id": 1862, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "harvest", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1766, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1763, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1862, + "src": "12096:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1762, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12096:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1765, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1862, + "src": "12109:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1764, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12109:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "12095:25:5" + }, + "returnParameters": { + "id": 1767, + "nodeType": "ParameterList", + "parameters": [], + "src": "12128:0:5" + }, + "scope": 2091, + "src": "12079:788:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 1998, + "nodeType": "Block", + "src": "13223:906:5", + "statements": [ + { + "assignments": [ + 1873 + ], + "declarations": [ + { + "constant": false, + "id": 1873, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1998, + "src": "13233:20:5", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 1872, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 887, + "src": "13233:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_storage_ptr", + "typeString": "struct MasterChefV2.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1877, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1875, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1865, + "src": "13267:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1874, + "name": "updatePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1557, + "src": "13256:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_struct$_PoolInfo_$887_memory_ptr_$", + "typeString": "function (uint256) returns (struct MasterChefV2.PoolInfo memory)" + } + }, + "id": 1876, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13256:15:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13233:38:5" + }, + { + "assignments": [ + 1879 + ], + "declarations": [ + { + "constant": false, + "id": 1879, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1998, + "src": "13281:21:5", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + }, + "typeName": { + "contractScope": null, + "id": 1878, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 880, + "src": "13281:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1886, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1880, + "name": "userInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 917, + "src": "13305:8:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct MasterChefV2.UserInfo storage ref))" + } + }, + "id": 1882, + "indexExpression": { + "argumentTypes": null, + "id": 1881, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1865, + "src": "13314:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13305:13:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$", + "typeString": "mapping(address => struct MasterChefV2.UserInfo storage ref)" + } + }, + "id": 1885, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1883, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "13319:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1884, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "13319:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13305:25:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage", + "typeString": "struct MasterChefV2.UserInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13281:49:5" + }, + { + "assignments": [ + 1888 + ], + "declarations": [ + { + "constant": false, + "id": 1888, + "mutability": "mutable", + "name": "accumulatedSushi", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1998, + "src": "13340:23:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 1887, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "13340:6:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1900, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1894, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1873, + "src": "13389:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1895, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 882, + "src": "13389:21:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1891, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1879, + "src": "13373:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1892, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "13373:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1893, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "13373:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13373:38:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1897, + "name": "ACC_SUSHI_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 926, + "src": "13414:19:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13373:60:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1890, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13366:6:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 1889, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "13366:6:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13366:68:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13340:94:5" + }, + { + "assignments": [ + 1902 + ], + "declarations": [ + { + "constant": false, + "id": 1902, + "mutability": "mutable", + "name": "_pendingSushi", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1998, + "src": "13444:21:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1901, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13444:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1910, + "initialValue": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1905, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1879, + "src": "13489:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1906, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "13489:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1903, + "name": "accumulatedSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1888, + "src": "13468:16:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 2304, + "src": "13468:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$", + "typeString": "function (int256,int256) pure returns (int256)" + } + }, + "id": 1907, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13468:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "toUInt256", + "nodeType": "MemberAccess", + "referencedDeclaration": 2364, + "src": "13468:47:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$bound_to$_t_int256_$", + "typeString": "function (int256) pure returns (uint256)" + } + }, + "id": 1909, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13468:49:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13444:73:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1911, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1879, + "src": "13547:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1913, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "13547:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 1924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1920, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1873, + "src": "13604:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$887_memory_ptr", + "typeString": "struct MasterChefV2.PoolInfo memory" + } + }, + "id": 1921, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 882, + "src": "13604:21:5", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "argumentTypes": null, + "id": 1918, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1867, + "src": "13593:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "13593:10:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13593:33:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 1923, + "name": "ACC_SUSHI_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 926, + "src": "13629:19:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13593:55:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1917, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13586:6:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int256_$", + "typeString": "type(int256)" + }, + "typeName": { + "id": 1916, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "13586:6:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13586:63:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1914, + "name": "accumulatedSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1888, + "src": "13565:16:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1915, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 2304, + "src": "13565:20:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_int256_$_t_int256_$returns$_t_int256_$bound_to$_t_int256_$", + "typeString": "function (int256,int256) pure returns (int256)" + } + }, + "id": 1926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13565:85:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "13547:103:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 1928, + "nodeType": "ExpressionStatement", + "src": "13547:103:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 1937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1929, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1879, + "src": "13660:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1931, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "13660:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1935, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1867, + "src": "13690:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1932, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1879, + "src": "13674:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1933, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "13674:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1934, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "13674:15:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 1936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13674:23:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13660:37:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 1938, + "nodeType": "ExpressionStatement", + "src": "13660:37:5" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1942, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1869, + "src": "13759:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1943, + "name": "_pendingSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1902, + "src": "13763:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1939, + "name": "SUSHI", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 893, + "src": "13740:5:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1941, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 503, + "src": "13740:18:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$337_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$337_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 1944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13740:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1945, + "nodeType": "ExpressionStatement", + "src": "13740:37:5" + }, + { + "assignments": [ + 1947 + ], + "declarations": [ + { + "constant": false, + "id": 1947, + "mutability": "mutable", + "name": "_rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1998, + "src": "13788:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + "typeName": { + "contractScope": null, + "id": 1946, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "13788:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 1951, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1948, + "name": "rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 910, + "src": "13810:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage", + "typeString": "contract IRewarder[] storage ref" + } + }, + "id": 1950, + "indexExpression": { + "argumentTypes": null, + "id": 1949, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1865, + "src": "13819:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13810:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13788:35:5" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 1960, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1954, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1947, + "src": "13845:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + ], + "id": 1953, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13837:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1952, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13837:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1955, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13837:18:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 1958, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13867:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 1957, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13859:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 1956, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13859:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 1959, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13859:10:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "13837:32:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 1974, + "nodeType": "IfStatement", + "src": "13833:135:5", + "trueBody": { + "id": 1973, + "nodeType": "Block", + "src": "13871:97:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1964, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1865, + "src": "13909:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1965, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "13914:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1966, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "13914:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 1967, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1869, + "src": "13926:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1968, + "name": "_pendingSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1902, + "src": "13930:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1969, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1879, + "src": "13945:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 1970, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "13945:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 1961, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1947, + "src": "13885:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "id": 1963, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "onSushiReward", + "nodeType": "MemberAccess", + "referencedDeclaration": 2151, + "src": "13885:23:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,address,address,uint256,uint256) external" + } + }, + "id": 1971, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13885:72:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1972, + "nodeType": "ExpressionStatement", + "src": "13885:72:5" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 1979, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1869, + "src": "14004:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 1980, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1867, + "src": "14008:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 1975, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "13978:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 1977, + "indexExpression": { + "argumentTypes": null, + "id": 1976, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1865, + "src": "13986:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13978:12:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 1978, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 503, + "src": "13978:25:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$337_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$337_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 1981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13978:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1982, + "nodeType": "ExpressionStatement", + "src": "13978:37:5" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1984, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "14040:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "14040:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 1986, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1865, + "src": "14052:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1987, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1867, + "src": "14057:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1988, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1869, + "src": "14065:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 1983, + "name": "Withdraw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 946, + "src": "14031:8:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (address,uint256,uint256,address)" + } + }, + "id": 1989, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14031:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1990, + "nodeType": "EmitStatement", + "src": "14026:42:5" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 1992, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "14091:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 1993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "14091:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 1994, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1865, + "src": "14103:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 1995, + "name": "_pendingSushi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1902, + "src": "14108:13:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 1991, + "name": "Harvest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 964, + "src": "14083:7:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256,uint256)" + } + }, + "id": 1996, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14083:39:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 1997, + "nodeType": "EmitStatement", + "src": "14078:44:5" + } + ] + }, + "documentation": { + "id": 1863, + "nodeType": "StructuredDocumentation", + "src": "12877:265:5", + "text": "@notice Withdraw LP tokens from MCV2 and harvest proceeds for transaction sender to `to`.\n @param pid The index of the pool. See `poolInfo`.\n @param amount LP token amount to withdraw.\n @param to Receiver of the LP tokens and SUSHI rewards." + }, + "functionSelector": "d1abb907", + "id": 1999, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "withdrawAndHarvest", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 1870, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 1865, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1999, + "src": "13175:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1864, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13175:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1867, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1999, + "src": "13188:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 1866, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13188:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 1869, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 1999, + "src": "13204:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 1868, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13204:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "13174:41:5" + }, + "returnParameters": { + "id": 1871, + "nodeType": "ParameterList", + "parameters": [], + "src": "13223:0:5" + }, + "scope": 2091, + "src": "13147:982:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2010, + "nodeType": "Block", + "src": "14275:51:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2006, + "name": "MASTER_PID", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 896, + "src": "14305:10:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "hexValue": "30", + "id": 2007, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14317:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "argumentTypes": null, + "id": 2003, + "name": "MASTER_CHEF", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 890, + "src": "14285:11:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IMasterChef_$2132", + "typeString": "contract IMasterChef" + } + }, + "id": 2005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "deposit", + "nodeType": "MemberAccess", + "referencedDeclaration": 2131, + "src": "14285:19:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256) external" + } + }, + "id": 2008, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14285:34:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2009, + "nodeType": "ExpressionStatement", + "src": "14285:34:5" + } + ] + }, + "documentation": { + "id": 2000, + "nodeType": "StructuredDocumentation", + "src": "14135:95:5", + "text": "@notice Harvests SUSHI from `MASTER_CHEF` MCV1 and pool `MASTER_PID` to this MCV2 contract." + }, + "functionSelector": "4f70b15a", + "id": 2011, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "harvestFromMasterChef", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2001, + "nodeType": "ParameterList", + "parameters": [], + "src": "14265:2:5" + }, + "returnParameters": { + "id": 2002, + "nodeType": "ParameterList", + "parameters": [], + "src": "14275:0:5" + }, + "scope": 2091, + "src": "14235:91:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2089, + "nodeType": "Block", + "src": "14565:502:5", + "statements": [ + { + "assignments": [ + 2020 + ], + "declarations": [ + { + "constant": false, + "id": 2020, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2089, + "src": "14575:21:5", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + }, + "typeName": { + "contractScope": null, + "id": 2019, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 880, + "src": "14575:8:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2027, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2021, + "name": "userInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 917, + "src": "14599:8:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct MasterChefV2.UserInfo storage ref))" + } + }, + "id": 2023, + "indexExpression": { + "argumentTypes": null, + "id": 2022, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2014, + "src": "14608:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14599:13:5", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$880_storage_$", + "typeString": "mapping(address => struct MasterChefV2.UserInfo storage ref)" + } + }, + "id": 2026, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2024, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "14613:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "14613:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14599:25:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage", + "typeString": "struct MasterChefV2.UserInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14575:49:5" + }, + { + "assignments": [ + 2029 + ], + "declarations": [ + { + "constant": false, + "id": 2029, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2089, + "src": "14634:14:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2028, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14634:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2032, + "initialValue": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2030, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2020, + "src": "14651:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 2031, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "14651:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14634:28:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 2037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2033, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2020, + "src": "14672:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 2035, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 877, + "src": "14672:11:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "30", + "id": 2036, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14686:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "14672:15:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2038, + "nodeType": "ExpressionStatement", + "src": "14672:15:5" + }, + { + "expression": { + "argumentTypes": null, + "id": 2043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2039, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2020, + "src": "14697:4:5", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$880_storage_ptr", + "typeString": "struct MasterChefV2.UserInfo storage pointer" + } + }, + "id": 2041, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 879, + "src": "14697:15:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "hexValue": "30", + "id": 2042, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14715:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "14697:19:5", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "id": 2044, + "nodeType": "ExpressionStatement", + "src": "14697:19:5" + }, + { + "assignments": [ + 2046 + ], + "declarations": [ + { + "constant": false, + "id": 2046, + "mutability": "mutable", + "name": "_rewarder", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2089, + "src": "14727:19:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + }, + "typeName": { + "contractScope": null, + "id": 2045, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "14727:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2050, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2047, + "name": "rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 910, + "src": "14749:8:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IRewarder_$2167_$dyn_storage", + "typeString": "contract IRewarder[] storage ref" + } + }, + "id": 2049, + "indexExpression": { + "argumentTypes": null, + "id": 2048, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2014, + "src": "14758:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14749:13:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14727:35:5" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2059, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2053, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2046, + "src": "14784:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + ], + "id": 2052, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14776:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2051, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14776:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14776:18:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "30", + "id": 2057, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14806:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2056, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14798:7:5", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 2055, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14798:7:5", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2058, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14798:10:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "14776:32:5", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 2072, + "nodeType": "IfStatement", + "src": "14772:113:5", + "trueBody": { + "id": 2071, + "nodeType": "Block", + "src": "14810:75:5", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2063, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2014, + "src": "14848:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2064, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "14853:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "14853:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 2066, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2016, + "src": "14865:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "hexValue": "30", + "id": 2067, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14869:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "argumentTypes": null, + "hexValue": "30", + "id": 2068, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14872:1:5", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "expression": { + "argumentTypes": null, + "id": 2060, + "name": "_rewarder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2046, + "src": "14824:9:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "id": 2062, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "onSushiReward", + "nodeType": "MemberAccess", + "referencedDeclaration": 2151, + "src": "14824:23:5", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,address,address,uint256,uint256) external" + } + }, + "id": 2069, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14824:50:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2070, + "nodeType": "ExpressionStatement", + "src": "14824:50:5" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2077, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2016, + "src": "14988:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2078, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2029, + "src": "14992:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2073, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 906, + "src": "14962:7:5", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage", + "typeString": "contract IERC20[] storage ref" + } + }, + "id": 2075, + "indexExpression": { + "argumentTypes": null, + "id": 2074, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2014, + "src": "14970:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14962:12:5", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 503, + "src": "14962:25:5", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$337_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$337_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 2079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14962:37:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2080, + "nodeType": "ExpressionStatement", + "src": "14962:37:5" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2082, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "15032:3:5", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "15032:10:5", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "argumentTypes": null, + "id": 2084, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2014, + "src": "15044:3:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2085, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2029, + "src": "15049:6:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2086, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2016, + "src": "15057:2:5", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2081, + "name": "EmergencyWithdraw", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 956, + "src": "15014:17:5", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (address,uint256,uint256,address)" + } + }, + "id": 2087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15014:46:5", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2088, + "nodeType": "EmitStatement", + "src": "15009:51:5" + } + ] + }, + "documentation": { + "id": 2012, + "nodeType": "StructuredDocumentation", + "src": "14332:169:5", + "text": "@notice Withdraw without caring about rewards. EMERGENCY ONLY.\n @param pid The index of the pool. See `poolInfo`.\n @param to Receiver of the LP tokens." + }, + "functionSelector": "2f940c70", + "id": 2090, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "emergencyWithdraw", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2017, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2014, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2090, + "src": "14533:11:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2013, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14533:7:5", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2016, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2090, + "src": "14546:10:5", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2015, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14546:7:5", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "14532:25:5" + }, + "returnParameters": { + "id": 2018, + "nodeType": "ParameterList", + "parameters": [], + "src": "14565:0:5" + }, + "scope": 2091, + "src": "14506:561:5", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + } + ], + "scope": 2092, + "src": "1098:13971:5" + } + ], + "src": "33:15037:5" + }, + "id": 5 + }, + "contracts/interfaces/IMasterChef.sol": { + "ast": { + "absolutePath": "contracts/interfaces/IMasterChef.sol", + "exportedSymbols": { + "IMasterChef": [ + 2132 + ] + }, + "id": 2133, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2093, + "literals": [ + "solidity", + "0.6", + ".12" + ], + "nodeType": "PragmaDirective", + "src": "32:23:6" + }, + { + "id": 2094, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "56:33:6" + }, + { + "absolutePath": "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol", + "file": "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol", + "id": 2095, + "nodeType": "ImportDirective", + "scope": 2133, + "sourceUnit": 554, + "src": "90:75:6", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": null, + "fullyImplemented": false, + "id": 2132, + "linearizedBaseContracts": [ + 2132 + ], + "name": "IMasterChef", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 2098, + "libraryName": { + "contractScope": null, + "id": 2096, + "name": "BoringERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 553, + "src": "201:11:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringERC20_$553", + "typeString": "library BoringERC20" + } + }, + "nodeType": "UsingForDirective", + "src": "195:29:6", + "typeName": { + "contractScope": null, + "id": 2097, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "217:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + }, + { + "canonicalName": "IMasterChef.UserInfo", + "id": 2103, + "members": [ + { + "constant": false, + "id": 2100, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2103, + "src": "255:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2099, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "255:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2102, + "mutability": "mutable", + "name": "rewardDebt", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2103, + "src": "328:18:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2101, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "328:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "UserInfo", + "nodeType": "StructDefinition", + "scope": 2132, + "src": "229:163:6", + "visibility": "public" + }, + { + "canonicalName": "IMasterChef.PoolInfo", + "id": 2112, + "members": [ + { + "constant": false, + "id": 2105, + "mutability": "mutable", + "name": "lpToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2112, + "src": "424:14:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 2104, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "424:6:6", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2107, + "mutability": "mutable", + "name": "allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2112, + "src": "491:18:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2106, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "491:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2109, + "mutability": "mutable", + "name": "lastRewardBlock", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2112, + "src": "609:23:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2108, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "609:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2111, + "mutability": "mutable", + "name": "accSushiPerShare", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2112, + "src": "696:24:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2110, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "696:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "PoolInfo", + "nodeType": "StructDefinition", + "scope": 2132, + "src": "398:384:6", + "visibility": "public" + }, + { + "body": null, + "documentation": null, + "functionSelector": "1526fe27", + "id": 2119, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "poolInfo", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2115, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2114, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2119, + "src": "806:11:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2113, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "806:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "805:13:6" + }, + "returnParameters": { + "id": 2118, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2117, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2119, + "src": "842:27:6", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2112_memory_ptr", + "typeString": "struct IMasterChef.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 2116, + "name": "IMasterChef.PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2112, + "src": "842:20:6", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2112_storage_ptr", + "typeString": "struct IMasterChef.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "841:29:6" + }, + "scope": 2132, + "src": "788:83:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": null, + "documentation": null, + "functionSelector": "17caf6f1", + "id": 2124, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "totalAllocPoint", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2120, + "nodeType": "ParameterList", + "parameters": [], + "src": "900:2:6" + }, + "returnParameters": { + "id": 2123, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2122, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2124, + "src": "926:7:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2121, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "926:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "925:9:6" + }, + "scope": 2132, + "src": "876:59:6", + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "body": null, + "documentation": null, + "functionSelector": "e2bbb158", + "id": 2131, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2129, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2126, + "mutability": "mutable", + "name": "_pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2131, + "src": "957:12:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2125, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "957:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2128, + "mutability": "mutable", + "name": "_amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2131, + "src": "971:15:6", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2127, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "971:7:6", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "956:31:6" + }, + "returnParameters": { + "id": 2130, + "nodeType": "ParameterList", + "parameters": [], + "src": "996:0:6" + }, + "scope": 2132, + "src": "940:57:6", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2133, + "src": "167:832:6" + } + ], + "src": "32:968:6" + }, + "id": 6 + }, + "contracts/interfaces/IRewarder.sol": { + "ast": { + "absolutePath": "contracts/interfaces/IRewarder.sol", + "exportedSymbols": { + "IRewarder": [ + 2167 + ] + }, + "id": 2168, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2134, + "literals": [ + "solidity", + "0.6", + ".12" + ], + "nodeType": "PragmaDirective", + "src": "33:23:7" + }, + { + "absolutePath": "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol", + "file": "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol", + "id": 2135, + "nodeType": "ImportDirective", + "scope": 2168, + "sourceUnit": 554, + "src": "57:75:7", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "interface", + "documentation": null, + "fullyImplemented": false, + "id": 2167, + "linearizedBaseContracts": [ + 2167 + ], + "name": "IRewarder", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 2138, + "libraryName": { + "contractScope": null, + "id": 2136, + "name": "BoringERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 553, + "src": "165:11:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringERC20_$553", + "typeString": "library BoringERC20" + } + }, + "nodeType": "UsingForDirective", + "src": "159:29:7", + "typeName": { + "contractScope": null, + "id": 2137, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "181:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + }, + { + "body": null, + "documentation": null, + "functionSelector": "8bf63742", + "id": 2151, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "onSushiReward", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2149, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2140, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2151, + "src": "216:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2139, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "216:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2142, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2151, + "src": "229:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2141, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "229:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2144, + "mutability": "mutable", + "name": "recipient", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2151, + "src": "243:17:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2143, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "243:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2146, + "mutability": "mutable", + "name": "sushiAmount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2151, + "src": "262:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2145, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "262:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2148, + "mutability": "mutable", + "name": "newLpAmount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2151, + "src": "283:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2147, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "283:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "215:88:7" + }, + "returnParameters": { + "id": 2150, + "nodeType": "ParameterList", + "parameters": [], + "src": "312:0:7" + }, + "scope": 2167, + "src": "193:120:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": null, + "documentation": null, + "functionSelector": "d63b3c49", + "id": 2166, + "implemented": false, + "kind": "function", + "modifiers": [], + "name": "pendingTokens", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2158, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2153, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2166, + "src": "341:11:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2152, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "341:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2155, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2166, + "src": "354:12:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2154, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "354:7:7", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2157, + "mutability": "mutable", + "name": "sushiAmount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2166, + "src": "368:19:7", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2156, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "368:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "340:48:7" + }, + "returnParameters": { + "id": 2165, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2161, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2166, + "src": "407:15:7", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "contractScope": null, + "id": 2159, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "407:6:7", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2160, + "length": null, + "nodeType": "ArrayTypeName", + "src": "407:8:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2164, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2166, + "src": "424:16:7", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2162, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "424:7:7", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2163, + "length": null, + "nodeType": "ArrayTypeName", + "src": "424:9:7", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "406:35:7" + }, + "scope": 2167, + "src": "318:124:7", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + } + ], + "scope": 2168, + "src": "133:311:7" + } + ], + "src": "33:412:7" + }, + "id": 7 + }, + "contracts/libraries/SignedSafeMath.sol": { + "ast": { + "absolutePath": "contracts/libraries/SignedSafeMath.sol", + "exportedSymbols": { + "SignedSafeMath": [ + 2365 + ] + }, + "id": 2366, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2169, + "literals": [ + "solidity", + "0.6", + ".12" + ], + "nodeType": "PragmaDirective", + "src": "33:23:8" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "library", + "documentation": null, + "fullyImplemented": true, + "id": 2365, + "linearizedBaseContracts": [ + 2365 + ], + "name": "SignedSafeMath", + "nodeType": "ContractDefinition", + "nodes": [ + { + "constant": true, + "id": 2175, + "mutability": "constant", + "name": "_INT256_MIN", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2365, + "src": "87:45:8", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2170, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "87:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_rational_minus_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1", + "typeString": "int_const -578...(70 digits omitted)...9968" + }, + "id": 2174, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2172, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "125:2:8", + "subExpression": { + "argumentTypes": null, + "hexValue": "32", + "id": 2171, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "126:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_2_by_1", + "typeString": "int_const -2" + } + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "argumentTypes": null, + "hexValue": "323535", + "id": 2173, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "129:3:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "255" + }, + "src": "125:7:8", + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1", + "typeString": "int_const -578...(70 digits omitted)...9968" + } + }, + "visibility": "private" + }, + { + "body": { + "id": 2223, + "nodeType": "Block", + "src": "442:490:8", + "statements": [ + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2185, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2178, + "src": "674:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2186, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "679:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "674:6:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 2191, + "nodeType": "IfStatement", + "src": "670:45:8", + "trueBody": { + "id": 2190, + "nodeType": "Block", + "src": "682:33:8", + "statements": [ + { + "expression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2188, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "703:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 2184, + "id": 2189, + "nodeType": "Return", + "src": "696:8:8" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "733:30:8", + "subExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2193, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2178, + "src": "735:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 2195, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "740:2:8", + "subExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 2194, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "741:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + }, + "src": "735:7:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2199, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2197, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2180, + "src": "746:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 2198, + "name": "_INT256_MIN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2175, + "src": "751:11:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "746:16:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "735:27:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2201, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "734:29:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77", + "id": 2203, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "765:41:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954", + "typeString": "literal_string \"SignedSafeMath: multiplication overflow\"" + }, + "value": "SignedSafeMath: multiplication overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954", + "typeString": "literal_string \"SignedSafeMath: multiplication overflow\"" + } + ], + "id": 2192, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "725:7:8", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2204, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "725:82:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2205, + "nodeType": "ExpressionStatement", + "src": "725:82:8" + }, + { + "assignments": [ + 2207 + ], + "declarations": [ + { + "constant": false, + "id": 2207, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2223, + "src": "818:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2206, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "818:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2211, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2208, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2178, + "src": "829:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "argumentTypes": null, + "id": 2209, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2180, + "src": "833:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "829:5:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "818:16:8" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2213, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2207, + "src": "852:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 2214, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2178, + "src": "856:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "852:5:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 2216, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2180, + "src": "861:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "852:10:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77", + "id": 2218, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "864:41:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954", + "typeString": "literal_string \"SignedSafeMath: multiplication overflow\"" + }, + "value": "SignedSafeMath: multiplication overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a608fbdf6cc4ee9c43b141f63e234f4edb26cfb78aba3140cfd865641cb2c954", + "typeString": "literal_string \"SignedSafeMath: multiplication overflow\"" + } + ], + "id": 2212, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "844:7:8", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2219, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "844:62:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2220, + "nodeType": "ExpressionStatement", + "src": "844:62:8" + }, + { + "expression": { + "argumentTypes": null, + "id": 2221, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2207, + "src": "924:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 2184, + "id": 2222, + "nodeType": "Return", + "src": "917:8:8" + } + ] + }, + "documentation": { + "id": 2176, + "nodeType": "StructuredDocumentation", + "src": "139:234:8", + "text": " @dev Returns the multiplication of two signed integers, reverting on\n overflow.\n Counterpart to Solidity's `*` operator.\n Requirements:\n - Multiplication cannot overflow." + }, + "id": 2224, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "mul", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2181, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2178, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2224, + "src": "391:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2177, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "391:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2180, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2224, + "src": "401:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2179, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "401:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "390:20:8" + }, + "returnParameters": { + "id": 2184, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2183, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2224, + "src": "434:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2182, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "434:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "433:8:8" + }, + "scope": 2365, + "src": "378:554:8", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2263, + "nodeType": "Block", + "src": "1456:200:8", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2237, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2235, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2229, + "src": "1474:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2236, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1479:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1474:6:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "5369676e6564536166654d6174683a206469766973696f6e206279207a65726f", + "id": 2238, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1482:34:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ebc4d0068c2e029285c70894a725032247a74fcdc822ba305ea67dbddf7750bd", + "typeString": "literal_string \"SignedSafeMath: division by zero\"" + }, + "value": "SignedSafeMath: division by zero" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ebc4d0068c2e029285c70894a725032247a74fcdc822ba305ea67dbddf7750bd", + "typeString": "literal_string \"SignedSafeMath: division by zero\"" + } + ], + "id": 2234, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1466:7:8", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2239, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1466:51:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2240, + "nodeType": "ExpressionStatement", + "src": "1466:51:8" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "1535:30:8", + "subExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2242, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2229, + "src": "1537:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 2244, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "1542:2:8", + "subExpression": { + "argumentTypes": null, + "hexValue": "31", + "id": 2243, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1543:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_1_by_1", + "typeString": "int_const -1" + } + }, + "src": "1537:7:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2246, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2227, + "src": "1548:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 2247, + "name": "_INT256_MIN", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2175, + "src": "1553:11:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1548:16:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1537:27:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2250, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "1536:29:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "5369676e6564536166654d6174683a206469766973696f6e206f766572666c6f77", + "id": 2252, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1567:35:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7bc0f3df013376568eb9f7cb8999198097051f79bdb4d07d83447767f5224b81", + "typeString": "literal_string \"SignedSafeMath: division overflow\"" + }, + "value": "SignedSafeMath: division overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7bc0f3df013376568eb9f7cb8999198097051f79bdb4d07d83447767f5224b81", + "typeString": "literal_string \"SignedSafeMath: division overflow\"" + } + ], + "id": 2241, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1527:7:8", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2253, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1527:76:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2254, + "nodeType": "ExpressionStatement", + "src": "1527:76:8" + }, + { + "assignments": [ + 2256 + ], + "declarations": [ + { + "constant": false, + "id": 2256, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2263, + "src": "1614:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2255, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1614:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2260, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2259, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2257, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2227, + "src": "1625:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 2258, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2229, + "src": "1629:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1625:5:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1614:16:8" + }, + { + "expression": { + "argumentTypes": null, + "id": 2261, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2256, + "src": "1648:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 2233, + "id": 2262, + "nodeType": "Return", + "src": "1641:8:8" + } + ] + }, + "documentation": { + "id": 2225, + "nodeType": "StructuredDocumentation", + "src": "938:449:8", + "text": " @dev Returns the integer division of two signed integers. Reverts on\n division by zero. The result is rounded towards zero.\n Counterpart to Solidity's `/` operator. Note: this function uses a\n `revert` opcode (which leaves remaining gas untouched) while Solidity\n uses an invalid opcode to revert (consuming all remaining gas).\n Requirements:\n - The divisor cannot be zero." + }, + "id": 2264, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "div", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2230, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2227, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2264, + "src": "1405:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2226, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1405:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2229, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2264, + "src": "1415:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2228, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1415:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1404:20:8" + }, + "returnParameters": { + "id": 2233, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2232, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2264, + "src": "1448:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2231, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1448:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1447:8:8" + }, + "scope": 2365, + "src": "1392:264:8", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2303, + "nodeType": "Block", + "src": "1959:149:8", + "statements": [ + { + "assignments": [ + 2275 + ], + "declarations": [ + { + "constant": false, + "id": 2275, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2303, + "src": "1969:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2274, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1969:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2279, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2278, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2276, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2267, + "src": "1980:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "argumentTypes": null, + "id": 2277, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2269, + "src": "1984:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "1980:5:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1969:16:8" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2287, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2281, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2269, + "src": "2004:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2282, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2009:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2004:6:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2286, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2284, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2275, + "src": "2014:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "argumentTypes": null, + "id": 2285, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2267, + "src": "2019:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "2014:6:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2004:16:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2288, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2003:18:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2289, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2269, + "src": "2026:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2290, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2030:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2026:5:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2292, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2275, + "src": "2035:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "id": 2293, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2267, + "src": "2039:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "2035:5:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2026:14:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2296, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2025:16:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2003:38:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77", + "id": 2298, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2043:38:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_dfe37ab0612d67daeef366062296f3ebcaf7e2cc3eb392bf66a6cb5a7bed3bcd", + "typeString": "literal_string \"SignedSafeMath: subtraction overflow\"" + }, + "value": "SignedSafeMath: subtraction overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_dfe37ab0612d67daeef366062296f3ebcaf7e2cc3eb392bf66a6cb5a7bed3bcd", + "typeString": "literal_string \"SignedSafeMath: subtraction overflow\"" + } + ], + "id": 2280, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1995:7:8", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1995:87:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2300, + "nodeType": "ExpressionStatement", + "src": "1995:87:8" + }, + { + "expression": { + "argumentTypes": null, + "id": 2301, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2275, + "src": "2100:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 2273, + "id": 2302, + "nodeType": "Return", + "src": "2093:8:8" + } + ] + }, + "documentation": { + "id": 2265, + "nodeType": "StructuredDocumentation", + "src": "1662:228:8", + "text": " @dev Returns the subtraction of two signed integers, reverting on\n overflow.\n Counterpart to Solidity's `-` operator.\n Requirements:\n - Subtraction cannot overflow." + }, + "id": 2304, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "sub", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2270, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2267, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2304, + "src": "1908:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2266, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1908:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2269, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2304, + "src": "1918:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2268, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1918:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1907:20:8" + }, + "returnParameters": { + "id": 2273, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2272, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2304, + "src": "1951:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2271, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "1951:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1950:8:8" + }, + "scope": 2365, + "src": "1895:213:8", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2343, + "nodeType": "Block", + "src": "2405:146:8", + "statements": [ + { + "assignments": [ + 2315 + ], + "declarations": [ + { + "constant": false, + "id": 2315, + "mutability": "mutable", + "name": "c", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2343, + "src": "2415:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2314, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2415:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2319, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2316, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2307, + "src": "2426:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "argumentTypes": null, + "id": 2317, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2309, + "src": "2430:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "2426:5:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2415:16:8" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2321, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2309, + "src": "2450:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2322, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2455:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2450:6:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2326, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2324, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2315, + "src": "2460:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "id": 2325, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2307, + "src": "2465:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "2460:6:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2450:16:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2328, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2449:18:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2335, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2329, + "name": "b", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2309, + "src": "2472:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2330, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2476:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2472:5:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2332, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2315, + "src": "2481:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "argumentTypes": null, + "id": 2333, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2307, + "src": "2485:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "src": "2481:5:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2472:14:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 2336, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2471:16:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "2449:38:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77", + "id": 2338, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2489:35:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_47c8d4a3974eee4fcf9925cffefc088ed6ac723b55fb65cf621edb1b7db7b8eb", + "typeString": "literal_string \"SignedSafeMath: addition overflow\"" + }, + "value": "SignedSafeMath: addition overflow" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_47c8d4a3974eee4fcf9925cffefc088ed6ac723b55fb65cf621edb1b7db7b8eb", + "typeString": "literal_string \"SignedSafeMath: addition overflow\"" + } + ], + "id": 2320, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2441:7:8", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2441:84:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2340, + "nodeType": "ExpressionStatement", + "src": "2441:84:8" + }, + { + "expression": { + "argumentTypes": null, + "id": 2341, + "name": "c", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2315, + "src": "2543:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "functionReturnParameters": 2313, + "id": 2342, + "nodeType": "Return", + "src": "2536:8:8" + } + ] + }, + "documentation": { + "id": 2305, + "nodeType": "StructuredDocumentation", + "src": "2114:222:8", + "text": " @dev Returns the addition of two signed integers, reverting on\n overflow.\n Counterpart to Solidity's `+` operator.\n Requirements:\n - Addition cannot overflow." + }, + "id": 2344, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "add", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2310, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2307, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2344, + "src": "2354:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2306, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2354:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2309, + "mutability": "mutable", + "name": "b", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2344, + "src": "2364:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2308, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2364:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2353:20:8" + }, + "returnParameters": { + "id": 2313, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2312, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2344, + "src": "2397:6:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2311, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2397:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2396:8:8" + }, + "scope": 2365, + "src": "2341:210:8", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2363, + "nodeType": "Block", + "src": "2618:74:8", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "id": 2354, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2352, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2346, + "src": "2636:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2353, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2641:1:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2636:6:8", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "496e7465676572203c2030", + "id": 2355, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2644:13:8", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_072bbf819d7fcc25efb63989aaa3ad43d444efad2d36a2598ffe45c4c4d00f7a", + "typeString": "literal_string \"Integer < 0\"" + }, + "value": "Integer < 0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_072bbf819d7fcc25efb63989aaa3ad43d444efad2d36a2598ffe45c4c4d00f7a", + "typeString": "literal_string \"Integer < 0\"" + } + ], + "id": 2351, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "2628:7:8", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2628:30:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2357, + "nodeType": "ExpressionStatement", + "src": "2628:30:8" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2360, + "name": "a", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2346, + "src": "2683:1:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + ], + "id": 2359, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2675:7:8", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 2358, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2675:7:8", + "typeDescriptions": { + "typeIdentifier": null, + "typeString": null + } + } + }, + "id": 2361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2675:10:8", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 2350, + "id": 2362, + "nodeType": "Return", + "src": "2668:17:8" + } + ] + }, + "documentation": null, + "id": 2364, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "toUInt256", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2347, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2346, + "mutability": "mutable", + "name": "a", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2364, + "src": "2576:8:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + }, + "typeName": { + "id": 2345, + "name": "int256", + "nodeType": "ElementaryTypeName", + "src": "2576:6:8", + "typeDescriptions": { + "typeIdentifier": "t_int256", + "typeString": "int256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2575:10:8" + }, + "returnParameters": { + "id": 2350, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2349, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2364, + "src": "2609:7:8", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2348, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2609:7:8", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2608:9:8" + }, + "scope": 2365, + "src": "2557:135:8", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + } + ], + "scope": 2366, + "src": "58:2636:8" + } + ], + "src": "33:2661:8" + }, + "id": 8 + }, + "contracts/mocks/ComplexRewarder.sol": { + "ast": { + "absolutePath": "contracts/mocks/ComplexRewarder.sol", + "exportedSymbols": { + "ComplexRewarder": [ + 2985 + ] + }, + "id": 2986, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 2367, + "literals": [ + "solidity", + "0.6", + ".12" + ], + "nodeType": "PragmaDirective", + "src": "33:23:9" + }, + { + "id": 2368, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "57:33:9" + }, + { + "absolutePath": "contracts/interfaces/IRewarder.sol", + "file": "../interfaces/IRewarder.sol", + "id": 2369, + "nodeType": "ImportDirective", + "scope": 2986, + "sourceUnit": 2168, + "src": "91:37:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol", + "file": "@boringcrypto/boring-solidity/contracts/libraries/BoringERC20.sol", + "id": 2370, + "nodeType": "ImportDirective", + "scope": 2986, + "sourceUnit": 554, + "src": "129:75:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol", + "file": "@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol", + "id": 2371, + "nodeType": "ImportDirective", + "scope": 2986, + "sourceUnit": 842, + "src": "205:74:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@boringcrypto/boring-solidity/contracts/BoringOwnable.sol", + "file": "@boringcrypto/boring-solidity/contracts/BoringOwnable.sol", + "id": 2372, + "nodeType": "ImportDirective", + "scope": 2986, + "sourceUnit": 272, + "src": "280:67:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "contracts/MasterChefV2.sol", + "file": "../MasterChefV2.sol", + "id": 2373, + "nodeType": "ImportDirective", + "scope": 2986, + "sourceUnit": 2092, + "src": "348:29:9", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 2375, + "name": "IRewarder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2167, + "src": "427:9:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IRewarder_$2167", + "typeString": "contract IRewarder" + } + }, + "id": 2376, + "nodeType": "InheritanceSpecifier", + "src": "427:9:9" + }, + { + "arguments": null, + "baseName": { + "contractScope": null, + "id": 2377, + "name": "BoringOwnable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 271, + "src": "439:13:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringOwnable_$271", + "typeString": "contract BoringOwnable" + } + }, + "id": 2378, + "nodeType": "InheritanceSpecifier", + "src": "439:13:9" + } + ], + "contractDependencies": [ + 152, + 271, + 2167 + ], + "contractKind": "contract", + "documentation": { + "id": 2374, + "nodeType": "StructuredDocumentation", + "src": "379:20:9", + "text": "@author @0xKeno" + }, + "fullyImplemented": true, + "id": 2985, + "linearizedBaseContracts": [ + 2985, + 271, + 152, + 2167 + ], + "name": "ComplexRewarder", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 2381, + "libraryName": { + "contractScope": null, + "id": 2379, + "name": "BoringMath", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 706, + "src": "464:10:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringMath_$706", + "typeString": "library BoringMath" + } + }, + "nodeType": "UsingForDirective", + "src": "458:29:9", + "typeName": { + "id": 2380, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "479:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 2384, + "libraryName": { + "contractScope": null, + "id": 2382, + "name": "BoringMath128", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 751, + "src": "498:13:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringMath128_$751", + "typeString": "library BoringMath128" + } + }, + "nodeType": "UsingForDirective", + "src": "492:32:9", + "typeName": { + "id": 2383, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "516:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + }, + { + "id": 2387, + "libraryName": { + "contractScope": null, + "id": 2385, + "name": "BoringERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 553, + "src": "535:11:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BoringERC20_$553", + "typeString": "library BoringERC20" + } + }, + "nodeType": "UsingForDirective", + "src": "529:29:9", + "typeName": { + "contractScope": null, + "id": 2386, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "551:6:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + }, + { + "constant": false, + "id": 2389, + "mutability": "immutable", + "name": "rewardToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2985, + "src": "564:36:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 2388, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "564:6:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "private" + }, + { + "canonicalName": "ComplexRewarder.UserInfo", + "id": 2394, + "members": [ + { + "constant": false, + "id": 2391, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2394, + "src": "792:14:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2390, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "792:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2393, + "mutability": "mutable", + "name": "rewardDebt", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2394, + "src": "816:18:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2392, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "816:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "UserInfo", + "nodeType": "StructDefinition", + "scope": 2985, + "src": "766:75:9", + "visibility": "public" + }, + { + "canonicalName": "ComplexRewarder.PoolInfo", + "id": 2401, + "members": [ + { + "constant": false, + "id": 2396, + "mutability": "mutable", + "name": "accSushiPerShare", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2401, + "src": "1055:24:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + }, + "typeName": { + "id": 2395, + "name": "uint128", + "nodeType": "ElementaryTypeName", + "src": "1055:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2398, + "mutability": "mutable", + "name": "lastRewardBlock", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2401, + "src": "1089:22:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2397, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1089:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2400, + "mutability": "mutable", + "name": "allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2401, + "src": "1121:17:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2399, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1121:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": null, + "visibility": "internal" + } + ], + "name": "PoolInfo", + "nodeType": "StructDefinition", + "scope": 2985, + "src": "1029:116:9", + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2402, + "nodeType": "StructuredDocumentation", + "src": "1151:30:9", + "text": "@notice Info of each pool." + }, + "functionSelector": "1526fe27", + "id": 2406, + "mutability": "mutable", + "name": "poolInfo", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2985, + "src": "1186:45:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PoolInfo_$2401_storage_$", + "typeString": "mapping(uint256 => struct ComplexRewarder.PoolInfo)" + }, + "typeName": { + "id": 2405, + "keyType": { + "id": 2403, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1195:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "1186:29:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PoolInfo_$2401_storage_$", + "typeString": "mapping(uint256 => struct ComplexRewarder.PoolInfo)" + }, + "valueType": { + "contractScope": null, + "id": 2404, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2401, + "src": "1206:8:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage_ptr", + "typeString": "struct ComplexRewarder.PoolInfo" + } + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "69883b4e", + "id": 2409, + "mutability": "mutable", + "name": "poolIds", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2985, + "src": "1238:24:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2407, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1238:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2408, + "length": null, + "nodeType": "ArrayTypeName", + "src": "1238:9:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2410, + "nodeType": "StructuredDocumentation", + "src": "1269:52:9", + "text": "@notice Info of each user that stakes LP tokens." + }, + "functionSelector": "93f1a40b", + "id": 2416, + "mutability": "mutable", + "name": "userInfo", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2985, + "src": "1326:66:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$2394_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct ComplexRewarder.UserInfo))" + }, + "typeName": { + "id": 2415, + "keyType": { + "id": 2411, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1335:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "1326:50:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$2394_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct ComplexRewarder.UserInfo))" + }, + "valueType": { + "id": 2414, + "keyType": { + "id": 2412, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1355:7:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "1346:29:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$2394_storage_$", + "typeString": "mapping(address => struct ComplexRewarder.UserInfo)" + }, + "valueType": { + "contractScope": null, + "id": 2413, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2394, + "src": "1366:8:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo" + } + } + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": false, + "documentation": { + "id": 2417, + "nodeType": "StructuredDocumentation", + "src": "1398:88:9", + "text": "@dev Total allocation points. Must be the sum of all allocation points in all pools." + }, + "id": 2419, + "mutability": "mutable", + "name": "totalAllocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2985, + "src": "1491:23:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2418, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1491:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "functionSelector": "4198709a", + "id": 2421, + "mutability": "mutable", + "name": "tokenPerBlock", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2985, + "src": "1521:28:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2420, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1521:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "public" + }, + { + "constant": true, + "id": 2424, + "mutability": "constant", + "name": "ACC_TOKEN_PRECISION", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2985, + "src": "1555:51:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2422, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1555:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "argumentTypes": null, + "hexValue": "31653132", + "id": 2423, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1602:4:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1000000000000_by_1", + "typeString": "int_const 1000000000000" + }, + "value": "1e12" + }, + "visibility": "private" + }, + { + "constant": false, + "id": 2426, + "mutability": "immutable", + "name": "MASTERCHEF_V2", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2985, + "src": "1613:39:9", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2425, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1613:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "private" + }, + { + "anonymous": false, + "documentation": null, + "id": 2436, + "name": "LogOnReward", + "nodeType": "EventDefinition", + "parameters": { + "id": 2435, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2428, + "indexed": true, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2436, + "src": "1677:20:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2427, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1677:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2430, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2436, + "src": "1699:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2429, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1699:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2432, + "indexed": false, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2436, + "src": "1720:14:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2431, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1720:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2434, + "indexed": true, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2436, + "src": "1736:18:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2433, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1736:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1676:79:9" + }, + "src": "1659:97:9" + }, + { + "anonymous": false, + "documentation": null, + "id": 2442, + "name": "LogPoolAddition", + "nodeType": "EventDefinition", + "parameters": { + "id": 2441, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2438, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2442, + "src": "1783:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2437, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1783:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2440, + "indexed": false, + "mutability": "mutable", + "name": "allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2442, + "src": "1804:18:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2439, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1804:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1782:41:9" + }, + "src": "1761:63:9" + }, + { + "anonymous": false, + "documentation": null, + "id": 2448, + "name": "LogSetPool", + "nodeType": "EventDefinition", + "parameters": { + "id": 2447, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2444, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2448, + "src": "1846:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2443, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1846:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2446, + "indexed": false, + "mutability": "mutable", + "name": "allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2448, + "src": "1867:18:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2445, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1867:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1845:41:9" + }, + "src": "1829:58:9" + }, + { + "anonymous": false, + "documentation": null, + "id": 2458, + "name": "LogUpdatePool", + "nodeType": "EventDefinition", + "parameters": { + "id": 2457, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2450, + "indexed": true, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2458, + "src": "1912:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2449, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1912:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2452, + "indexed": false, + "mutability": "mutable", + "name": "lastRewardBlock", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2458, + "src": "1933:22:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 2451, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1933:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2454, + "indexed": false, + "mutability": "mutable", + "name": "lpSupply", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2458, + "src": "1957:16:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2453, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1957:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2456, + "indexed": false, + "mutability": "mutable", + "name": "accSushiPerShare", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2458, + "src": "1975:24:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2455, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1975:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "1911:89:9" + }, + "src": "1892:109:9" + }, + { + "anonymous": false, + "documentation": null, + "id": 2460, + "name": "LogInit", + "nodeType": "EventDefinition", + "parameters": { + "id": 2459, + "nodeType": "ParameterList", + "parameters": [], + "src": "2019:2:9" + }, + "src": "2006:16:9" + }, + { + "body": { + "id": 2481, + "nodeType": "Block", + "src": "2117:123:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 2471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2469, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2389, + "src": "2127:11:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 2470, + "name": "_rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2462, + "src": "2141:12:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "src": "2127:26:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2472, + "nodeType": "ExpressionStatement", + "src": "2127:26:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2473, + "name": "tokenPerBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2421, + "src": "2163:13:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 2474, + "name": "_tokenPerBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2464, + "src": "2179:14:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2163:30:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2476, + "nodeType": "ExpressionStatement", + "src": "2163:30:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2479, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2477, + "name": "MASTERCHEF_V2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2426, + "src": "2203:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 2478, + "name": "_MASTERCHEF_V2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2466, + "src": "2219:14:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2203:30:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 2480, + "nodeType": "ExpressionStatement", + "src": "2203:30:9" + } + ] + }, + "documentation": null, + "id": 2482, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2467, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2462, + "mutability": "mutable", + "name": "_rewardToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2482, + "src": "2041:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + }, + "typeName": { + "contractScope": null, + "id": 2461, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "2041:6:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2464, + "mutability": "mutable", + "name": "_tokenPerBlock", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2482, + "src": "2062:22:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2463, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2062:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2466, + "mutability": "mutable", + "name": "_MASTERCHEF_V2", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2482, + "src": "2086:22:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2465, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2086:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2040:69:9" + }, + "returnParameters": { + "id": 2468, + "nodeType": "ParameterList", + "parameters": [], + "src": "2117:0:9" + }, + "scope": 2985, + "src": "2028:212:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "baseFunctions": [ + 2151 + ], + "body": { + "id": 2569, + "nodeType": "Block", + "src": "2364:553:9", + "statements": [ + { + "assignments": [ + 2499 + ], + "declarations": [ + { + "constant": false, + "id": 2499, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2569, + "src": "2374:20:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 2498, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2401, + "src": "2374:8:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage_ptr", + "typeString": "struct ComplexRewarder.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2503, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2501, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2484, + "src": "2408:3:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2500, + "name": "updatePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2984, + "src": "2397:10:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_struct$_PoolInfo_$2401_memory_ptr_$", + "typeString": "function (uint256) returns (struct ComplexRewarder.PoolInfo memory)" + } + }, + "id": 2502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2397:15:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2374:38:9" + }, + { + "assignments": [ + 2505 + ], + "declarations": [ + { + "constant": false, + "id": 2505, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2569, + "src": "2422:21:9", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo" + }, + "typeName": { + "contractScope": null, + "id": 2504, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2394, + "src": "2422:8:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2511, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2506, + "name": "userInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2416, + "src": "2446:8:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$2394_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct ComplexRewarder.UserInfo storage ref))" + } + }, + "id": 2508, + "indexExpression": { + "argumentTypes": null, + "id": 2507, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2484, + "src": "2455:3:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2446:13:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$2394_storage_$", + "typeString": "mapping(address => struct ComplexRewarder.UserInfo storage ref)" + } + }, + "id": 2510, + "indexExpression": { + "argumentTypes": null, + "id": 2509, + "name": "_user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2486, + "src": "2460:5:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2446:20:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage", + "typeString": "struct ComplexRewarder.UserInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2422:44:9" + }, + { + "assignments": [ + 2513 + ], + "declarations": [ + { + "constant": false, + "id": 2513, + "mutability": "mutable", + "name": "pending", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2569, + "src": "2476:15:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2512, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2476:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2514, + "initialValue": null, + "nodeType": "VariableDeclarationStatement", + "src": "2476:15:9" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2518, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2515, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2505, + "src": "2505:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo storage pointer" + } + }, + "id": 2516, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 2391, + "src": "2505:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2517, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2519:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2505:15:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 2543, + "nodeType": "IfStatement", + "src": "2501:244:9", + "trueBody": { + "id": 2542, + "nodeType": "Block", + "src": "2522:223:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 2533, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2519, + "name": "pending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2513, + "src": "2536:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2530, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2505, + "src": "2650:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo storage pointer" + } + }, + "id": 2531, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 2393, + "src": "2650:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2523, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2499, + "src": "2579:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2524, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 2396, + "src": "2579:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2520, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2505, + "src": "2563:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo storage pointer" + } + }, + "id": 2521, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 2391, + "src": "2563:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "2563:15:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2563:38:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 2526, + "name": "ACC_TOKEN_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2424, + "src": "2604:19:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2563:60:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 2528, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "2562:62:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2529, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "2562:66:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2532, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2562:121:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2536:147:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2534, + "nodeType": "ExpressionStatement", + "src": "2536:147:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2538, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2488, + "src": "2722:2:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2539, + "name": "pending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2513, + "src": "2726:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2535, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2389, + "src": "2697:11:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 503, + "src": "2697:24:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$337_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$337_$", + "typeString": "function (contract IERC20,address,uint256)" + } + }, + "id": 2540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2697:37:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2541, + "nodeType": "ExpressionStatement", + "src": "2697:37:9" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "id": 2548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2544, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2505, + "src": "2754:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo storage pointer" + } + }, + "id": 2546, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 2391, + "src": "2754:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 2547, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2492, + "src": "2768:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2754:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2549, + "nodeType": "ExpressionStatement", + "src": "2754:21:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2550, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2505, + "src": "2785:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo storage pointer" + } + }, + "id": 2552, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 2393, + "src": "2785:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2555, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2499, + "src": "2815:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2556, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 2396, + "src": "2815:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "argumentTypes": null, + "id": 2553, + "name": "lpToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2492, + "src": "2803:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "2803:11:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2803:34:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 2558, + "name": "ACC_TOKEN_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2424, + "src": "2840:19:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2803:56:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2785:74:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2561, + "nodeType": "ExpressionStatement", + "src": "2785:74:9" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2563, + "name": "_user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2486, + "src": "2886:5:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "argumentTypes": null, + "id": 2564, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2484, + "src": "2893:3:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2565, + "name": "pending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2513, + "src": "2898:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2566, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2488, + "src": "2907:2:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2562, + "name": "LogOnReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2436, + "src": "2874:11:9", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (address,uint256,uint256,address)" + } + }, + "id": 2567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2874:36:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2568, + "nodeType": "EmitStatement", + "src": "2869:41:9" + } + ] + }, + "documentation": null, + "functionSelector": "8bf63742", + "id": 2570, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": null, + "id": 2495, + "modifierName": { + "argumentTypes": null, + "id": 2494, + "name": "onlyMCV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2640, + "src": "2337:8:9", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "2337:8:9" + } + ], + "name": "onSushiReward", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2496, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2346:8:9" + }, + "parameters": { + "id": 2493, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2484, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2570, + "src": "2271:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2483, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2271:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2486, + "mutability": "mutable", + "name": "_user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2570, + "src": "2284:13:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2485, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2284:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2488, + "mutability": "mutable", + "name": "to", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2570, + "src": "2299:10:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2487, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2299:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2490, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2570, + "src": "2311:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2489, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2311:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2492, + "mutability": "mutable", + "name": "lpToken", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2570, + "src": "2320:15:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2491, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2320:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2270:66:9" + }, + "returnParameters": { + "id": 2497, + "nodeType": "ParameterList", + "parameters": [], + "src": "2364:0:9" + }, + "scope": 2985, + "src": "2247:670:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "baseFunctions": [ + 2166 + ], + "body": { + "id": 2627, + "nodeType": "Block", + "src": "3075:267:9", + "statements": [ + { + "assignments": [ + 2589 + ], + "declarations": [ + { + "constant": false, + "id": 2589, + "mutability": "mutable", + "name": "_rewardTokens", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2627, + "src": "3085:29:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "contractScope": null, + "id": 2587, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "3085:6:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2588, + "length": null, + "nodeType": "ArrayTypeName", + "src": "3085:8:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2595, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "31", + "id": 2593, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3130:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "id": 2592, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "3117:12:9", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_contract$_IERC20_$337_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (contract IERC20[] memory)" + }, + "typeName": { + "baseType": { + "contractScope": null, + "id": 2590, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "3121:6:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2591, + "length": null, + "nodeType": "ArrayTypeName", + "src": "3121:8:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + } + }, + "id": 2594, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3117:15:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3085:47:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2601, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2596, + "name": "_rewardTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2589, + "src": "3142:13:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + "id": 2598, + "indexExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2597, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3156:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3142:16:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "id": 2599, + "name": "rewardToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2389, + "src": "3162:11:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + } + ], + "id": 2600, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3161:13:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "src": "3142:32:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2602, + "nodeType": "ExpressionStatement", + "src": "3142:32:9" + }, + { + "assignments": [ + 2607 + ], + "declarations": [ + { + "constant": false, + "id": 2607, + "mutability": "mutable", + "name": "_rewardAmounts", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2627, + "src": "3184:31:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2605, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3184:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2606, + "length": null, + "nodeType": "ArrayTypeName", + "src": "3184:9:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2613, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "hexValue": "31", + "id": 2611, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3232:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + } + ], + "id": 2610, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "3218:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (uint256[] memory)" + }, + "typeName": { + "baseType": { + "id": 2608, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3222:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2609, + "length": null, + "nodeType": "ArrayTypeName", + "src": "3222:9:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 2612, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3218:16:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3184:50:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2614, + "name": "_rewardAmounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2607, + "src": "3244:14:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 2616, + "indexExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2615, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3259:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3244:17:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2618, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2572, + "src": "3277:3:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2619, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2574, + "src": "3282:4:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2617, + "name": "pendingToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2850, + "src": "3264:12:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$", + "typeString": "function (uint256,address) view returns (uint256)" + } + }, + "id": 2620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3264:23:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3244:43:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2622, + "nodeType": "ExpressionStatement", + "src": "3244:43:9" + }, + { + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "id": 2623, + "name": "_rewardTokens", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2589, + "src": "3305:13:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_memory_ptr", + "typeString": "contract IERC20[] memory" + } + }, + { + "argumentTypes": null, + "id": 2624, + "name": "_rewardAmounts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2607, + "src": "3320:14:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 2625, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3304:31:9", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_array$_t_contract$_IERC20_$337_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(contract IERC20[] memory,uint256[] memory)" + } + }, + "functionReturnParameters": 2585, + "id": 2626, + "nodeType": "Return", + "src": "3297:38:9" + } + ] + }, + "documentation": null, + "functionSelector": "d63b3c49", + "id": 2628, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "pendingTokens", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 2578, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2986:8:9" + }, + "parameters": { + "id": 2577, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2572, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2628, + "src": "2950:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2571, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2950:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2574, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2628, + "src": "2963:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2573, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2963:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2576, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2628, + "src": "2977:7:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2575, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2977:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "2949:36:9" + }, + "returnParameters": { + "id": 2585, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2581, + "mutability": "mutable", + "name": "rewardTokens", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2628, + "src": "3013:28:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_memory_ptr", + "typeString": "contract IERC20[]" + }, + "typeName": { + "baseType": { + "contractScope": null, + "id": 2579, + "name": "IERC20", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 337, + "src": "3013:6:9", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2580, + "length": null, + "nodeType": "ArrayTypeName", + "src": "3013:8:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_contract$_IERC20_$337_$dyn_storage_ptr", + "typeString": "contract IERC20[]" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2584, + "mutability": "mutable", + "name": "rewardAmounts", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2628, + "src": "3043:30:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2582, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3043:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2583, + "length": null, + "nodeType": "ArrayTypeName", + "src": "3043:9:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3012:62:9" + }, + "scope": 2985, + "src": "2927:415:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 2639, + "nodeType": "Block", + "src": "3366:135:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 2634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2631, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "3397:3:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 2632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3397:10:9", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "id": 2633, + "name": "MASTERCHEF_V2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2426, + "src": "3411:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3397:27:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "4f6e6c79204d4356322063616e2063616c6c20746869732066756e6374696f6e2e", + "id": 2635, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3438:35:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3119d70f54e65f7fc05dc3fff78f1ae1d0c82eaf50b477c40260718556fca1cd", + "typeString": "literal_string \"Only MCV2 can call this function.\"" + }, + "value": "Only MCV2 can call this function." + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_3119d70f54e65f7fc05dc3fff78f1ae1d0c82eaf50b477c40260718556fca1cd", + "typeString": "literal_string \"Only MCV2 can call this function.\"" + } + ], + "id": 2630, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3376:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3376:107:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2637, + "nodeType": "ExpressionStatement", + "src": "3376:107:9" + }, + { + "id": 2638, + "nodeType": "PlaceholderStatement", + "src": "3493:1:9" + } + ] + }, + "documentation": null, + "id": 2640, + "name": "onlyMCV2", + "nodeType": "ModifierDefinition", + "overrides": null, + "parameters": { + "id": 2629, + "nodeType": "ParameterList", + "parameters": [], + "src": "3366:0:9" + }, + "src": "3348:153:9", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 2651, + "nodeType": "Block", + "src": "3615:39:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 2649, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2646, + "name": "pools", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2644, + "src": "3625:5:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2647, + "name": "poolIds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2409, + "src": "3633:7:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage", + "typeString": "uint256[] storage ref" + } + }, + "id": 2648, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "3633:14:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3625:22:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2650, + "nodeType": "ExpressionStatement", + "src": "3625:22:9" + } + ] + }, + "documentation": { + "id": 2641, + "nodeType": "StructuredDocumentation", + "src": "3507:45:9", + "text": "@notice Returns the number of MCV2 pools." + }, + "functionSelector": "081e3eda", + "id": 2652, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "poolLength", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2642, + "nodeType": "ParameterList", + "parameters": [], + "src": "3576:2:9" + }, + "returnParameters": { + "id": 2645, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2644, + "mutability": "mutable", + "name": "pools", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2652, + "src": "3600:13:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2643, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3600:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3599:15:9" + }, + "scope": 2985, + "src": "3557:97:9", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2709, + "nodeType": "Block", + "src": "3967:444:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 2668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2663, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2406, + "src": "3985:8:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PoolInfo_$2401_storage_$", + "typeString": "mapping(uint256 => struct ComplexRewarder.PoolInfo storage ref)" + } + }, + "id": 2665, + "indexExpression": { + "argumentTypes": null, + "id": 2664, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2657, + "src": "3994:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3985:14:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage", + "typeString": "struct ComplexRewarder.PoolInfo storage ref" + } + }, + "id": 2666, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 2398, + "src": "3985:30:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2667, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4019:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3985:35:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "argumentTypes": null, + "hexValue": "506f6f6c20616c726561647920657869737473", + "id": 2669, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4022:21:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_12db6f275306e49a55f39c487439bf20013b2e7f9ac363f83c1b47cbc0b35b95", + "typeString": "literal_string \"Pool already exists\"" + }, + "value": "Pool already exists" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_12db6f275306e49a55f39c487439bf20013b2e7f9ac363f83c1b47cbc0b35b95", + "typeString": "literal_string \"Pool already exists\"" + } + ], + "id": 2662, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "3977:7:9", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 2670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "3977:67:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2671, + "nodeType": "ExpressionStatement", + "src": "3977:67:9" + }, + { + "assignments": [ + 2673 + ], + "declarations": [ + { + "constant": false, + "id": 2673, + "mutability": "mutable", + "name": "lastRewardBlock", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2709, + "src": "4054:23:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2672, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4054:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2676, + "initialValue": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2674, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "4080:5:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 2675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4080:12:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4054:38:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2682, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2677, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2419, + "src": "4102:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2680, + "name": "allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2655, + "src": "4140:10:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2678, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2419, + "src": "4120:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 577, + "src": "4120:19:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4120:31:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4102:49:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2683, + "nodeType": "ExpressionStatement", + "src": "4102:49:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2696, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2684, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2406, + "src": "4162:8:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PoolInfo_$2401_storage_$", + "typeString": "mapping(uint256 => struct ComplexRewarder.PoolInfo storage ref)" + } + }, + "id": 2686, + "indexExpression": { + "argumentTypes": null, + "id": 2685, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2657, + "src": "4171:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4162:14:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage", + "typeString": "struct ComplexRewarder.PoolInfo storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "id": 2688, + "name": "allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2655, + "src": "4214:10:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to64", + "nodeType": "MemberAccess", + "referencedDeclaration": 679, + "src": "4214:15:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 2690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4214:17:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "id": 2691, + "name": "lastRewardBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2673, + "src": "4262:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2692, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to64", + "nodeType": "MemberAccess", + "referencedDeclaration": 679, + "src": "4262:20:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 2693, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4262:22:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "argumentTypes": null, + "hexValue": "30", + "id": 2694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4316:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 2687, + "name": "PoolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2401, + "src": "4179:8:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_PoolInfo_$2401_storage_ptr_$", + "typeString": "type(struct ComplexRewarder.PoolInfo storage pointer)" + } + }, + "id": 2695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "names": [ + "allocPoint", + "lastRewardBlock", + "accSushiPerShare" + ], + "nodeType": "FunctionCall", + "src": "4179:149:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "src": "4162:166:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage", + "typeString": "struct ComplexRewarder.PoolInfo storage ref" + } + }, + "id": 2697, + "nodeType": "ExpressionStatement", + "src": "4162:166:9" + }, + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2701, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2657, + "src": "4351:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2698, + "name": "poolIds", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2409, + "src": "4338:7:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage", + "typeString": "uint256[] storage ref" + } + }, + "id": 2700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "push", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "4338:12:9", + "typeDescriptions": { + "typeIdentifier": "t_function_arraypush_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 2702, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4338:18:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2703, + "nodeType": "ExpressionStatement", + "src": "4338:18:9" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2705, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2657, + "src": "4387:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2706, + "name": "allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2655, + "src": "4393:10:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2704, + "name": "LogPoolAddition", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2442, + "src": "4371:15:9", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 2707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4371:33:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2708, + "nodeType": "EmitStatement", + "src": "4366:38:9" + } + ] + }, + "documentation": { + "id": 2653, + "nodeType": "StructuredDocumentation", + "src": "3660:238:9", + "text": "@notice Add a new LP to the pool. Can only be called by the owner.\n DO NOT add the same LP token more than once. Rewards will be messed up if you do.\n @param allocPoint AP of the new pool.\n @param _pid Pid on MCV2" + }, + "functionSelector": "771602f7", + "id": 2710, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": null, + "id": 2660, + "modifierName": { + "argumentTypes": null, + "id": 2659, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 270, + "src": "3957:9:9", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "3957:9:9" + } + ], + "name": "add", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2658, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2655, + "mutability": "mutable", + "name": "allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2710, + "src": "3916:18:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2654, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3916:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2657, + "mutability": "mutable", + "name": "_pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2710, + "src": "3936:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2656, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3936:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "3915:34:9" + }, + "returnParameters": { + "id": 2661, + "nodeType": "ParameterList", + "parameters": [], + "src": "3967:0:9" + }, + "scope": 2985, + "src": "3903:508:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2747, + "nodeType": "Block", + "src": "4710:198:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 2731, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2720, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2419, + "src": "4720:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2729, + "name": "_allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2715, + "src": "4789:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2723, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2406, + "src": "4758:8:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PoolInfo_$2401_storage_$", + "typeString": "mapping(uint256 => struct ComplexRewarder.PoolInfo storage ref)" + } + }, + "id": 2725, + "indexExpression": { + "argumentTypes": null, + "id": 2724, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2713, + "src": "4767:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4758:14:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage", + "typeString": "struct ComplexRewarder.PoolInfo storage ref" + } + }, + "id": 2726, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "allocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 2400, + "src": "4758:25:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "id": 2721, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2419, + "src": "4738:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2722, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "4738:19:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4738:46:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2728, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 577, + "src": "4738:50:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4738:63:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4720:81:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2732, + "nodeType": "ExpressionStatement", + "src": "4720:81:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2733, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2406, + "src": "4811:8:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PoolInfo_$2401_storage_$", + "typeString": "mapping(uint256 => struct ComplexRewarder.PoolInfo storage ref)" + } + }, + "id": 2735, + "indexExpression": { + "argumentTypes": null, + "id": 2734, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2713, + "src": "4820:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4811:14:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage", + "typeString": "struct ComplexRewarder.PoolInfo storage ref" + } + }, + "id": 2736, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "allocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 2400, + "src": "4811:25:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "id": 2737, + "name": "_allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2715, + "src": "4839:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2738, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to64", + "nodeType": "MemberAccess", + "referencedDeclaration": 679, + "src": "4839:16:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 2739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4839:18:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "4811:46:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 2741, + "nodeType": "ExpressionStatement", + "src": "4811:46:9" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2743, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2713, + "src": "4883:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "id": 2744, + "name": "_allocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2715, + "src": "4889:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2742, + "name": "LogSetPool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2448, + "src": "4872:10:9", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 2745, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4872:29:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2746, + "nodeType": "EmitStatement", + "src": "4867:34:9" + } + ] + }, + "documentation": { + "id": 2711, + "nodeType": "StructuredDocumentation", + "src": "4417:223:9", + "text": "@notice Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner.\n @param _pid The index of the pool. See `poolInfo`.\n @param _allocPoint New AP of the pool." + }, + "functionSelector": "1ab06ee5", + "id": 2748, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": null, + "id": 2718, + "modifierName": { + "argumentTypes": null, + "id": 2717, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 270, + "src": "4700:9:9", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4700:9:9" + } + ], + "name": "set", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2716, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2713, + "mutability": "mutable", + "name": "_pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2748, + "src": "4658:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2712, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4658:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2715, + "mutability": "mutable", + "name": "_allocPoint", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2748, + "src": "4672:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2714, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4672:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "4657:35:9" + }, + "returnParameters": { + "id": 2719, + "nodeType": "ParameterList", + "parameters": [], + "src": "4710:0:9" + }, + "scope": 2985, + "src": "4645:263:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2849, + "nodeType": "Block", + "src": "5206:709:9", + "statements": [ + { + "assignments": [ + 2759 + ], + "declarations": [ + { + "constant": false, + "id": 2759, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2849, + "src": "5216:20:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 2758, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2401, + "src": "5216:8:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage_ptr", + "typeString": "struct ComplexRewarder.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2763, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2760, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2406, + "src": "5239:8:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PoolInfo_$2401_storage_$", + "typeString": "mapping(uint256 => struct ComplexRewarder.PoolInfo storage ref)" + } + }, + "id": 2762, + "indexExpression": { + "argumentTypes": null, + "id": 2761, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2751, + "src": "5248:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5239:14:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage", + "typeString": "struct ComplexRewarder.PoolInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5216:37:9" + }, + { + "assignments": [ + 2765 + ], + "declarations": [ + { + "constant": false, + "id": 2765, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2849, + "src": "5263:21:9", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo" + }, + "typeName": { + "contractScope": null, + "id": 2764, + "name": "UserInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2394, + "src": "5263:8:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2771, + "initialValue": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2766, + "name": "userInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2416, + "src": "5287:8:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_UserInfo_$2394_storage_$_$", + "typeString": "mapping(uint256 => mapping(address => struct ComplexRewarder.UserInfo storage ref))" + } + }, + "id": 2768, + "indexExpression": { + "argumentTypes": null, + "id": 2767, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2751, + "src": "5296:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5287:14:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UserInfo_$2394_storage_$", + "typeString": "mapping(address => struct ComplexRewarder.UserInfo storage ref)" + } + }, + "id": 2770, + "indexExpression": { + "argumentTypes": null, + "id": 2769, + "name": "_user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2753, + "src": "5302:5:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5287:21:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage", + "typeString": "struct ComplexRewarder.UserInfo storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5263:45:9" + }, + { + "assignments": [ + 2773 + ], + "declarations": [ + { + "constant": false, + "id": 2773, + "mutability": "mutable", + "name": "accSushiPerShare", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2849, + "src": "5318:24:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2772, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5318:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2776, + "initialValue": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2774, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2759, + "src": "5345:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2775, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 2396, + "src": "5345:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5318:48:9" + }, + { + "assignments": [ + 2778 + ], + "declarations": [ + { + "constant": false, + "id": 2778, + "mutability": "mutable", + "name": "lpSupply", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2849, + "src": "5376:16:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2777, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5376:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2788, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2786, + "name": "MASTERCHEF_V2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2426, + "src": "5447:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2783, + "name": "_pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2751, + "src": "5431:4:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2780, + "name": "MASTERCHEF_V2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2426, + "src": "5408:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2779, + "name": "MasterChefV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2091, + "src": "5395:12:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_MasterChefV2_$2091_$", + "typeString": "type(contract MasterChefV2)" + } + }, + "id": 2781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5395:27:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + }, + "id": 2782, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "lpToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 906, + "src": "5395:35:9", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_contract$_IERC20_$337_$", + "typeString": "function (uint256) view external returns (contract IERC20)" + } + }, + "id": 2784, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5395:41:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2785, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 285, + "src": "5395:51:9", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 2787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5395:66:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5376:85:9" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 2797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2789, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5475:5:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 2790, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5475:12:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2791, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2759, + "src": "5490:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2792, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 2398, + "src": "5490:20:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "5475:35:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2796, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2794, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2778, + "src": "5514:8:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2795, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5526:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5514:13:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5475:52:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 2833, + "nodeType": "IfStatement", + "src": "5471:340:9", + "trueBody": { + "id": 2832, + "nodeType": "Block", + "src": "5529:282:9", + "statements": [ + { + "assignments": [ + 2799 + ], + "declarations": [ + { + "constant": false, + "id": 2799, + "mutability": "mutable", + "name": "blocks", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2832, + "src": "5543:14:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2798, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5543:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2806, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2803, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2759, + "src": "5577:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2804, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 2398, + "src": "5577:20:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2800, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5560:5:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 2801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "5560:12:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2802, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "5560:16:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2805, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5560:38:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5543:55:9" + }, + { + "assignments": [ + 2808 + ], + "declarations": [ + { + "constant": false, + "id": 2808, + "mutability": "mutable", + "name": "sushiReward", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2832, + "src": "5612:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2807, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5612:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2819, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2814, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2759, + "src": "5664:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2815, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "allocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 2400, + "src": "5664:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2811, + "name": "tokenPerBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2421, + "src": "5645:13:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2809, + "name": "blocks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2799, + "src": "5634:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2810, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "5634:10:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2812, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5634:25:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "5634:29:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2816, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5634:46:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 2817, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2419, + "src": "5683:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5634:64:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5612:86:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2830, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2820, + "name": "accSushiPerShare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "5712:16:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2825, + "name": "ACC_TOKEN_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2424, + "src": "5768:19:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2823, + "name": "sushiReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2808, + "src": "5752:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2824, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "5752:15:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2826, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5752:36:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 2827, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2778, + "src": "5791:8:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5752:47:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2821, + "name": "accSushiPerShare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "5731:16:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2822, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 577, + "src": "5731:20:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5731:69:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5712:88:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2831, + "nodeType": "ExpressionStatement", + "src": "5712:88:9" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "id": 2847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2834, + "name": "pending", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2756, + "src": "5820:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2844, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2765, + "src": "5892:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo storage pointer" + } + }, + "id": 2845, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "rewardDebt", + "nodeType": "MemberAccess", + "referencedDeclaration": 2393, + "src": "5892:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2838, + "name": "accSushiPerShare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2773, + "src": "5847:16:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2835, + "name": "user", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2765, + "src": "5831:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UserInfo_$2394_storage_ptr", + "typeString": "struct ComplexRewarder.UserInfo storage pointer" + } + }, + "id": 2836, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 2391, + "src": "5831:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "5831:15:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5831:33:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 2840, + "name": "ACC_TOKEN_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2424, + "src": "5867:19:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5831:55:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 2842, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5830:57:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "5830:61:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2846, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5830:78:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5820:88:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2848, + "nodeType": "ExpressionStatement", + "src": "5820:88:9" + } + ] + }, + "documentation": { + "id": 2749, + "nodeType": "StructuredDocumentation", + "src": "4914:198:9", + "text": "@notice View function to see pending Token\n @param _pid The index of the pool. See `poolInfo`.\n @param _user Address of user.\n @return pending SUSHI reward for a given user." + }, + "functionSelector": "48e43af4", + "id": 2850, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "pendingToken", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2754, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2751, + "mutability": "mutable", + "name": "_pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2850, + "src": "5139:12:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2750, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5139:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + }, + { + "constant": false, + "id": 2753, + "mutability": "mutable", + "name": "_user", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2850, + "src": "5153:13:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 2752, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5153:7:9", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5138:29:9" + }, + "returnParameters": { + "id": 2757, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2756, + "mutability": "mutable", + "name": "pending", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2850, + "src": "5189:15:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2755, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5189:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "5188:17:9" + }, + "scope": 2985, + "src": "5117:798:9", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 2880, + "nodeType": "Block", + "src": "6152:129:9", + "statements": [ + { + "assignments": [ + 2858 + ], + "declarations": [ + { + "constant": false, + "id": 2858, + "mutability": "mutable", + "name": "len", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2880, + "src": "6162:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2857, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6162:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2861, + "initialValue": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2859, + "name": "pids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2854, + "src": "6176:4:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 2860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "6176:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6162:25:9" + }, + { + "body": { + "id": 2878, + "nodeType": "Block", + "src": "6231:44:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2873, + "name": "pids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2854, + "src": "6256:4:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 2875, + "indexExpression": { + "argumentTypes": null, + "id": 2874, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2863, + "src": "6261:1:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6256:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 2872, + "name": "updatePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2984, + "src": "6245:10:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_struct$_PoolInfo_$2401_memory_ptr_$", + "typeString": "function (uint256) returns (struct ComplexRewarder.PoolInfo memory)" + } + }, + "id": 2876, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6245:19:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2877, + "nodeType": "ExpressionStatement", + "src": "6245:19:9" + } + ] + }, + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2866, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2863, + "src": "6217:1:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "argumentTypes": null, + "id": 2867, + "name": "len", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2858, + "src": "6221:3:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6217:7:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 2879, + "initializationExpression": { + "assignments": [ + 2863 + ], + "declarations": [ + { + "constant": false, + "id": 2863, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2879, + "src": "6202:9:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2862, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6202:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2865, + "initialValue": { + "argumentTypes": null, + "hexValue": "30", + "id": 2864, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6214:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "6202:13:9" + }, + "loopExpression": { + "expression": { + "argumentTypes": null, + "id": 2870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "6226:3:9", + "subExpression": { + "argumentTypes": null, + "id": 2869, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2863, + "src": "6228:1:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2871, + "nodeType": "ExpressionStatement", + "src": "6226:3:9" + }, + "nodeType": "ForStatement", + "src": "6197:78:9" + } + ] + }, + "documentation": { + "id": 2851, + "nodeType": "StructuredDocumentation", + "src": "5921:167:9", + "text": "@notice Update reward variables for all pools. Be careful of gas spending!\n @param pids Pool IDs of all to be updated. Make sure to update all active pools." + }, + "functionSelector": "57a5b58c", + "id": 2881, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "massUpdatePools", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2855, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2854, + "mutability": "mutable", + "name": "pids", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2881, + "src": "6118:23:9", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 2852, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6118:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2853, + "length": null, + "nodeType": "ArrayTypeName", + "src": "6118:9:9", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6117:25:9" + }, + "returnParameters": { + "id": 2856, + "nodeType": "ParameterList", + "parameters": [], + "src": "6152:0:9" + }, + "scope": 2985, + "src": "6093:188:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 2983, + "nodeType": "Block", + "src": "6531:728:9", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 2893, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 2889, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "6541:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2890, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2406, + "src": "6548:8:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PoolInfo_$2401_storage_$", + "typeString": "mapping(uint256 => struct ComplexRewarder.PoolInfo storage ref)" + } + }, + "id": 2892, + "indexExpression": { + "argumentTypes": null, + "id": 2891, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2884, + "src": "6557:3:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6548:13:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage", + "typeString": "struct ComplexRewarder.PoolInfo storage ref" + } + }, + "src": "6541:20:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2894, + "nodeType": "ExpressionStatement", + "src": "6541:20:9" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2895, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "6575:5:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 2896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "6575:12:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2897, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "6590:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2898, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 2398, + "src": "6590:20:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "6575:35:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 2982, + "nodeType": "IfStatement", + "src": "6571:682:9", + "trueBody": { + "id": 2981, + "nodeType": "Block", + "src": "6612:641:9", + "statements": [ + { + "assignments": [ + 2901 + ], + "declarations": [ + { + "constant": false, + "id": 2901, + "mutability": "mutable", + "name": "lpSupply", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2981, + "src": "6626:16:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2900, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6626:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2911, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2909, + "name": "MASTERCHEF_V2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2426, + "src": "6696:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2906, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2884, + "src": "6681:3:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2903, + "name": "MASTERCHEF_V2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2426, + "src": "6658:13:9", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 2902, + "name": "MasterChefV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2091, + "src": "6645:12:9", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_MasterChefV2_$2091_$", + "typeString": "type(contract MasterChefV2)" + } + }, + "id": 2904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6645:27:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_MasterChefV2_$2091", + "typeString": "contract MasterChefV2" + } + }, + "id": 2905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "lpToken", + "nodeType": "MemberAccess", + "referencedDeclaration": 906, + "src": "6645:35:9", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_contract$_IERC20_$337_$", + "typeString": "function (uint256) view external returns (contract IERC20)" + } + }, + "id": 2907, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6645:40:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20_$337", + "typeString": "contract IERC20" + } + }, + "id": 2908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 285, + "src": "6645:50:9", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 2910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6645:65:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6626:84:9" + }, + { + "condition": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "id": 2912, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2901, + "src": "6729:8:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "argumentTypes": null, + "hexValue": "30", + "id": 2913, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6740:1:9", + "subdenomination": null, + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6729:12:9", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 2956, + "nodeType": "IfStatement", + "src": "6725:336:9", + "trueBody": { + "id": 2955, + "nodeType": "Block", + "src": "6743:318:9", + "statements": [ + { + "assignments": [ + 2916 + ], + "declarations": [ + { + "constant": false, + "id": 2916, + "mutability": "mutable", + "name": "blocks", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2955, + "src": "6761:14:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2915, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6761:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2923, + "initialValue": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2920, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "6795:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2921, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 2398, + "src": "6795:20:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2917, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "6778:5:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 2918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "6778:12:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 599, + "src": "6778:16:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6778:38:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6761:55:9" + }, + { + "assignments": [ + 2925 + ], + "declarations": [ + { + "constant": false, + "id": 2925, + "mutability": "mutable", + "name": "sushiReward", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2955, + "src": "6834:19:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2924, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6834:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "id": 2936, + "initialValue": { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2935, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2931, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "6886:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2932, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "allocPoint", + "nodeType": "MemberAccess", + "referencedDeclaration": 2400, + "src": "6886:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2928, + "name": "tokenPerBlock", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2421, + "src": "6867:13:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2926, + "name": "blocks", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2916, + "src": "6856:6:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "6856:10:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2929, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6856:25:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "6856:29:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6856:46:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 2934, + "name": "totalAllocPoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2419, + "src": "6905:15:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6856:64:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6834:86:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2953, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2937, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "6938:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2939, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 2396, + "src": "6938:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "components": [ + { + "argumentTypes": null, + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 2948, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2945, + "name": "ACC_TOKEN_PRECISION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2424, + "src": "7005:19:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 2943, + "name": "sushiReward", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2925, + "src": "6989:11:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2944, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 627, + "src": "6989:15:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 2946, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6989:36:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "/", + "rightExpression": { + "argumentTypes": null, + "id": 2947, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2901, + "src": "7028:8:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6989:47:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 2949, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6988:49:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to128", + "nodeType": "MemberAccess", + "referencedDeclaration": 653, + "src": "6988:55:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint128_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint128)" + } + }, + "id": 2951, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6988:57:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2940, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "6962:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2941, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 2396, + "src": "6962:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "id": 2942, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 728, + "src": "6962:25:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint128_$_t_uint128_$returns$_t_uint128_$bound_to$_t_uint128_$", + "typeString": "function (uint128,uint128) pure returns (uint128)" + } + }, + "id": 2952, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6962:84:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "src": "6938:108:9", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + }, + "id": 2954, + "nodeType": "ExpressionStatement", + "src": "6938:108:9" + } + ] + } + }, + { + "expression": { + "argumentTypes": null, + "id": 2964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2957, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "7074:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2959, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 2398, + "src": "7074:20:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2960, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "7097:5:9", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 2961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "number", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7097:12:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 2962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "to64", + "nodeType": "MemberAccess", + "referencedDeclaration": 679, + "src": "7097:17:9", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint64_$bound_to$_t_uint256_$", + "typeString": "function (uint256) pure returns (uint64)" + } + }, + "id": 2963, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7097:19:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "7074:42:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 2965, + "nodeType": "ExpressionStatement", + "src": "7074:42:9" + }, + { + "expression": { + "argumentTypes": null, + "id": 2970, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 2966, + "name": "poolInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2406, + "src": "7130:8:9", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_PoolInfo_$2401_storage_$", + "typeString": "mapping(uint256 => struct ComplexRewarder.PoolInfo storage ref)" + } + }, + "id": 2968, + "indexExpression": { + "argumentTypes": null, + "id": 2967, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2884, + "src": "7139:3:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7130:13:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage", + "typeString": "struct ComplexRewarder.PoolInfo storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "id": 2969, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "7146:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "src": "7130:20:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage", + "typeString": "struct ComplexRewarder.PoolInfo storage ref" + } + }, + "id": 2971, + "nodeType": "ExpressionStatement", + "src": "7130:20:9" + }, + { + "eventCall": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "id": 2973, + "name": "pid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2884, + "src": "7183:3:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2974, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "7188:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2975, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "lastRewardBlock", + "nodeType": "MemberAccess", + "referencedDeclaration": 2398, + "src": "7188:20:9", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "argumentTypes": null, + "id": 2976, + "name": "lpSupply", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2901, + "src": "7210:8:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 2977, + "name": "pool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2887, + "src": "7220:4:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo memory" + } + }, + "id": 2978, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "accSushiPerShare", + "nodeType": "MemberAccess", + "referencedDeclaration": 2396, + "src": "7220:21:9", + "typeDescriptions": { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint128", + "typeString": "uint128" + } + ], + "id": 2972, + "name": "LogUpdatePool", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 2458, + "src": "7169:13:9", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint64_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint64,uint256,uint256)" + } + }, + "id": 2979, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7169:73:9", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 2980, + "nodeType": "EmitStatement", + "src": "7164:78:9" + } + ] + } + } + ] + }, + "documentation": { + "id": 2882, + "nodeType": "StructuredDocumentation", + "src": "6287:168:9", + "text": "@notice Update reward variables of the given pool.\n @param pid The index of the pool. See `poolInfo`.\n @return pool Returns the pool that was updated." + }, + "functionSelector": "51eb05a6", + "id": 2984, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "updatePool", + "nodeType": "FunctionDefinition", + "overrides": null, + "parameters": { + "id": 2885, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2884, + "mutability": "mutable", + "name": "pid", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2984, + "src": "6480:11:9", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 2883, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6480:7:9", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6479:13:9" + }, + "returnParameters": { + "id": 2888, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 2887, + "mutability": "mutable", + "name": "pool", + "nodeType": "VariableDeclaration", + "overrides": null, + "scope": 2984, + "src": "6509:20:9", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_memory_ptr", + "typeString": "struct ComplexRewarder.PoolInfo" + }, + "typeName": { + "contractScope": null, + "id": 2886, + "name": "PoolInfo", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 2401, + "src": "6509:8:9", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PoolInfo_$2401_storage_ptr", + "typeString": "struct ComplexRewarder.PoolInfo" + } + }, + "value": null, + "visibility": "internal" + } + ], + "src": "6508:22:9" + }, + "scope": 2985, + "src": "6460:799:9", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + } + ], + "scope": 2986, + "src": "399:6863:9" + } + ], + "src": "33:7229:9" + }, + "id": 9 + } + } + } +} diff --git a/tests/testdata/version-table.txt b/tests/testdata/version-table.txt index 2146c6f..56e42c7 100644 --- a/tests/testdata/version-table.txt +++ b/tests/testdata/version-table.txt @@ -1,11 +1,11 @@ ╒═════════╤══════════════════════════════════╕ │ Api │ v1.4.34.4 │ ├─────────┼──────────────────────────────────┤ -│ Maru │ 0.5.3 │ -├─────────┼──────────────────────────────────┤ -│ Mythril │ 0.21.14 │ +│ Hash │ 6e0035da873e809e90eab4665e3d19d6 │ ├─────────┼──────────────────────────────────┤ │ Harvey │ 0.0.33 │ ├─────────┼──────────────────────────────────┤ -│ Hash │ 6e0035da873e809e90eab4665e3d19d6 │ +│ Maru │ 0.5.3 │ +├─────────┼──────────────────────────────────┤ +│ Mythril │ 0.21.14 │ ╘═════════╧══════════════════════════════════╛ diff --git a/tox.ini b/tox.ini index d9b5174..8ba6a27 100644 --- a/tox.ini +++ b/tox.ini @@ -1,12 +1,12 @@ [tox] envlist = py36, py37, py38, pypy3, lint, doctest -[travis] +[gh-actions] python = - pypy3: pypy3 - 3.8: p38 - 3.7: py37 3.6: py36 + 3.7: py37 + 3.8: py38, lint, doctest + pypy3: pypy3 [testenv:lint] basepython = python