diff --git a/.debug.env.example b/.debug.env.example new file mode 100644 index 00000000..74bfec6c --- /dev/null +++ b/.debug.env.example @@ -0,0 +1,10 @@ +# Fork block number to debug +BLOCK=0x0 +# Caller +FROM=0x0000000000000000000000000000000000000000 +# Callee +TO=0x0000000000000000000000000000000000000000 +# Sent Value +VALUE=0x27cdb0997a65b2de99 +# Call Data +CALLDATA=0x0 diff --git a/.github/template/create-pull-request.md b/.github/template/create-pull-request.md new file mode 100644 index 00000000..d3ba65d1 --- /dev/null +++ b/.github/template/create-pull-request.md @@ -0,0 +1,2 @@ +### Description +PR to merge from [{{ .fromBranch }}](/axieinfinity/rns-contracts/tree/{{ .fromBranch }}) to [{{ .toBranch }}](/axieinfinity/rns-contracts/tree/{{ .toBranch }}). diff --git a/.github/workflows/create-PR-implement.yml b/.github/workflows/create-PR-implement.yml new file mode 100644 index 00000000..33d00a59 --- /dev/null +++ b/.github/workflows/create-PR-implement.yml @@ -0,0 +1,50 @@ +name: Create Pull Request From Implement To Feature +on: + push: + branches: + - 'implement-feature/**' + - 'implement-feature/**/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true + +env: + HEAD_BRANCH: ${{ github.head_ref || github.ref_name }} + +jobs: + createPullRequest: + runs-on: ubuntu-latest + steps: + - name: Set env + run: | + echo "FEATURE_NAME=$(echo ${HEAD_BRANCH} | cut -d'/' -f2)" >> $GITHUB_ENV + echo "FEATURE_BRANCH=feature/$(echo ${HEAD_BRANCH} | cut -d'/' -f2)" >> $GITHUB_ENV + echo "IMPLEMENT_NAME=$(echo ${HEAD_BRANCH} | cut -d'/' -f3)" >> $GITHUB_ENV + + - uses: actions/checkout@v3 + with: + ref: ${{env.FEATURE_BRANCH}} + + - name: Reset promotion branch + run: | + git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} + git reset --hard ${HEAD_BRANCH} + + - name: Render template + id: template + uses: chuhlomin/render-template@v1.4 + with: + template: .github/template/create-pull-request.md + vars: | + fromBranch: ${{env.HEAD_BRANCH}} + toBranch: ${{ env.FEATURE_BRANCH }} + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v5 + with: + branch: ${{ env.HEAD_BRANCH }} + base: ${{env.FEATURE_BRANCH}} + labels: automated PR + title: 'feat(${{env.FEATURE_NAME}}): implement `${{env.IMPLEMENT_NAME}}`' + body: ${{ steps.template.outputs.result }} \ No newline at end of file diff --git a/.github/workflows/create-PR-release.yml b/.github/workflows/create-PR-release.yml new file mode 100644 index 00000000..87944c64 --- /dev/null +++ b/.github/workflows/create-PR-release.yml @@ -0,0 +1,84 @@ +name: Create Pull Request From Release to Feature +on: + push: + branches: + - 'release/*' + - 'release*/*' + +concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true + +env: + HEAD_BRANCH: ${{ github.head_ref || github.ref_name }} + +jobs: + fetchAllFeatureBranches: + runs-on: ubuntu-latest + + steps: + - id: step1 + name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - id: step2 + name: List all the remote feature branches + run: | + branches=$(git branch -r | grep -E '.*origin\/feature\/.*' | sed -e "s/.*origin\///" | tr "\n" " ") + JSON="[" + for branch in ${branches[@]}; do + echo $branch + JSONline="\"$branch\"," + # we don't need to iterate on the same branch over and over, so + # onnly include it when it wasn't included + if [[ "$JSON" != *"$JSONline"* ]]; then + JSON="$JSON$JSONline" + fi + done + # Remove last "," and add the closing bracket + if [[ $JSON == *, ]]; then + JSON="${JSON%?}" + fi + JSON="$JSON]" + echo $JSON + echo "BRANCHES={\"branch_name\": $( echo "$JSON" )}" >> "$GITHUB_OUTPUT" + outputs: + BRANCHES: ${{ steps.step2.outputs.BRANCHES }} + + mergeRelease2FeatureRepo: + runs-on: ubuntu-latest + needs: fetchAllFeatureBranches + strategy: + matrix: ${{ fromJSON(needs.fetchAllFeatureBranches.outputs.BRANCHES) }} + steps: + - name: Set env + run: | + echo "PR_BRANCH=merge/${HEAD_BRANCH}-${{matrix.branch_name}}" >> $GITHUB_ENV + echo "FEATURE_NAME=$(echo ${{matrix.branch_name}} | cut -d'/' -f2)" >> $GITHUB_ENV + - uses: actions/checkout@v3 + with: + ref: ${{matrix.branch_name}} + - name: Reset promotion branch + run: | + git fetch origin ${HEAD_BRANCH}:${HEAD_BRANCH} + git reset --hard ${HEAD_BRANCH} + + - name: Render template + id: template + uses: chuhlomin/render-template@v1.4 + with: + template: .github/template/create-pull-request.md + vars: | + fromBranch: ${{env.HEAD_BRANCH}} + toBranch: ${{matrix.branch_name}} + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v5 + with: + labels: automated PR + delete-branch: true + title: 'chore(`${{env.FEATURE_NAME}}`): merge from `${{env.HEAD_BRANCH}}`' + body: ${{ steps.template.outputs.result }} + branch: ${{env.PR_BRANCH}} diff --git a/.gitignore b/.gitignore index 0b2b5b71..013ebe5c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ docs/ # Dotenv file .env .vscode +.debug.env node_modules/ yarn-error.log diff --git a/.gitmodules b/.gitmodules index e80ffd88..979511db 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,21 @@ [submodule "lib/openzeppelin-contracts"] path = lib/openzeppelin-contracts url = https://github.com/openzeppelin/openzeppelin-contracts +[submodule "lib/contract-template"] + path = lib/contract-template + url = https://github.com/axieinfinity/contract-template +[submodule "lib/ens-contracts"] + path = lib/ens-contracts + url = https://github.com/ensdomains/ens-contracts +[submodule "lib/buffer"] + path = lib/buffer + url = https://github.com/ensdomains/buffer +[submodule "lib/pyth-sdk-solidity"] + path = lib/pyth-sdk-solidity + url = https://github.com/pyth-network/pyth-sdk-solidity +[submodule "lib/solady"] + path = lib/solady + url = https://github.com/vectorized/solady +[submodule "lib/foundry-deployment-kit"] + path = lib/foundry-deployment-kit + url = https://github.com/axieinfinity/foundry-deployment-kit diff --git a/broadcast/20231015_Deploy.s.sol/2021/run-1697372924.json b/broadcast/20231015_Deploy.s.sol/2021/run-1697372924.json new file mode 100644 index 00000000..dce79776 --- /dev/null +++ b/broadcast/20231015_Deploy.s.sol/2021/run-1697372924.json @@ -0,0 +1,527 @@ +{ + "transactions": [ + { + "hash": "0x553cace89d412b26cc92e89120c8c23086f3c5c9ff96f8b67c64ad0ac93535ac", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4af6da", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6142b3806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b61030961030436600461345a565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c366004613477565b6107d7565b6040516103159190613564565b61035161034c3660046135f2565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b604051610315919061366f565b6103ba6103b5366004613477565b610bba565b6040516001600160a01b039091168152602001610315565b6103e760008051602061423e83398151915281565b604051908152602001610315565b610408610403366004613682565b610be1565b005b6103e7610418366004613737565b610cfb565b61039a61042b366004613477565b610d06565b6103e761043e366004613477565b60096020526000908152604090205481565b603f546103e7565b61039a610466366004613477565b610d53565b61040861047936600461377f565b610e5f565b61040861048c3660046137c0565b610ff4565b6103e761049f366004613477565b6000908152600160208190526040909120015490565b6104086104c33660046137fc565b611026565b6104086104d63660046137fc565b611080565b6103e76104e9366004613682565b6110a6565b6103e760008051602061421e83398151915281565b6104086105113660046137fc565b61113c565b6104086111ba565b61040861052c3660046137c0565b6111dd565b61040861053f366004613477565b6111f8565b6103e7610552366004613477565b611226565b61056a610565366004613828565b6112b9565b6040516001600160401b039091168152602001610315565b61040861059036600461384b565b61137e565b6104086105a3366004613866565b6113a7565b603c5460ff16610309565b6103ba6105c1366004613477565b6113bc565b6103e76105d43660046138a7565b6113dd565b610408611463565b6103ba6105ef3660046138c2565b611483565b6103096106023660046137fc565b6114a2565b604080518082019091526003815262524e5360e81b602082015261039a565b610309610634366004613477565b6114cd565b6103e7600081565b61040861064f3660046138f4565b6114f8565b6073546103e7565b61040861066a36600461391e565b611503565b61040861067d3660046139b4565b61171b565b61056a6001600160401b0381565b61039a61069e366004613477565b61174d565b6103e76106b1366004613477565b6117c0565b6104086106c43660046137fc565b6117d7565b60a7546001600160401b031661056a565b6103e760008051602061425e83398151915281565b6103096106fd366004613a2f565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613a59565b6117fd565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b610408610773366004613828565b611907565b61078b610786366004613adc565b611988565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611aba565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df6133e8565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613b0f565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611adf565b60208201516001600160401b03909116604090910152919050565b600080610938611b5b565b6109423389611ba3565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bbf92505050565b90506109a9816114cd565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6109cf81611bd5565b156109dd576109dd81611bf2565b6109e78482611c2e565b6109fc426001600160401b0380861690611c41565b9150610a088883611c77565b610a106133e8565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b038616828401526000606080840182905285830193909352835192830184528c815260a890915291909120548190610a759060ff166001613b59565b60ff1681526020018a815260200189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250509183525082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b039082613bc0565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206141fe83398151915290610ba690600019908590613c7f565b60405180910390a250965096945050505050565b6000610bc582611cbd565b506000908152600760205260409020546001600160a01b031690565b6000610bec82611d0d565b9050806001600160a01b0316836001600160a01b031603610c5e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610c7a5750610c7a81336106fd565b610cec5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610c55565b610cf68383611d6d565b505050565b60006107d182611ddb565b606081610d1281611cbd565b600083815260a8602090815260408083206009835292819020549051610d3b9392879101613c98565b60405160208183030381529060405291505b50919050565b606081600003610d7157505060408051602081019091526000815290565b600082815260a860205260409020600281018054610d8e90613b0f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dba90613b0f565b8015610e075780601f10610ddc57610100808354040283529160200191610e07565b820191906000526020600020905b815481529060010190602001808311610dea57829003601f168201915b50505050509150806001015492505b8215610d4d5750600082815260a860209081526040918290209151610e42918491600285019101613da6565b604051602081830303815290604052915080600101549250610e16565b610e67611b5b565b8282610e738282611e4e565b610e7b6133e8565b600086815260a860205260409020600301610ea0610e996006611e6f565b8790611e91565b15610ee157610eb56080860160608701613e58565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610eee610e996005611e6f565b15610f2457610f2487610f07606088016040890161384b565b60208501516001600160401b039091166040909101819052611e9d565b610f31610e996003611e6f565b15610f6757610f4360208601866138a7565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206141fe8339815191528784604051610f87929190613c7f565b60405180910390a2610f9c610e996004611e6f565b15610feb57600087815260a8602090815260409182902060040154610feb926001600160a01b0390911691610fd59189019089016138a7565b8960405180602001604052806000815250611f76565b50505050505050565b610fff335b82611fa9565b61101b5760405162461bcd60e51b8152600401610c5590613e73565b610cf6838383611fcb565b61102e611b5b565b816110396004611e6f565b6110438282611e4e565b600084815260a86020908152604080832060040154815192830190915291815261107a916001600160a01b03169085908790611f76565b50505050565b6000828152600160208190526040909120015461109c816120c7565b610cf683836120d1565b60006110b1836113dd565b82106111135760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610c55565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146111ac5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c55565b6111b682826120f3565b5050565b60008051602061425e8339815191526111d2816120c7565b6111da612115565b50565b610cf68383836040518060200160405280600081525061171b565b61120133610ff9565b61121d5760405162461bcd60e51b8152600401610c5590613e73565b6111da81611bf2565b6000611231603f5490565b82106112945760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610c55565b603f82815481106112a7576112a7613ec0565b90600052602060002001549050919050565b60006112c3611b5b565b60008051602061423e8339815191526112db816120c7565b6112e36133e8565b600085815260a86020526040902060040154611315906001600160401b03600160a01b90910481169086811690611c41565b6020820180516001600160401b0390921660409283015251015161133a908690611e9d565b6020810151604001519250846000805160206141fe83398151915261135f6005611e6f565b8360405161136e929190613c7f565b60405180910390a2505092915050565b611386611b5b565b60008051602061423e83398151915261139e816120c7565b6111b682612167565b60006113b2816120c7565b610cf683836121bf565b60006113c782612214565b156113d457506000919050565b6107d182611d0d565b60006001600160a01b0382166114475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c55565b506001600160a01b031660009081526006602052604090205490565b60008051602061425e83398151915261147b816120c7565b6111da612230565b600082815260026020526040812061149b908361226d565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006114f06114db83611adf565b60a7546001600160401b039182169116612279565b421192915050565b6111b633838361228d565b600054610100900460ff16158080156115235750600054600160ff909116105b8061153d5750303b15801561153d575060005460ff166001145b6115a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c55565b6000805460ff1916600117905580156115c3576000805461ff0019166101001790555b6115ce6000896120d1565b6115e660008051602061425e833981519152886120d1565b6115fe60008051602061423e833981519152876120d1565b61161660008051602061421e833981519152866120d1565b61162083836121bf565b61162984612167565b611634886000611c2e565b61163c6133e8565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206141fe8339815191526116b36005611e6f565b836040516116c2929190613c7f565b60405180910390a2508015611711576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117253383611fa9565b6117415760405162461bcd60e51b8152600401610c5590613e73565b61107a84848484611f76565b60608161175981611cbd565b600061176361235b565b9050600081511161178357604051806020016040528060008152506117b8565b8061178d306123ed565b61179686612403565b6040516020016117a893929190613ed6565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d190612495565b600082815260016020819052604090912001546117f3816120c7565b610cf683836120f3565b60008051602061421e833981519152611815816120c7565b60006118216006611e6f565b9050600061182d6133e8565b602081015185151560609091015260005b868110156117115787878281811061185857611858613ec0565b90506020020135925061186a83611bd5565b611887576040516304a3dbd560e51b815260040160405180910390fd5b600083815260a8602052604090206004015460ff600160e01b909104161515861515146118ff57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206141fe833981519152906118f69087908690613c7f565b60405180910390a25b60010161183e565b61190f611b5b565b60008051602061423e833981519152611927816120c7565b61192f6133e8565b60208101516001600160401b0384166040909101819052611951908590611e9d565b836000805160206141fe83398151915261196b6005611e6f565b8360405161197a929190613c7f565b60405180910390a250505050565b600080611996836007611e91565b156119ad57506000905063da698a4d60e01b611ab2565b6119b684611bd5565b6119cc5750600090506304a3dbd560e51b611ab2565b6119e06119d96006611e6f565b8490611e91565b8015611a0157506119ff60008051602061421e833981519152866114a2565b155b15611a1857506000905063c24b0f3f60e01b611ab2565b6000611a3260008051602061423e833981519152876114a2565b9050611a48611a416005611e6f565b8590611e91565b8015611a52575080155b15611a6b57506000915063ed4b948760e01b9050611ab2565b611a76846018611e91565b8015611a9057508080611a8e5750611a8e8686611ba3565b155b15611aa85750600091506282b42960e81b9050611ab2565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d18261249f565b600081815260056020526040812054611b22907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b03166114a2565b15611b3557506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611ba15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c55565b565b6000611baf8383611fa9565b8061149b575061149b83836124df565b6000918252805160209182012090526040902090565b6000908152600560205260409020546001600160a01b0316151590565b611bfb8161253d565b600090815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055565b6073805460010190556111b682826125e0565b600081841180611c5057508183115b15611c5c57508061149b565b611c668484612279565b90508181111561149b575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156111b65760405163da87d84960e01b815260040160405180910390fd5b611cc681611bd5565b6111da5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c55565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c55565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611da282611d0d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611e445760006020840160018303810160008052805b828110611e3f57828114602e600183035160f81c1480821715611e3457600186848603030180842060205260406000206000526001810187019650505b505060001901611df7565b505050505b5050600051919050565b600080611e5c338585611988565b915091508161107a578060005260046000fd5b6000816006811115611e8357611e83613e42565b60ff166001901b9050919050565b6000828216151561149b565b600082815260a86020526040902060010154611eb99082611c77565b611ec2826114cd565b15611ee057604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611f2557604051631c21962760e11b815260040160405180910390fd5b611f2d6133e8565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b611f81848484611fcb565b611f8d8484848461275b565b61107a5760405162461bcd60e51b8152600401610c5590613f26565b6000611fb482612214565b15611fc1575060006107d1565b61149b838361285c565b611fd68383836128da565b611fde6133e8565b6000611fea6004611e6f565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b0319169091179055905061203d60008051602061421e833981519152336114a2565b1580156120625750600083815260a86020526040902060040154600160e01b900460ff165b1561209857600083815260a860205260409020600401805460ff60e01b19169055612095816120916006611e6f565b1790565b90505b826000805160206141fe83398151915282846040516120b8929190613c7f565b60405180910390a25050505050565b6111da8133612a4b565b6120db8282612aa4565b6000828152600260205260409020610cf69082612b0f565b6120fd8282612b24565b6000828152600260205260409020610cf69082612b8b565b61211d612ba0565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b60746121cc828483613f78565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051612208929190614037565b60405180910390a25050565b600061221f82611adf565b6001600160401b0316421192915050565b612238611b5b565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861214a3390565b600061149b8383612be9565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036122ee5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c55565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461236a90613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461239690613b0f565b80156123e35780601f106123b8576101008083540402835291602001916123e3565b820191906000526020600020905b8154815290600101906020018083116123c657829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612c13565b6060600061241083612dae565b60010190506000816001600160401b0381111561242f5761242f6136ac565b6040519080825280601f01601f191660200182016040528015612459576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461246357509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b14806124d057506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612e86565b6000805b82156125335750600082815260a860205260409020600401546001600160a01b03908116908416810361251a5760019150506107d1565b600092835260a8602052604090922060010154916124e3565b5060009392505050565b600061254882611d0d565b9050612558816000846001612eab565b61256182611d0d565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126365760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c55565b61263f81611bd5565b1561268c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c55565b61269a600083836001612eab565b6126a381611bd5565b156126f05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c55565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561285157604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061279f903390899088908890600401614066565b6020604051808303816000875af19250505080156127da575060408051601f3d908101601f191682019092526127d7918101906140a3565b60015b612837573d808015612808576040519150601f19603f3d011682016040523d82523d6000602084013e61280d565b606091505b50805160000361282f5760405162461bcd60e51b8152600401610c5590613f26565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117b8565b506001949350505050565b60008061286883611d0d565b9050806001600160a01b0316846001600160a01b031614806128af57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806117b85750836001600160a01b03166128c884610bba565b6001600160a01b031614949350505050565b826001600160a01b03166128ed82611d0d565b6001600160a01b0316146129135760405162461bcd60e51b8152600401610c55906140c0565b6001600160a01b0382166129755760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c55565b6129828383836001612eab565b826001600160a01b031661299582611d0d565b6001600160a01b0316146129bb5760405162461bcd60e51b8152600401610c55906140c0565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612a5582826114a2565b6111b657612a62816123ed565b612a6d836020612c13565b604051602001612a7e929190614105565b60408051601f198184030181529082905262461bcd60e51b8252610c559160040161366f565b612aae82826114a2565b6111b65760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061149b836001600160a01b038416612eb7565b612b2e82826114a2565b156111b65760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061149b836001600160a01b038416612f06565b603c5460ff16611ba15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c55565b6000826000018281548110612c0057612c00613ec0565b9060005260206000200154905092915050565b60606000612c2283600261417a565b612c2d906002614191565b6001600160401b03811115612c4457612c446136ac565b6040519080825280601f01601f191660200182016040528015612c6e576020820181803683370190505b509050600360fc1b81600081518110612c8957612c89613ec0565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612cb857612cb8613ec0565b60200101906001600160f81b031916908160001a9053506000612cdc84600261417a565b612ce7906001614191565b90505b6001811115612d5f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612d1b57612d1b613ec0565b1a60f81b828281518110612d3157612d31613ec0565b60200101906001600160f81b031916908160001a90535060049490941c93612d58816141a4565b9050612cea565b50831561149b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c55565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612ded5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e19576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612e3757662386f26fc10000830492506010015b6305f5e1008310612e4f576305f5e100830492506008015b6127108310612e6357612710830492506004015b60648310612e75576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d182612ff9565b61107a8484848461302e565b6000818152600183016020526040812054612efe575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60008181526001830160205260408120548015612fef576000612f2a6001836141bb565b8554909150600090612f3e906001906141bb565b9050818114612fa3576000866000018281548110612f5e57612f5e613ec0565b9060005260206000200154905080876000018481548110612f8157612f81613ec0565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612fb457612fb46141ce565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b61303a8484848461316e565b60018111156130a95760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610c55565b816001600160a01b0385166131055761310081603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b613128565b836001600160a01b0316856001600160a01b0316146131285761312885826131e1565b6001600160a01b0384166131445761313f8161327e565b613167565b846001600160a01b0316846001600160a01b03161461316757613167848261332d565b5050505050565b61317a84848484613371565b603c5460ff161561107a5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610c55565b600060016131ee846113dd565b6131f891906141bb565b6000838152603e602052604090205490915080821461324b576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f54600090613290906001906141bb565b600083815260406020819052812054603f80549394509092849081106132b8576132b8613ec0565b9060005260206000200154905080603f83815481106132d9576132d9613ec0565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f805480613311576133116141ce565b6001900381819060005260206000200160009055905550505050565b6000613338836113dd565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b61337d8284614191565b8110156133e257600081815260096020526040812080549091906133a0906141e4565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a3806133da816141e4565b915050613373565b5061107a565b604051806040016040528061341a6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b0319811681146111da57600080fd5b60006020828403121561346c57600080fd5b813561149b81613444565b60006020828403121561348957600080fd5b5035919050565b60005b838110156134ab578181015183820152602001613493565b50506000910152565b600081518084526134cc816020860160208601613490565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135166101008501826134b4565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061149b60208301846134e0565b60008083601f84011261358957600080fd5b5081356001600160401b038111156135a057600080fd5b6020830191508360208285010111156135b857600080fd5b9250929050565b80356001600160a01b03811681146135d657600080fd5b919050565b80356001600160401b03811681146135d657600080fd5b60008060008060008060a0878903121561360b57600080fd5b8635955060208701356001600160401b0381111561362857600080fd5b61363489828a01613577565b90965094506136479050604088016135bf565b9250613655606088016135bf565b9150613663608088016135db565b90509295509295509295565b60208152600061149b60208301846134b4565b6000806040838503121561369557600080fd5b61369e836135bf565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b03808411156136dc576136dc6136ac565b604051601f8501601f19908116603f01168101908282118183101715613704576137046136ac565b8160405280935085815286868601111561371d57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561374957600080fd5b81356001600160401b0381111561375f57600080fd5b8201601f8101841361377057600080fd5b6117b8848235602084016136c2565b600080600083850360c081121561379557600080fd5b84359350602085013592506080603f19820112156137b257600080fd5b506040840190509250925092565b6000806000606084860312156137d557600080fd5b6137de846135bf565b92506137ec602085016135bf565b9150604084013590509250925092565b6000806040838503121561380f57600080fd5b8235915061381f602084016135bf565b90509250929050565b6000806040838503121561383b57600080fd5b8235915061381f602084016135db565b60006020828403121561385d57600080fd5b61149b826135db565b6000806020838503121561387957600080fd5b82356001600160401b0381111561388f57600080fd5b61389b85828601613577565b90969095509350505050565b6000602082840312156138b957600080fd5b61149b826135bf565b600080604083850312156138d557600080fd5b50508035926020909101359150565b803580151581146135d657600080fd5b6000806040838503121561390757600080fd5b613910836135bf565b915061381f602084016138e4565b600080600080600080600060c0888a03121561393957600080fd5b613942886135bf565b9650613950602089016135bf565b955061395e604089016135bf565b945061396c606089016135bf565b935061397a608089016135db565b925060a08801356001600160401b0381111561399557600080fd5b6139a18a828b01613577565b989b979a50959850939692959293505050565b600080600080608085870312156139ca57600080fd5b6139d3856135bf565b93506139e1602086016135bf565b92506040850135915060608501356001600160401b03811115613a0357600080fd5b8501601f81018713613a1457600080fd5b613a23878235602084016136c2565b91505092959194509250565b60008060408385031215613a4257600080fd5b613a4b836135bf565b915061381f602084016135bf565b600080600060408486031215613a6e57600080fd5b83356001600160401b0380821115613a8557600080fd5b818601915086601f830112613a9957600080fd5b813581811115613aa857600080fd5b8760208260051b8501011115613abd57600080fd5b602092830195509350613ad391860190506138e4565b90509250925092565b600080600060608486031215613af157600080fd5b613afa846135bf565b95602085013595506040909401359392505050565b600181811c90821680613b2357607f821691505b602082108103610d4d57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613b43565b601f821115610cf657600081815260208120601f850160051c81016020861015613b995750805b601f850160051c820191505b81811015613bb857828155600101613ba5565b505050505050565b81516001600160401b03811115613bd957613bd96136ac565b613bed81613be78454613b0f565b84613b72565b602080601f831160018114613c225760008415613c0a5750858301515b600019600386901b1c1916600185901b178555613bb8565b600085815260208120601f198616915b82811015613c5157888601518255948401946001909101908401613c32565b5085821015613c6f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006117b860408301846134e0565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613cd581613b0f565b8061016088015261018085831660008114613cf75760018114613d1157613d42565b60ff1984168983015282151560051b890182019450613d42565b8560005260208060002060005b85811015613d395781548c8201860152908901908201613d1e565b8b018401965050505b50505050613d926080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613db98285838901613490565b8184019150601760f91b8252600160008654613dd481613b0f565b8184168015613dea5760018114613e0357613e33565b60ff198316878601528115158202870185019350613e33565b896000528560002060005b83811015613e29578154898201880152908601908701613e0e565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613e6a57600080fd5b61149b826138e4565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613ee8818460208901613490565b845190830190613efc818360208901613490565b602f60f81b91019081528351613f19816001840160208801613490565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b03831115613f8f57613f8f6136ac565b613fa383613f9d8354613b0f565b83613b72565b6000601f841160018114613fd75760008515613fbf5750838201355b600019600387901b1c1916600186901b178355613167565b600083815260209020601f19861690835b828110156140085786850135825560209485019460019092019101613fe8565b50868210156140255760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614099908301846134b4565b9695505050505050565b6000602082840312156140b557600080fd5b815161149b81613444565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161413d816017850160208801613490565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161416e816028840160208801613490565b01602801949350505050565b80820281158282048414176107d1576107d1613b43565b808201808211156107d1576107d1613b43565b6000816141b3576141b3613b43565b506000190190565b818103818111156107d1576107d1613b43565b634e487b7160e01b600052603160045260246000fd5b6000600182016141f6576141f6613b43565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220301f6572af699c777a4ce459646815492b8048541c5752ac22e91ffe87e5b23064736f6c63430008150033", + "nonce": "0x2c8df" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": [ + "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xabfaf005000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6d657461646174612d726e732e736b796d617669732e6f6e652f736169676f6e2f0000000000000000000000000000000000000000000000" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x17e3b3", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000713139b9f92d4f2bc54832a47200b7b8c6718158000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124abfaf005000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6d657461646174612d726e732e736b796d617669732e6f6e652f736169676f6e2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2273c7150d065f5a4783077c76d3937b84af0d9844ea0f04c7783a3b4aaa9d58", + "transactionType": "CREATE", + "contractName": "RNSAuction", + "contractAddress": "0xCcD3837278C083027DeF4537b3e66343D940377F", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x29c3e9", + "value": "0x0", + "data": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6124a6806100df6000396000f3fe6080604052600436106101b75760003560e01c806381bec1b3116100ec578063b96716901161008a578063db5e1ec611610064578063db5e1ec6146105a0578063ec14cf37146105c0578063f0f44260146105e0578063f5b541a61461060057600080fd5b8063b967169014610545578063ca15c87314610560578063d547741f1461058057600080fd5b806391d14854116100c657806391d14854146104e85780639979ef4514610508578063a217fddf1461051b578063a282d4ae1461053057600080fd5b806381bec1b31461048a5780638c843314146104aa5780639010d07c146104c857600080fd5b80634c255c97116101595780636e7d60f2116101335780636e7d60f21461039e578063777b0a18146103cb57806378bd7935146103eb578063791a26b41461045d57600080fd5b80634c255c971461034857806353f9195e1461035e57806360223b441461037e57600080fd5b8063248a9ca311610195578063248a9ca3146102955780632f2ff15d146102d457806336568abe146102f65780633b19e84a1461031657600080fd5b806301ffc9a7146101bc57806315a29162146101f157806319a3ee4014610265575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611d1f565b610622565b60405190151581526020015b60405180910390f35b3480156101fd57600080fd5b5061024a61020c366004611d49565b604080518082019091526000808252602082015250600090815260366020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101e8565b34801561027157600080fd5b5061027d6301e1338081565b6040516001600160401b0390911681526020016101e8565b3480156102a157600080fd5b506102c66102b0366004611d49565b6000908152600160208190526040909120015490565b6040519081526020016101e8565b3480156102e057600080fd5b506102f46102ef366004611d77565b61064d565b005b34801561030257600080fd5b506102f4610311366004611d77565b610678565b34801561032257600080fd5b506038546001600160a01b03165b6040516001600160a01b0390911681526020016101e8565b34801561035457600080fd5b506102c661271081565b34801561036a57600080fd5b506101dc610379366004611d49565b6106fb565b34801561038a57600080fd5b506102f4610399366004611d49565b61071e565b3480156103aa57600080fd5b506103be6103b9366004611df2565b610732565b6040516101e89190611e33565b3480156103d757600080fd5b506102f46103e6366004611e79565b610a6a565b3480156103f757600080fd5b5061040b610406366004611d49565b610bcd565b6040805183518152602080850151818301529382015180516001600160a01b03168284015293840151606080830191909152918401516080820152920151151560a083015260c082015260e0016101e8565b34801561046957600080fd5b5061047d610478366004611df2565b610cbd565b6040516101e89190611ef2565b34801561049657600080fd5b506102f46104a5366004611f42565b610e78565b3480156104b657600080fd5b506035546001600160a01b0316610330565b3480156104d457600080fd5b506103306104e3366004611f6f565b610ef5565b3480156104f457600080fd5b506101dc610503366004611d77565b610f14565b6102f4610516366004611d49565b610f3f565b34801561052757600080fd5b506102c6600081565b34801561053c57600080fd5b506039546102c6565b34801561055157600080fd5b5061027d6001600160401b0381565b34801561056c57600080fd5b506102c661057b366004611d49565b6110ff565b34801561058c57600080fd5b506102f461059b366004611d77565b611116565b3480156105ac57600080fd5b506102c66105bb366004611f91565b61113c565b3480156105cc57600080fd5b506102f46105db366004611fad565b6111d9565b3480156105ec57600080fd5b506102f46105fb366004612031565b611376565b34801561060c57600080fd5b506102c660008051602061245183398151915281565b60006001600160e01b03198216635a05180f60e01b148061064757506106478261138a565b92915050565b60008281526001602081905260409091200154610669816113bf565b61067383836113cc565b505050565b6001600160a01b03811633146106ed5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106f782826113ee565b5050565b600881901c6000908152603a6020526040812054600160ff84161b161515610647565b6000610729816113bf565b6106f782611410565b6060600080610754604051806040016040528060008152602001600081525090565b610792604080516060808201835260008083526020808401829052845160808101865282815290810182905280850182905291820152909182015290565b85806001600160401b038111156107ab576107ab61204e565b6040519080825280602002602001820160405280156107d4578160200160208202803683370190505b506035549096506001600160a01b031660006107fc426301e133806001600160401b0361146e565b905060005b83811015610a46578a8a8281811061081b5761081b612064565b60209081029290920135600081815260378452604080822081516060808201845282548252600180840154838a0152845160808101865260028501546001600160a01b031681526003850154818b015260048501548187015260059094015460ff1615158483015282850193845282518652603689529484902084518086019095528054855290940154968301969096525190910151919b509850919650610a3e90505760208601514210156108e4576040516372d1250d60e01b815260040160405180910390fd5b84604001516040015160000361090d576040516323bbcc0160e01b815260040160405180910390fd5b6040850151602001516109209088612090565b60405163fc284d1160e01b8152600481018a90526001600160401b03841660248201529097506001600160a01b0384169063fc284d1190604401600060405180830381600087803b15801561097457600080fd5b505af1158015610988573d6000803e3d6000fd5b505050506040858101515190516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018a9052908416906323b872dd90606401600060405180830381600087803b1580156109e357600080fd5b505af11580156109f7573d6000803e3d6000fd5b505050506001898281518110610a0f57610a0f612064565b911515602092830291909101820181905260008a815260379092526040909120600501805460ff191690911790555b600101610801565b50603854610a5d906001600160a01b0316876114a4565b5050505050505092915050565b600080516020612451833981519152610a82816113bf565b85610a8c81611509565b84801580610a9a5750808414155b15610ab857604051634ec4810560e11b815260040160405180910390fd5b6000806000805b84811015610b81578a8a82818110610ad957610ad9612064565b905060200201359350610aeb846106fb565b610b0857604051637d6fe8d760e11b815260040160405180910390fd5b6000848152603760205260409020805493509150821580610b2857508b83145b80610b3557506004820154155b610b5257604051631dc8374160e01b815260040160405180910390fd5b8b8255888882818110610b6757610b67612064565b905060200201358260010181905550806001019050610abf565b508a7f9a845a1c4235343a450f5e39d4179b7e2a6c9586c02bff45d956717f4a19dd948b8b8b8b604051610bb894939291906120d5565b60405180910390a25050505050505050505050565b610c0b604080516060808201835260008083526020808401829052845160808101865282815290810182905280850182905291820152909182015290565b5060008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b0316815260038501548188015260048501548187015260059094015460ff161515918401919091528184019290925280518351808501855286815285018690528552603684528285208351808501909452805484529091015492820192909252909190610cb58382611556565b915050915091565b6060600080516020612451833981519152610cd7816113bf565b826000819003610cfa57604051634ec4810560e11b815260040160405180910390fd5b806001600160401b03811115610d1257610d1261204e565b604051908082528060200260200182016040528015610d3b578160200160208202803683370190505b506035549093506001600160a01b03167fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6886301e1338060005b84811015610e6c57836001600160a01b0316630570891f848b8b85818110610d9e57610d9e612064565b9050602002810190610db09190612107565b600030886040518763ffffffff1660e01b8152600401610dd59695949392919061214d565b60408051808303816000875af1158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1791906121a9565b9050878281518110610e2b57610e2b612064565b602002602001018181525050610e64878281518110610e4c57610e4c612064565b6020026020010151603a6115ae90919063ffffffff16565b600101610d74565b50505050505092915050565b6000610e83816113bf565b81610e8d816115d7565b83610e9781611509565b60008581526036602090815260409091208535815590850135600182015550847fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b85604051610ee691906121e3565b60405180910390a25050505050565b6000828152600260205260408120610f0d908361161c565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b0316815260038501548188015260048501548187015260059094015460ff1615159184019190915281840192909252805185526036845282852083518085019094528054845290910154928201929092529091610fd88383611556565b9050610fe382611628565b611000576040516348c6117b60e11b815260040160405180910390fd5b8034101561102157604051632ca2f52b60e11b815260040160405180910390fd5b3361102d816000611643565b61104a57604051634bad17b360e01b815260040160405180910390fd5b604084810151805160209182015160008981526037845284902034600382018190556002820180546001600160a01b0319166001600160a01b038981169182178355426004909501949094558b5188519384529683015295810183905290831660608201529193909290918991907f5934294f4724ea4bb71fee8511b9ccb8dd6d2249ac4d120a81ccfcbbd0ad905f9060800160405180910390a381156110f5576110f583836114a4565b5050505050505050565b6000818152600260205260408120610647906116b9565b60008281526001602081905260409091200154611132816113bf565b61067383836113ee565b600080611148816113bf565b82611152816115d7565b33846040516020016111659291906121fa565b60408051808303601f1901815291815281516020928301206000818152603684529190912086358155918601356001830155935050827fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b856040516111ca91906121e3565b60405180910390a25050919050565b600054610100900460ff16158080156111f95750600054600160ff909116105b806112135750303b158015611213575060005460ff166001145b6112765760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106e4565b6000805460ff191660011790558015611299576000805461ff0019166101001790555b6112a2836116c3565b6112ab82611410565b6112b6600088611734565b8460008051602061245183398151915260005b8281101561130957611301828a8a848181106112e7576112e7612064565b90506020020160208101906112fc9190612031565b611734565b6001016112c9565b5050603580546001600160a01b0319166001600160a01b03871617905550801561136d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6000611381816113bf565b6106f7826116c3565b60006001600160e01b03198216637965db0b60e01b148061064757506301ffc9a760e01b6001600160e01b0319831614610647565b6113c9813361173e565b50565b6113d68282611771565b600082815260026020526040902061067390826117dc565b6113f882826117f1565b60008281526002602052604090206106739082611858565b6127108111156114335760405163220f1a1560e01b815260040160405180910390fd5b60398190556040518181527f846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab70671823429060200160405180910390a150565b60008184118061147d57508183115b15611489575080610f0d565b611493848461186d565b905081811115610f0d575092915050565b60006114b08383611643565b905080610673576114c9836001600160a01b0316611881565b6114d283611897565b6040516020016114e3929190612245565b60408051601f198184030181529082905262461bcd60e51b82526106e4916004016122c3565b60008181526036602090815260409182902082518084019093528054835260010154908201526115399051421090565b6113c95760405163028e4e9760e51b815260040160405180910390fd5b600061156e83602001518460400151602001516118ae565b905082604001516020015160001415801561158c5750602082015142105b15610647576115a483602001516039546127106118c4565b610f0d9082612090565b600881901c600090815260209290925260409091208054600160ff9093169290921b9091179055565b60208101358135111580156115ff57506115ff6115f9368390038301836122f6565b51421090565b6113c9576040516302ef0c7360e21b815260040160405180910390fd5b6000610f0d83836119ae565b60004282600001511115801561064757505060200151421090565b604080516000808252602082019092526001600160a01b03841690839060405161166d9190612352565b60006040518083038185875af1925050503d80600081146116aa576040519150601f19603f3d011682016040523d82523d6000602084013e6116af565b606091505b5090949350505050565b6000610647825490565b6001600160a01b0381166116ea576040516362daafb160e11b815260040160405180910390fd5b603880546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b6106f782826113cc565b6117488282610f14565b6106f75761175581611881565b6117608360206119d8565b6040516020016114e392919061236e565b61177b8282610f14565b6106f75760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610f0d836001600160a01b038416611b73565b6117fb8282610f14565b156106f75760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f0d836001600160a01b038416611bc2565b818101828110156106475750600019610647565b60606106476001600160a01b03831660146119d8565b6060610647826118a684611cb5565b6001016119d8565b60008183116118bd5781610f0d565b5090919050565b60008080600019858709858702925082811083820303915050806000036118fe578382816118f4576118f46123e3565b0492505050610f0d565b8084116119455760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106e4565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008260000182815481106119c5576119c5612064565b9060005260206000200154905092915050565b606060006119e78360026123f9565b6119f2906002612090565b6001600160401b03811115611a0957611a0961204e565b6040519080825280601f01601f191660200182016040528015611a33576020820181803683370190505b509050600360fc1b81600081518110611a4e57611a4e612064565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a7d57611a7d612064565b60200101906001600160f81b031916908160001a9053506000611aa18460026123f9565b611aac906001612090565b90505b6001811115611b24576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611ae057611ae0612064565b1a60f81b828281518110611af657611af6612064565b60200101906001600160f81b031916908160001a90535060049490941c93611b1d81612410565b9050611aaf565b508315610f0d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106e4565b6000818152600183016020526040812054611bba57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610647565b506000610647565b60008181526001830160205260408120548015611cab576000611be6600183612427565b8554909150600090611bfa90600190612427565b9050818114611c5f576000866000018281548110611c1a57611c1a612064565b9060005260206000200154905080876000018481548110611c3d57611c3d612064565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611c7057611c7061243a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610647565b6000915050610647565b600080608083901c15611ccd5760809290921c916010015b604083901c15611ce25760409290921c916008015b602083901c15611cf75760209290921c916004015b601083901c15611d0c5760109290921c916002015b600883901c156106475760010192915050565b600060208284031215611d3157600080fd5b81356001600160e01b031981168114610f0d57600080fd5b600060208284031215611d5b57600080fd5b5035919050565b6001600160a01b03811681146113c957600080fd5b60008060408385031215611d8a57600080fd5b823591506020830135611d9c81611d62565b809150509250929050565b60008083601f840112611db957600080fd5b5081356001600160401b03811115611dd057600080fd5b6020830191508360208260051b8501011115611deb57600080fd5b9250929050565b60008060208385031215611e0557600080fd5b82356001600160401b03811115611e1b57600080fd5b611e2785828601611da7565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015611e6d578351151583529284019291840191600101611e4f565b50909695505050505050565b600080600080600060608688031215611e9157600080fd5b8535945060208601356001600160401b0380821115611eaf57600080fd5b611ebb89838a01611da7565b90965094506040880135915080821115611ed457600080fd5b50611ee188828901611da7565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b81811015611e6d57835183529284019291840191600101611f0e565b600060408284031215611f3c57600080fd5b50919050565b60008060608385031215611f5557600080fd5b82359150611f668460208501611f2a565b90509250929050565b60008060408385031215611f8257600080fd5b50508035926020909101359150565b600060408284031215611fa357600080fd5b610f0d8383611f2a565b60008060008060008060a08789031215611fc657600080fd5b8635611fd181611d62565b955060208701356001600160401b03811115611fec57600080fd5b611ff889828a01611da7565b909650945050604087013561200c81611d62565b9250606087013561201c81611d62565b80925050608087013590509295509295509295565b60006020828403121561204357600080fd5b8135610f0d81611d62565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106475761064761207a565b81835260006001600160fb1b038311156120bc57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006120e96040830186886120a3565b82810360208401526120fc8185876120a3565b979650505050505050565b6000808335601e1984360301811261211e57600080fd5b8301803591506001600160401b0382111561213857600080fd5b602001915036819003821315611deb57600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b600080604083850312156121bc57600080fd5b82516001600160401b03811681146121d357600080fd5b6020939093015192949293505050565b813581526020808301359082015260408101610647565b6001600160a01b038316815260608101610f0d602083018480358252602090810135910152565b60005b8381101561223c578181015183820152602001612224565b50506000910152565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b60208201526000835161229081602a850160208801612221565b660103b30b63ab2960cd1b602a9184019182015283516122b7816031840160208801612221565b01603101949350505050565b60208152600082518060208401526122e2816040850160208701612221565b601f01601f19169190910160400192915050565b60006040828403121561230857600080fd5b604051604081018181106001600160401b038211171561233857634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b60008251612364818460208701612221565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123a6816017850160208801612221565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123d7816028840160208801612221565b01602801949350505050565b634e487b7160e01b600052601260045260246000fd5b80820281158282048414176106475761064761207a565b60008161241f5761241f61207a565b506000190190565b818103818111156106475761064761207a565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220b309f671b8e19d4b799039d85a64646c38d5a7039b741c8381d1403a8713f8bf64736f6c63430008150033", + "nonce": "0x2c8e1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "function": null, + "arguments": [ + "0xCcD3837278C083027DeF4537b3e66343D940377F", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xec14cf37000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x112dc0", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000ccd3837278c083027def4537b3e66343d940377f000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e4ec14cf37000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8be57891432f175fa98311e1e197921abe10650d036cdb3432ce1762287ec002", + "transactionType": "CREATE", + "contractName": "NameChecker", + "contractAddress": "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x1e4f9b", + "value": "0x0", + "data": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611a34806100df6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806391d14854116100b8578063ca5f79951161007c578063ca5f7995146102df578063d547741f1461030d578063e04af3b714610320578063e786c3ad14610340578063fb3809be14610360578063fbc639091461037357600080fd5b806391d148541461027957806392aec2fc1461028c57806396237206146102b1578063a217fddf146102c4578063ca15c873146102cc57600080fd5b80632f2ff15d116100ff5780632f2ff15d1461020257806336568abe14610215578063439e42e7146102285780635c0a3caa1461023b5780639010d07c1461024e57600080fd5b806301ffc9a71461013c5780630fda4464146101645780631d367b5714610177578063245ed654146101bb578063248a9ca3146101d0575b600080fd5b61014f61014a3660046113ad565b610386565b60405190151581526020015b60405180910390f35b61014f6101723660046113d7565b6103b1565b6101a16040805180820190915260355460ff80821680845261010090920416602090920182905291565b6040805160ff93841681529290911660208301520161015b565b6101ce6101c93660046114aa565b6103d4565b005b6101f46101de3660046114fe565b6000908152600160208190526040909120015490565b60405190815260200161015b565b6101ce61021036600461152e565b610423565b6101ce61022336600461152e565b61044e565b61014f6102363660046113d7565b6104d1565b61014f6102493660046113d7565b61056f565b61026161025c36600461155a565b610737565b6040516001600160a01b03909116815260200161015b565b61014f61028736600461152e565b61074f565b6101f461029a366004611633565b6000601f600183510310601f830151029050919050565b6101ce6102bf3660046114aa565b61077a565b6101f4600081565b6101f46102da3660046114fe565b6107a7565b6102f26102ed3660046114fe565b6107be565b6040805193845260208401929092529082015260600161015b565b6101ce61031b36600461152e565b6107fd565b61033361032e3660046116f5565b610823565b60405161015b919061173e565b61035361034e3660046113d7565b6108b9565b60405161015b91906117d2565b6101ce61036e366004611845565b6108e9565b6101ce61038136600461187f565b610a09565b60006001600160e01b03198216635a05180f60e01b14806103ab57506103ab82610a1e565b92915050565b60006103bd838361056f565b806103cd57506103cd83836104d1565b9392505050565b60006103df81610a53565b61041d848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250610a60915050565b50505050565b6000828152600160208190526040909120015461043f81610a53565b6104498383610c00565b505050565b6001600160a01b03811633146104c35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104cd8282610c22565b5050565b6000806104de84846108b9565b805190915060005b818110156105635761054a610525848381518110610506576105066118a9565b60200260200101516000601f600183510310601f830151029050919050565b600881901c600090815260366020526040902054600160ff9092169190911b16151590565b1561055b57600193505050506103ab565b6001016104e6565b50600095945050505050565b600080600084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935050600019820190508115806105e75750826000815181106105d0576105d06118a9565b6020910101516001600160f81b031916602d60f81b145b8061061657508281815181106105ff576105ff6118a9565b6020910101516001600160f81b031916602d60f81b145b156106285760019450505050506103ab565b60005b8281101561072957838181518110610645576106456118a9565b01602001516001600160f81b0319169450602d60f81b8590036106b1578181141580156106995750838160010181518110610682576106826118a9565b6020910101516001600160f81b031916602d60f81b145b156106ac576001955050505050506103ab565b610721565b600360fc1b6001600160f81b03198616108015906106dd5750603960f81b6001600160f81b0319861611155b8061070f5750606160f81b6001600160f81b031986161080159061070f5750603d60f91b6001600160f81b0319861611155b610721576001955050505050506103ab565b60010161062b565b506000979650505050505050565b60008281526002602052604081206103cd9083610c44565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061078581610a53565b600061079461032e85876118bf565b90506107a08184610a60565b5050505050565b60008181526002602052604081206103ab90610c50565b6040805180820190915260355460ff8082168352610100909104166020820152600090819081906107f0908590610c5a565b9196909550909350915050565b6000828152600160208190526040909120015461081981610a53565b6104498383610c22565b80516060908067ffffffffffffffff8111156108415761084161157c565b60405190808252806020026020018201604052801561086a578160200160208202803683370190505b50915060005b818110156108b25761088d848281518110610506576105066118a9565b83828151811061089f5761089f6118a9565b6020908102919091010152600101610870565b5050919050565b6040805180820190915260355460ff80821683526101009091041660208201526060906103cd9084908490610ccb565b600054610100900460ff16158080156109095750600054600160ff909116105b806109235750303b158015610923575060005460ff166001145b6109865760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ba565b6000805460ff1916600117905580156109a9576000805461ff0019166101001790555b6109b4600085610dda565b6109be8383610de4565b801561041d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6000610a1481610a53565b6104498383610de4565b60006001600160e01b03198216637965db0b60e01b14806103ab57506301ffc9a760e01b6001600160e01b03198316146103ab565b610a5d8133610eca565b50565b8151600080600019815b84811015610b4a57868181518110610a8457610a846118a9565b6020026020010151600003610adb5760405162461bcd60e51b815260206004820181905260248201527f4e616d65436865636b65723a20696e76616c6964207061636b656420776f726460448201526064016104ba565b60f8878281518110610aef57610aef6118a9565b6020026020010151901c9350610b058285610f23565b9150610b118385610f39565b9250610b42878281518110610b2857610b286118a9565b6020026020010151876036610f489092919063ffffffff16565b600101610a6a565b508415610bbc576040805180820190915260355460ff808216808452610100909204166020830152610b7d908390610f23565b9150610b9083826020015160ff16610f39565b815190935060ff1682148015610bac5750806020015160ff1683145b610bba57610bba8284610de4565b505b60408051858152861515602082015233917f060d5a3fc05fdd11d7ba941d00a4fdcde096fb95171930e19997ce2b7df89174910160405180910390a2505050505050565b610c0a8282610f97565b60008281526002602052604090206104499082611002565b610c2c8282611017565b6000828152600260205260409020610449908261107e565b60006103cd8383611093565b60006103ab825490565b6000806000610c70846000015160ff1686610f23565b9150610c83846020015160ff1686610f23565b8281036001818101808302821c868a039092010203945090915061ffff841115610cc357604051630faa3ef560e11b8152600481018590526024016104ba565b509250925092565b60608260008080610cdc8487610c5a565b9250925092508267ffffffffffffffff811115610cfb57610cfb61157c565b604051908082528060200260200182016040528015610d2e57816020015b6060815260200190600190039081610d195790505b50945060008060005b86811015610dcc57610d4b84820188610f23565b91508085015b828111610dc357610d6481838d8f6118cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508b5160018801978d935091508110610db057610db06118a9565b6020908102919091010152600101610d51565b50600101610d37565b505050505050509392505050565b6104cd8282610c00565b60ff821615801590610dfc57508060ff168260ff1611155b610e5f5760405162461bcd60e51b815260206004820152602e60248201527f4e616d65436865636b65723a206d696e20776f7264206c656e677468203e206d60448201526d0c2f040eedee4c840d8cadccee8d60931b60648201526084016104ba565b60408051808201825260ff84811680835290841660209283018190526035805461ffff191683176101008302179055835191825291810191909152815133927faabf778cd749a472313a9476aa3b29565e69697c48eb0f82b52fc9f071fd3c95928290030190a25050565b610ed4828261074f565b6104cd57610ee1816110bd565b610eec8360206110cf565b604051602001610efd9291906118f6565b60408051601f198184030181529082905262461bcd60e51b82526104ba9160040161196b565b6000818310610f3257816103cd565b5090919050565b6000818311610f3257816103cd565b8015610f7257600882901c60009081526020849052604090208054600160ff85161b179055505050565b600882901c60009081526020849052604090208054600160ff85161b19169055505050565b610fa1828261074f565b6104cd5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006103cd836001600160a01b03841661126b565b611021828261074f565b156104cd5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006103cd836001600160a01b0384166112ba565b60008260000182815481106110aa576110aa6118a9565b9060005260206000200154905092915050565b60606103ab6001600160a01b03831660145b606060006110de836002611994565b6110e99060026119ab565b67ffffffffffffffff8111156111015761110161157c565b6040519080825280601f01601f19166020018201604052801561112b576020820181803683370190505b509050600360fc1b81600081518110611146576111466118a9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611175576111756118a9565b60200101906001600160f81b031916908160001a9053506000611199846002611994565b6111a49060016119ab565b90505b600181111561121c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106111d8576111d86118a9565b1a60f81b8282815181106111ee576111ee6118a9565b60200101906001600160f81b031916908160001a90535060049490941c93611215816119be565b90506111a7565b5083156103cd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ba565b60008181526001830160205260408120546112b2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556103ab565b5060006103ab565b600081815260018301602052604081205480156113a35760006112de6001836119d5565b85549091506000906112f2906001906119d5565b9050818114611357576000866000018281548110611312576113126118a9565b9060005260206000200154905080876000018481548110611335576113356118a9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611368576113686119e8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506103ab565b60009150506103ab565b6000602082840312156113bf57600080fd5b81356001600160e01b0319811681146103cd57600080fd5b600080602083850312156113ea57600080fd5b823567ffffffffffffffff8082111561140257600080fd5b818501915085601f83011261141657600080fd5b81358181111561142557600080fd5b86602082850101111561143757600080fd5b60209290920196919550909350505050565b60008083601f84011261145b57600080fd5b50813567ffffffffffffffff81111561147357600080fd5b6020830191508360208260051b850101111561148e57600080fd5b9250929050565b803580151581146114a557600080fd5b919050565b6000806000604084860312156114bf57600080fd5b833567ffffffffffffffff8111156114d657600080fd5b6114e286828701611449565b90945092506114f5905060208501611495565b90509250925092565b60006020828403121561151057600080fd5b5035919050565b80356001600160a01b03811681146114a557600080fd5b6000806040838503121561154157600080fd5b8235915061155160208401611517565b90509250929050565b6000806040838503121561156d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115bb576115bb61157c565b604052919050565b600082601f8301126115d457600080fd5b813567ffffffffffffffff8111156115ee576115ee61157c565b611601601f8201601f1916602001611592565b81815284602083860101111561161657600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561164557600080fd5b813567ffffffffffffffff81111561165c57600080fd5b611668848285016115c3565b949350505050565b600067ffffffffffffffff8084111561168b5761168b61157c565b8360051b602061169c818301611592565b868152935090840190808401878311156116b557600080fd5b855b838110156116e9578035858111156116cf5760008081fd5b6116db8a828a016115c3565b8352509082019082016116b7565b50505050509392505050565b60006020828403121561170757600080fd5b813567ffffffffffffffff81111561171e57600080fd5b8201601f8101841361172f57600080fd5b61166884823560208401611670565b6020808252825182820181905260009190848201906040850190845b818110156117765783518352928401929184019160010161175a565b50909695505050505050565b60005b8381101561179d578181015183820152602001611785565b50506000910152565b600081518084526117be816020860160208601611782565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561182757603f198886030184526118158583516117a6565b945092850192908501906001016117f9565b5092979650505050505050565b803560ff811681146114a557600080fd5b60008060006060848603121561185a57600080fd5b61186384611517565b925061187160208501611834565b91506114f560408501611834565b6000806040838503121561189257600080fd5b61189b83611834565b915061155160208401611834565b634e487b7160e01b600052603260045260246000fd5b60006103cd368484611670565b600080858511156118dc57600080fd5b838611156118e957600080fd5b5050820193919092039150565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161192e816017850160208801611782565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161195f816028840160208801611782565b01602801949350505050565b6020815260006103cd60208301846117a6565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103ab576103ab61197e565b808201808211156103ab576103ab61197e565b6000816119cd576119cd61197e565b506000190190565b818103818111156103ab576103ab61197e565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202247f1c7e637d2639344dd5ecdf7446256de2b88f161ff1c1c345bfb1a96a16764736f6c63430008150033", + "nonce": "0x2c8e3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "function": null, + "arguments": [ + "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xfb3809be000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0xe96c2", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000af4a77bc41320bedf62d33ad278d76731eaabcf4000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064fb3809be000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x75907324b5eaccf7026a2c425bdcd52383335de33068c0124a53d0ab46ccfee1", + "transactionType": "CREATE", + "contractName": "RNSDomainPrice", + "contractAddress": "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x31bf47", + "value": "0x0", + "data": "0x60806040526200000e62000014565b620000d5565b600054610100900460ff1615620000815760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000d3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612bee80620000e56000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635c68c83011610104578063ca15c873116100a2578063e229a67011610071578063e229a67014610480578063f4651f4914610493578063f5b541a6146104b4578063fe303ebf146104c957600080fd5b8063ca15c87314610434578063d40ed58c14610447578063d547741f1461045a578063dd28776d1461046d57600080fd5b80637174026e116100de5780637174026e146103db5780639010d07c146103ee57806391d1485414610419578063a217fddf1461042c57600080fd5b80635c68c830146103985780635ef32e2c146103ab578063713a69a7146103b357600080fd5b80632f6ee6951161017157806339e47da71161014b57806339e47da7146102ec5780634c255c971461034457806353faf90914610365578063599eaabf1461038557600080fd5b80632f6ee695146102ac57806335feb741146102c657806336568abe146102d957600080fd5b8063248a9ca3116101ad578063248a9ca31461023257806328dd3065146102565780632be09ecc1461026b5780632f2ff15d1461029957600080fd5b806301ffc9a7146101d4578063037f1769146101fc5780630a44f51f1461021d575b600080fd5b6101e76101e2366004612074565b6104dc565b60405190151581526020015b60405180910390f35b61020f61020a36600461209e565b610507565b6040519081526020016101f3565b610225610599565b6040516101f391906120b7565b61020f61024036600461209e565b6000908152600160208190526040909120015490565b61026961026436600461212e565b610676565b005b603554603954603a54604080516001600160a01b0390941684526020840192909252908201526060016101f3565b6102696102a7366004612163565b610692565b6102b4601281565b60405160ff90911681526020016101f3565b6102696102d43660046121d7565b6106bd565b6102696102e7366004612163565b6106d2565b604080518082018252600080825260209182015281518083018352603b546001600160c01b0381168083526001600160401b03600160c01b9092048216928401928352845190815291511691810191909152016101f3565b61034d61271081565b6040516001600160401b0390911681526020016101f3565b61037861037336600461225c565b610755565b6040516101f3919061231f565b61026961039336600461225c565b61087c565b61020f6103a6366004612365565b61093a565b60375461020f565b6103c66103c1366004612478565b6109b8565b604080519283526020830191909152016101f3565b61020f6103e936600461209e565b6109e4565b6104016103fc3660046124ac565b610a77565b6040516001600160a01b0390911681526020016101f3565b6101e7610427366004612163565b610a96565b61020f600081565b61020f61044236600461209e565b610ac1565b6102696104553660046124e6565b610ad8565b610269610468366004612163565b610c8e565b61026961047b3660046125bf565b610cb4565b61026961048e36600461262a565b610dc0565b6104a66104a1366004612646565b610dd4565b6040516101f392919061268a565b61020f600080516020612b9983398151915281565b6102696104d736600461209e565b610f68565b60006001600160e01b03198216635a05180f60e01b1480610501575061050182610f7c565b92915050565b603554603a5460395460405163052571af60e51b815260009361050193869360129384936001600160a01b03169263a4ae35e09261055092600401918252602082015260400190565b608060405180830381865afa15801561056d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059191906126c5565b929190610fb1565b603854606090806001600160401b038111156105b7576105b76123d6565b6040519080825280602002602001820160405280156105fc57816020015b60408051808201909152600080825260208201528152602001906001900390816105d55790505b5091506000805b82811015610670578060010191508184828151811061062457610624612750565b60200260200101516000018181525050603c60008381526020019081526020016000205484828151811061065a5761065a612750565b6020908102919091018101510152600101610603565b50505090565b600061068181610ff2565b61068c848484610fff565b50505050565b600082815260016020819052604090912001546106ae81610ff2565b6106b88383611071565b505050565b60006106c881610ff2565b6106b88383611093565b6001600160a01b03811633146107475760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61075182826111ac565b5050565b6060600080516020612b9983398151915261076f81610ff2565b60006107818b8b8b8b8b8b8b8b6111ce565b905033816001600160401b0381111561079c5761079c6123d6565b6040519080825280602002602001820160405280156107c5578160200160208202803683370190505b50935060005b8281101561086c57610842828e8e848181106107e9576107e9612750565b905060200201358d8d8581811061080257610802612750565b905060200201358c8c8681811061081b5761081b612750565b905060200201358b8b8781811061083457610834612750565b90506020020135600061121c565b85828151811061085457610854612750565b911515602092830291909101909101526001016107cb565b5050505098975050505050505050565b600080516020612b9983398151915261089481610ff2565b60006108a68a8a8a8a8a8a8a8a6111ce565b90503360005b8281101561092c57610923828d8d848181106108ca576108ca612750565b905060200201358c8c858181106108e3576108e3612750565b905060200201358b8b868181106108fc576108fc612750565b905060200201358a8a8781811061091557610915612750565b90506020020135600161121c565b506001016108ac565b505050505050505050505050565b6000603e600061097f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112ab92505050565b8152602001908152602001600020549050806000036109b157604051635421761560e11b815260040160405180910390fd5b1992915050565b6000806109d26109cd84805160209091012090565b6112b6565b91506109dd826109e4565b9050915091565b603554603a5460395460405163052571af60e51b815260048101929092526024820152600091610501918491601291829161059191601119916001600160a01b03169063a4ae35e090604401608060405180830381865afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7191906126c5565b90611330565b6000828152600260205260408120610a8f908361148a565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260026020526040812061050190611496565b600054610100900460ff1615808015610af85750600054600160ff909116105b80610b125750303b158015610b12575060005460ff166001145b610b755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161073e565b6000805460ff191660011790558015610b98576000805461ff0019166101001790555b89600080516020612b9983398151915260005b82811015610beb57610be3828f8f84818110610bc957610bc9612750565b9050602002016020810190610bde9190612766565b6114a0565b600101610bab565b50603680546001600160a01b0319166001600160a01b038816179055610c1260008f6114a0565b610c1c8b8b611093565b610c25896114aa565b610c2e886114df565b610c39878686610fff565b5050801561092c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b60008281526001602081905260409091200154610caa81610ff2565b6106b883836111ac565b600080516020612b99833981519152610ccc81610ff2565b83801580610cda5750808314155b15610cf857604051634ec4810560e11b815260040160405180910390fd5b600033815b83811015610db557868682818110610d1757610d17612750565b9050602002013519925082603e60008b8b85818110610d3857610d38612750565b90506020020135815260200190815260200160002081905550888882818110610d6357610d63612750565b90506020020135826001600160a01b03167fb52d278cb3ef3b003bdfb385ce2eb23a83eb6d713724abfba1acaa16ccf6621485604051610da591815260200190565b60405180910390a3600101610cfd565b505050505050505050565b6000610dcb81610ff2565b610751826114df565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610e078561155b565b855160208701209091506000906000818152603e60205260409020549091508015610e3e57610e37811987612799565b8552610f3b565b6000603c6000610e5086603854611649565b81526020019081526020016000205490508087610e6d9190612799565b86526036546001600160a01b03166353f9195e610ebb7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888b6000918252805160209182012090526040902090565b6040518263ffffffff1660e01b8152600401610ed991815260200190565b602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a91906127b0565b15610f3957610f36603754610f2e856112b6565b61271061165f565b85525b505b8351610f46906109e4565b60208501528451610f56906109e4565b60208601525092959194509092505050565b6000610f7381610ff2565b610751826114aa565b60006001600160e01b03198216637965db0b60e01b148061050157506301ffc9a760e01b6001600160e01b0319831614610501565b6000610fe784610fd7876000015160070b886040015186610fd291906127d2565b611748565b610fe2600187611748565b61165f565b90505b949350505050565b610ffc81336117a2565b50565b603580546001600160a01b0319166001600160a01b0385169081179091556039839055603a8290558190336001600160a01b03167f671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b8560405161106491815260200190565b60405180910390a4505050565b61107b82826117fb565b60008281526002602052604090206106b89082611866565b60408051808201909152600080825260208201523390603854839060005b8281101561115e578686828181106110cb576110cb612750565b9050604002018036038101906110e191906127f9565b93506110f182856000015161187b565b6020808601805187516000908152603c90935260409283902055865190519151929450916001600160a01b038816917f85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a779161114e91815260200190565b60405180910390a36001016110b1565b5060385481146111a457603881905560405181906001600160a01b038616907f7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b90600090a35b505050505050565b6111b6828261188a565b60008281526002602052604090206106b890826118f1565b868015806111dc5750858114155b806111e75750838114155b806111f25750818114155b1561121057604051634ec4810560e11b815260040160405180910390fd5b98975050505050505050565b60008061122886610507565b6000888152603d6020526040902090915083806112455750805482115b9250821561129f57818155426001820155604080518381526020810187905287918a916001600160a01b038d16917f60d5fd6d2284807447aae62f93c05517a647b8e8479c3af2c27ee1d1c85b540f910160405180910390a45b50509695505050505050565b805160209091012090565b6000818152603d6020526040812060018101548083036112da575060009392505050565b60006112e68242612847565b835460408051808201909152603b546001600160c01b0381168252600160c01b90046001600160401b03166020820152919250611327919061271084611906565b95945050505050565b604080516080810182526000808252602082018190529181018290526060810191909152600061136960018560400151610fd29061285a565b90506001600160ff1b0381111561139f576040808501519051633e87ca5d60e11b815260039190910b600482015260240161073e565b60006113af6001610fd28661285a565b90506001600160ff1b038111156113df57604051633e87ca5d60e11b8152600385900b600482015260240161073e565b845160009060070b6113f1838561287d565b6113fb91906128c3565b9050677fffffffffffffff81131561144757604086810151875191516329b2fb5560e11b8152600391820b60048201529087900b602482015260079190910b604482015260640161073e565b60405180608001604052808260070b815260200187602001516001600160401b031681526020018660030b81526020018760600151815250935050505092915050565b6000610a8f83836119dc565b6000610501825490565b6107518282611071565b6037819055604051819033907f1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf07390600090a350565b80603b6114ec8282612906565b503390507fa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc6461151e6020840184612948565b61152e6040850160208601612965565b604080516001600160c01b0390931683526001600160401b0390911660208301520160405180910390a250565b600080600080845190505b8083101561164157600085848151811061158257611582612750565b01602001516001600160f81b0319169050600160ff1b8110156115aa57600184019350611635565b600760fd1b6001600160f81b0319821610156115cb57600284019350611635565b600f60fc1b6001600160f81b0319821610156115ec57600384019350611635565b601f60fb1b6001600160f81b03198216101561160d57600484019350611635565b603f60fa1b6001600160f81b03198216101561162e57600584019350611635565b6006840193505b50600190910190611566565b509392505050565b60008183106116585781610a8f565b5090919050565b60008080600019858709858702925082811083820303915050806000036116995783828161168f5761168f6128ad565b0492505050610a8f565b8084116116e05760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161073e565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000808260030b121561177a5761175e8261285a565b61176990600a612a66565b6117739084612a78565b9050610501565b60008260030b131561179b5761179182600a612a66565b6117739084612799565b5081610501565b6117ac8282610a96565b610751576117b981611a06565b6117c4836020611a18565b6040516020016117d5929190612ab0565b60408051601f198184030181529082905262461bcd60e51b825261073e91600401612b25565b6118058282610a96565b6107515760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610a8f836001600160a01b038416611bb3565b60008183116116585781610a8f565b6118948282610a96565b156107515760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610a8f836001600160a01b038416611c02565b60008085602001516001600160401b0316836119229190612a78565b9050801580611939575085516001600160c01b0316155b156119475784915050610fea565b85516001600160c01b03166001600160401b0385160361196b576000915050610fea565b61ffff81111561199157604051637359f25f60e01b81526004810182905260240161073e565b60006119c18760000151866001600160401b0316036001600160c01b0316612710876001600160401b031661165f565b90506119d1868261271085611cf5565b979650505050505050565b60008260000182815481106119f3576119f3612750565b9060005260206000200154905092915050565b60606105016001600160a01b03831660145b60606000611a27836002612799565b611a32906002612b58565b6001600160401b03811115611a4957611a496123d6565b6040519080825280601f01601f191660200182016040528015611a73576020820181803683370190505b509050600360fc1b81600081518110611a8e57611a8e612750565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611abd57611abd612750565b60200101906001600160f81b031916908160001a9053506000611ae1846002612799565b611aec906001612b58565b90505b6001811115611b64576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611b2057611b20612750565b1a60f81b828281518110611b3657611b36612750565b60200101906001600160f81b031916908160001a90535060049490941c93611b5d81612b6b565b9050611aef565b508315610a8f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161073e565b6000818152600183016020526040812054611bfa57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610501565b506000610501565b60008181526001830160205260408120548015611ceb576000611c26600183612847565b8554909150600090611c3a90600190612847565b9050818114611c9f576000866000018281548110611c5a57611c5a612750565b9060005260206000200154905080876000018481548110611c7d57611c7d612750565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611cb057611cb0612b82565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610501565b6000915050610501565b600082841480611d07575061ffff8216155b15611d13575083610fea565b50836000808080611d3461ffff8716611d2b8a611e58565b61ffff16611649565b90505b61ffff811615611d8a57611d518561ffff83168a0a612029565b90945092508315611d6a57829450808603955080820191505b611d83600261ffff83160461ffff168761ffff16611649565b9050611d37565b505b61ffff851615611dfd57611da08488612029565b90935091508215611dbf57600019909401939092508290600101611d8c565b61ffff811615611de457858481611dd857611dd86128ad565b04935060001901611d8c565b611def84888861165f565b600019909501949350611d8c565b6000611e0887611e58565b90505b61ffff821615611e4c576000611e298261ffff168461ffff16611649565b90508061ffff16880a8681611e4057611e406128ad565b04955090910390611e0b565b50505050949350505050565b60006003821015611e6b575060ff919050565b6004821015611e7c57506080919050565b6010821015611e8d57506040919050565b610100821015611e9f57506020919050565b611bdc821015611eb157506014919050565b612c70821015611ec357506013919050565b614aa9821015611ed557506012919050565b618554821015611ee757506011919050565b62010000821015611efa57506010919050565b62021837821015611f0d5750600f919050565b6204e046821015611f205750600e919050565b620ced4c821015611f335750600d919050565b62285146821015611f465750600c919050565b629aa2ad821015611f595750600b919050565b6303080c01821015611f6d5750600a919050565b6315c5cbbd821015611f8157506009919050565b640100000000821015611f9657506008919050565b6417c6a1f29f821015611fab57506007919050565b6506597fa94f5c821015611fc157506006919050565b66093088c35d733b821015611fd857506005919050565b68010000000000000000821015611ff157506004919050565b6a285145f31ae515c447bb5782101561200c57506003919050565b600160801b82101561202057506002919050565b5060015b919050565b60008083600003612040575060019050600061206d565b83830283858281612053576120536128ad565b041461206657600080925092505061206d565b6001925090505b9250929050565b60006020828403121561208657600080fd5b81356001600160e01b031981168114610a8f57600080fd5b6000602082840312156120b057600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b82811015612101576120f184835180518252602090810151910152565b92840192908501906001016120d4565b5091979650505050505050565b6001600160a01b0381168114610ffc57600080fd5b80356120248161210e565b60008060006060848603121561214357600080fd5b833561214e8161210e565b95602085013595506040909401359392505050565b6000806040838503121561217657600080fd5b8235915060208301356121888161210e565b809150509250929050565b60008083601f8401126121a557600080fd5b5081356001600160401b038111156121bc57600080fd5b6020830191508360208260061b850101111561206d57600080fd5b600080602083850312156121ea57600080fd5b82356001600160401b0381111561220057600080fd5b61220c85828601612193565b90969095509350505050565b60008083601f84011261222a57600080fd5b5081356001600160401b0381111561224157600080fd5b6020830191508360208260051b850101111561206d57600080fd5b6000806000806000806000806080898b03121561227857600080fd5b88356001600160401b038082111561228f57600080fd5b61229b8c838d01612218565b909a50985060208b01359150808211156122b457600080fd5b6122c08c838d01612218565b909850965060408b01359150808211156122d957600080fd5b6122e58c838d01612218565b909650945060608b01359150808211156122fe57600080fd5b5061230b8b828c01612218565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b8181101561235957835115158352928401929184019160010161233b565b50909695505050505050565b6000806020838503121561237857600080fd5b82356001600160401b038082111561238f57600080fd5b818501915085601f8301126123a357600080fd5b8135818111156123b257600080fd5b8660208285010111156123c457600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126123fd57600080fd5b81356001600160401b0380821115612417576124176123d6565b604051601f8301601f19908116603f0116810190828211818310171561243f5761243f6123d6565b8160405283815286602085880101111561245857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561248a57600080fd5b81356001600160401b038111156124a057600080fd5b610fea848285016123ec565b600080604083850312156124bf57600080fd5b50508035926020909101359150565b6000604082840312156124e057600080fd5b50919050565b60008060008060008060008060008060006101408c8e03121561250857600080fd5b6125128c3561210e565b8b359a506001600160401b038060208e0135111561252f57600080fd5b61253f8e60208f01358f01612218565b909b50995060408d013581101561255557600080fd5b506125668d60408e01358e01612193565b909850965060608c0135955061257f8d60808e016124ce565b945060c08c013561258f8161210e565b935061259d60e08d01612123565b92506101008c013591506101208c013590509295989b509295989b9093969950565b600080600080604085870312156125d557600080fd5b84356001600160401b03808211156125ec57600080fd5b6125f888838901612218565b9096509450602087013591508082111561261157600080fd5b5061261e87828801612218565b95989497509550505050565b60006040828403121561263c57600080fd5b610a8f83836124ce565b6000806040838503121561265957600080fd5b82356001600160401b0381111561266f57600080fd5b61267b858286016123ec565b95602094909401359450505050565b825181526020808401518183015282516040830152820151606082015260808101610a8f565b6001600160401b0381168114610ffc57600080fd5b6000608082840312156126d757600080fd5b604051608081018181106001600160401b03821117156126f9576126f96123d6565b6040528251600781900b811461270e57600080fd5b8152602083015161271e816126b0565b60208201526040830151600381900b811461273857600080fd5b60408201526060928301519281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561277857600080fd5b8135610a8f8161210e565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761050157610501612783565b6000602082840312156127c257600080fd5b81518015158114610a8f57600080fd5b600381810b9083900b01637fffffff8113637fffffff198212171561050157610501612783565b60006040828403121561280b57600080fd5b604051604081018181106001600160401b038211171561282d5761282d6123d6565b604052823581526020928301359281019290925250919050565b8181038181111561050157610501612783565b60008160030b637fffffff19810361287457612874612783565b60000392915050565b80820260008212600160ff1b8414161561289957612899612783565b818105831482151761050157610501612783565b634e487b7160e01b600052601260045260246000fd5b6000826128d2576128d26128ad565b600160ff1b8214600019841416156128ec576128ec612783565b500590565b6001600160c01b0381168114610ffc57600080fd5b8135612911816128f1565b81546001600160c01b03199081166001600160c01b03929092169182178355602084013561293e816126b0565b60c01b1617905550565b60006020828403121561295a57600080fd5b8135610a8f816128f1565b60006020828403121561297757600080fd5b8135610a8f816126b0565b600181815b808511156129bd5781600019048211156129a3576129a3612783565b808516156129b057918102915b93841c9390800290612987565b509250929050565b6000826129d457506001610501565b816129e157506000610501565b81600181146129f75760028114612a0157612a1d565b6001915050610501565b60ff841115612a1257612a12612783565b50506001821b610501565b5060208310610133831016604e8410600b8410161715612a40575081810a610501565b612a4a8383612982565b8060001904821115612a5e57612a5e612783565b029392505050565b6000610a8f63ffffffff8416836129c5565b600082612a8757612a876128ad565b500490565b60005b83811015612aa7578181015183820152602001612a8f565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612ae8816017850160208801612a8c565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612b19816028840160208801612a8c565b01602801949350505050565b6020815260008251806020840152612b44816040850160208701612a8c565b601f01601f19169190910160400192915050565b8082018082111561050157610501612783565b600081612b7a57612b7a612783565b506000190190565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a264697066735822122076690926c2db8bd93ce00d4367403bba09c400c1ff6d19c14bc2e66eb1b25abc64736f6c63430008150033", + "nonce": "0x2c8e5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "function": null, + "arguments": [ + "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xd40ed58c000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000076a700000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000000000000000000000000000000000000000151804cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000024ea4122ae0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000002e24d16b5a80000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000008a6e74420f9" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x145bcd", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000007ac1624287b0959d664cced3a01a51a440353b42000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000264d40ed58c000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000076a700000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000000000000000000000000000000000000000151804cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000024ea4122ae0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000002e24d16b5a80000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000008a6e74420f900000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e6" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "transactionType": "CREATE", + "contractName": "RNSReverseRegistrar", + "contractAddress": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x1772f1", + "value": "0x0", + "data": "0x608060405261000d3361001a565b610015610075565b610134565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b600054610100900460ff16156100e15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614610132576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6113db806101436000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638c84331411610097578063c66485b211610066578063c66485b21461020d578063c911994114610220578063d472ad0414610233578063f2fde38b1461024657600080fd5b80638c843314146101bf5780638da5cb5b146101d0578063b93f9b0a146101e7578063c47f0027146101fa57600080fd5b80631e83409a116100d35780631e83409a1461016a5780633efa047f1461017d578063485cc955146101a2578063715018a6146101b757600080fd5b806301ffc9a7146100fa578063092c5b3b146101225780630f5a546614610157575b600080fd5b61010d610108366004610e5b565b610259565b60405190151581526020015b60405180910390f35b6101497f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335781565b604051908152602001610119565b610149610165366004610e9a565b6102ab565b610149610178366004610ed3565b6102d1565b6034546001600160a01b03165b6040516001600160a01b039091168152602001610119565b6101b56101b0366004610e9a565b6102eb565b005b6101b561041f565b6033546001600160a01b031661018a565b6000546201000090046001600160a01b031661018a565b61018a6101f5366004610ef0565b610433565b610149610208366004610f52565b6104f5565b6101b561021b366004610ed3565b610502565b61014961022e366004610f94565b61057b565b610149610241366004610ed3565b61073a565b6101b5610254366004610ed3565b610776565b60006001600160e01b0319821663d96a46ad60e01b148061028a57506001600160e01b031982166301ffc9a760e01b145b806102a557506001600160e01b0319821663d5a614db60e01b145b92915050565b60006102b56107ef565b826102bf8161098e565b6102c98484610acd565b949350505050565b6034546000906102a59083906001600160a01b03166102ab565b600054610100900460ff161580801561030b5750600054600160ff909116105b806103255750303b158015610325575060005460ff166001145b61038d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156103b0576000805461ff0019166101001790555b603380546001600160a01b0319166001600160a01b0384161790556103d483610bb4565b801561041a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610427610c0f565b6104316000610bb4565b565b6033546040516303e9e60960e01b81526004810183905260009182916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610481573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104a9919081019061114e565b805160200151909150600080516020611386833981519152146104df57604051631bf4348160e31b815260040160405180910390fd5b8051604001516104ee90610c70565b9392505050565b60006104ee33848461057b565b61050a610c0f565b6001600160a01b038116610531576040516362daafb160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf90600090a250565b60006105856107ef565b8361058f8161098e565b6105988561073a565b6033546040516331a9108f60e11b8152600481018390529193506001600160a01b03169030908290636352211e90602401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611271565b6001600160a01b031614610656576034546000906106329088906001600160a01b0316610acd565b905083811461065457604051631bf4348160e31b815260040160405180910390fd5b505b6040516303e9e60960e01b8152600481018490526000906001600160a01b038316906303e9e60990602401600060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c6919081019061114e565b602081015151604051637737221360e01b81529192506001600160a01b0316906377372213906106fe9087908a908a9060040161128e565b600060405180830381600087803b15801561071857600080fd5b505af115801561072c573d6000803e3d6000fd5b505050505050509392505050565b60006102a5600080516020611386833981519152610760846001600160a01b0316610d0a565b6000918252805160209182012090526040902090565b61077e610c0f565b6001600160a01b0381166107e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610384565b6107ec81610bb4565b50565b6033546040516331a9108f60e11b8152600080516020611386833981519152600482018190526001600160a01b0390921691906000908390636352211e90602401602060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190611271565b90506001600160a01b0381163014806108fb575060405163020604bf60e21b81526004810183905230906001600160a01b0385169063081812fc90602401602060405180830381865afa1580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f09190611271565b6001600160a01b0316145b80610971575060405163e985e9c560e01b81526001600160a01b03828116600483015230602483015284169063e985e9c590604401602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906112c4565b61041a576040516306b7c75960e31b815260040160405180910390fd5b60335433906001600160a01b03908116908316821480610a395750604051632474521560e21b81527f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335760048201526001600160a01b0383811660248301528216906391d1485490604401602060405180830381865afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3991906112c4565b80610ab1575060405163e985e9c560e01b81526001600160a01b038481166004830152838116602483015282169063e985e9c590604401602060405180830381865afa158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab191906112c4565b61041a576040516282b42960e81b815260040160405180910390fd5b600080610ae2846001600160a01b0316610d0a565b603354604051630570891f60e01b81529192506001600160a01b031690630570891f90610b31906000805160206113868339815191529085908890309067ffffffffffffffff906004016112df565b60408051808303816000875af1158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190611343565b6040519093508391506001600160a01b038616907f53591c13f73c953042ec59cc15c968c03041980e380816e0b08dfcead86c89ac90600090a35092915050565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6000546001600160a01b03620100009091041633146104315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b60008151602814610c9457604051638dc6ac0160e01b815260040160405180910390fd5b6000805b6028811015610d035761010082029150610cd1848281518110610cbd57610cbd61136f565b01602001516001600160f81b031916610d7b565b60ff1660100282019150610cf3848260010181518110610cbd57610cbd61136f565b60ff169190910190600201610c98565b5092915050565b6060602881526020810160285b8015610d74576001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a828201536010840493506001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a82820153601084049350610d17565b5050919050565b60006001600160f81b03198216606160f81b11801590610da95750603360f91b6001600160f81b0319831611155b15610db9575060f81c6056190190565b6001600160f81b03198216604160f81b11801590610de55750602360f91b6001600160f81b0319831611155b15610df5575060f81c6036190190565b6001600160f81b03198216600360fc1b11801590610e215750603960f81b6001600160f81b0319831611155b15610e31575060f81c602f190190565b604051633fd7c86760e01b81526001600160f81b031983166004820152602401610384565b919050565b600060208284031215610e6d57600080fd5b81356001600160e01b0319811681146104ee57600080fd5b6001600160a01b03811681146107ec57600080fd5b60008060408385031215610ead57600080fd5b8235610eb881610e85565b91506020830135610ec881610e85565b809150509250929050565b600060208284031215610ee557600080fd5b81356104ee81610e85565b600060208284031215610f0257600080fd5b5035919050565b60008083601f840112610f1b57600080fd5b50813567ffffffffffffffff811115610f3357600080fd5b602083019150836020828501011115610f4b57600080fd5b9250929050565b60008060208385031215610f6557600080fd5b823567ffffffffffffffff811115610f7c57600080fd5b610f8885828601610f09565b90969095509350505050565b600080600060408486031215610fa957600080fd5b8335610fb481610e85565b9250602084013567ffffffffffffffff811115610fd057600080fd5b610fdc86828701610f09565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561102257611022610fe9565b60405290565b6040516060810167ffffffffffffffff8111828210171561102257611022610fe9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561107457611074610fe9565b604052919050565b60005b8381101561109757818101518382015260200161107f565b50506000910152565b805167ffffffffffffffff81168114610e5657600080fd5b80518015158114610e5657600080fd5b6000608082840312156110da57600080fd5b6040516080810181811067ffffffffffffffff821117156110fd576110fd610fe9565b8060405250809150825161111081610e85565b8152602083015161112081610e85565b6020820152611131604084016110a0565b6040820152611142606084016110b8565b60608201525092915050565b6000602080838503121561116157600080fd5b825167ffffffffffffffff8082111561117957600080fd5b9084019060a0828703121561118d57600080fd5b611195610fff565b8251828111156111a457600080fd5b8301606081890312156111b657600080fd5b6111be611028565b815160ff811681146111cf57600080fd5b815281860151868201526040820151848111156111eb57600080fd5b80830192505088601f83011261120057600080fd5b81518481111561121257611212610fe9565b611224601f8201601f1916880161104b565b9450808552898782850101111561123a57600080fd5b6112498188870189860161107c565b5060408101849052825250611260878486016110c8565b848201528094505050505092915050565b60006020828403121561128357600080fd5b81516104ee81610e85565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156112d657600080fd5b6104ee826110b8565b85815260a06020820152600085518060a08401526113048160c0850160208a0161107c565b6001600160a01b03958616604084015293909416606082015267ffffffffffffffff91909116608082015260c0601f909201601f191601019392505050565b6000806040838503121561135657600080fd5b61135f836110a0565b9150602083015190509250929050565b634e487b7160e01b600052603260045260246000fdfe91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2a264697066735822122049d04f0a54497bd86795b9d36ef715d010bd0683d9b3512d8cfc1fae5778484f64736f6c63430008150033", + "nonce": "0x2c8e7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "function": null, + "arguments": [ + "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0x485cc955000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0xce3be", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656400000000000000000000000049e2f4aa6edd7453a4d9c91cc8fb02fcba68d7ea000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf8300000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e8" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x68422a6b0ad97b5b1e0b22f5615edc36f1f9162aba8064402b52e15e445c2db3", + "transactionType": "CREATE", + "contractName": "PublicResolver", + "contractAddress": "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x313d44", + "value": "0x0", + "data": "0x60806040526200000e62000014565b620000d8565b6101cd54610100900460ff1615620000825760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b6101cd5460ff90811614620000d6576101cd805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612b7680620000e86000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063691f343111610104578063ac9650d8116100a2578063d700ff3311610071578063d700ff3314610486578063e32954eb146104c7578063e59d895d146104da578063f8014891146104ed57600080fd5b8063ac9650d8146103e5578063c869023314610405578063ce3decdc14610460578063d5fa2b001461047357600080fd5b80638c843314116100de5780638c8433141461039a578063956db465146103ac578063a821a728146103bf578063a8fa5682146103d257600080fd5b8063691f34311461036157806370687fcb14610374578063773722131461038757600080fd5b80633603d758116101715780634cbf6ba41161014b5780634cbf6ba4146102ce57806359d1d43c1461031b5780635c98042b1461033b578063623195b01461034e57600080fd5b80633603d758146102955780633b3b57de146102a8578063485cc955146102bb57600080fd5b8063124a319c116101ad578063124a319c146102245780632203ab561461024f578063237a78fb1461027057806329cd62ea1461028257600080fd5b806301ffc9a7146101d45780630af179d7146101fc57806310f13a8c14610211575b600080fd5b6101e76101e236600461219e565b610500565b60405190151581526020015b60405180910390f35b61020f61020a3660046121fc565b610511565b005b61020f61021f366004612247565b61052d565b6102376102323660046122c0565b61054d565b6040516001600160a01b0390911681526020016101f3565b61026261025d3660046122f0565b610745565b6040516101f3929190612362565b610201546001600160a01b0316610237565b61020f61029036600461237b565b61087e565b61020f6102a33660046123a7565b610894565b6102376102b63660046123a7565b6108ac565b61020f6102c93660046123d5565b61091b565b6101e76102dc3660046122f0565b6000828152603260209081526040808320546001600160401b0316835260ff825280832094835293815283822092825291909152205461ffff16151590565b61032e6103293660046121fc565b610a63565b6040516101f39190612403565b61032e6103493660046123a7565b610b45565b61020f61035c366004612416565b610c06565b61032e61036f3660046123a7565b610c24565b61020f6103823660046121fc565b610dbf565b61020f6103953660046121fc565b610dd5565b610200546001600160a01b0316610237565b6101e76103ba366004612468565b610e20565b61032e6103cd3660046123a7565b610ea5565b61032e6103e036600461248d565b610ee0565b6103f86103f3366004612511565b610f2f565b6040516101f39190612552565b61044b6104133660046123a7565b6000818152603260209081526040808320546001600160401b0316835261019982528083209383529290522080546001909101549091565b604080519283526020830191909152016101f3565b61020f61046e3660046121fc565b610f44565b61020f610481366004612468565b610f5a565b6104af6104943660046123a7565b6000908152603260205260409020546001600160401b031690565b6040516001600160401b0390911681526020016101f3565b6103f86104d53660046125b4565b610fb8565b61020f6104e83660046125f2565b611099565b6103f86104fb366004612637565b6110af565b600061050b826110bc565b92915050565b8261051c81336110e1565b610527848484611143565b50505050565b8461053881336110e1565b610545868686868661133a565b505050505050565b6000828152603260209081526040808320546001600160401b03168352610133825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156105a357905061050b565b60006105ae856108ac565b90506001600160a01b0381166105c95760009250505061050b565b6040516301ffc9a760e01b60248201526000906060906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106229190612672565b600060405180830381855afa9150503d806000811461065d576040519150601f19603f3d011682016040523d82523d6000602084013e610662565b606091505b50909250905061067282826113f5565b61068357600094505050505061050b565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106d99190612672565b600060405180830381855afa9150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50909250905061072982826113f5565b61073a57600094505050505061050b565b509095945050505050565b6000828152603260209081526040808320546001600160401b0316835260658252808320858452909152812060609060015b84811161085e57808516158015906107a75750600081815260208390526040812080546107a39061268e565b9050115b1561085657808260008381526020019081526020016000208080546107cb9061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546107f79061268e565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b50505050509050935093505050610877565b60011b610777565b5060006040518060200160405280600081525092509250505b9250929050565b8261088981336110e1565b610527848484611435565b8061089f81336110e1565b6108a8826114bd565b5050565b610200546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa1580156108f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b91906126c8565b6101cd54610100900460ff161580801561093d57506101cd54600160ff909116105b806109585750303b15801561095857506101cd5460ff166001145b6109c05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6101cd805460ff1916600117905580156109e5576101cd805461ff0019166101001790555b61020080546001600160a01b038086166001600160a01b0319928316179092556102018054928516929091169190911790558015610a5e576101cd805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000838152603260209081526040808320546001600160401b031683526101cc825280832086845290915290819020905160609190610aa590859085906126e5565b90815260200160405180910390208054610abe9061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea9061268e565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b505050505090509392505050565b6000818152603260209081526040808320546001600160401b0316835261010082528083208484529091529020805460609190610b819061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bad9061268e565b8015610bfa5780601f10610bcf57610100808354040283529160200191610bfa565b820191906000526020600020905b815481529060010190602001808311610bdd57829003601f168201915b50505050509050919050565b83610c1181336110e1565b610c1d85858585611527565b5050505050565b61020154604051635c9fcd8560e11b8152600481018390526060916000916001600160a01b039091169063b93f9b0a90602401602060405180830381865afa158015610c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9891906126c8565b90506000610ca5846115c5565b610200546040516304c3ccb160e11b81529192506000916001600160a01b0390911690630987996290610cdc908590600401612403565b602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d91906126f5565b610200546040516331a9108f60e11b8152600481018390529192506001600160a01b0385811692911690636352211e90602401602060405180830381865afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9191906126c8565b6001600160a01b031614610db45760405180602001604052806000815250610db6565b815b95945050505050565b82610dca81336110e1565b610527848484611601565b82610de081336110e1565b6105278484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166b92505050565b6102005460405163fd3fa91960e01b81526001600160a01b0383811660048301526024820185905260186044830152600092169063fd3fa919906064016040805180830381865afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d919061270e565b509392505050565b6000818152603260209081526040808320546001600160401b0316835260cb82528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260fe82528083208684528252808320858452825280832061ffff851684529091529020805460609190610abe9061268e565b6060610f3d600184846116df565b9392505050565b82610f4f81336110e1565b6105278484846117fb565b81610f6581336110e1565b60405162461bcd60e51b815260206004820152602260248201527f5075626c69635265736f6c7665723a2043616e6e6f7420736574206164647265604482015261737360f01b60648201526084016109b7565b606083156110855760005b8281101561108357838382818110610fdd57610fdd61273d565b9050602002810190610fef9190612753565b610ffe91602491600491612799565b611007916127c3565b851461107b5760405162461bcd60e51b815260206004820152603960248201527f5075626c69635265736f6c7665723a20416c6c207265636f726473206d75737460448201527f20686176652061206d61746368696e67206e616d65686173680000000000000060648201526084016109b7565b600101610fc3565b505b611091600184846116df565b949350505050565b826110a481336110e1565b61052784848461192c565b60606110918484846116df565b60006001600160e01b03198216635497184960e01b148061050b575061050b826119c1565b6110eb8282610e20565b6108a85760405162461bcd60e51b815260206004820152602360248201527f5075626c69635265736f6c7665723a20756e617574686f72697a65642063616c6044820152623632b960e91b60648201526084016109b7565b6000838152603260209081526040808320548151601f86018490048402810184019092528482528392606092839285926001600160401b039091169183916111aa9183918c908c908190840183828082843760009201919091525092939250506119e69050565b90505b805151602082015110156112d4578661ffff1660000361121257806040015196506111d781611a47565b9450846040516020016111ea9190612672565b60405160208183030381529060405280519060200120925061120b81611a68565b93506112c6565b600061121d82611a47565b9050816040015161ffff168861ffff16141580611241575061123f8682611a84565b155b156112c45761129d8b878a8d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801518d91506112949082906127f7565b8b51158a611aa2565b8160400151975081602001519650809550858051906020012093506112c182611a68565b94505b505b6112cf81611d0a565b6111ad565b5083511561132f5761132f8985888b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061132691508290508e6127f7565b89511588611aa2565b505050505050505050565b6000858152603260209081526040808320546001600160401b031683526101cc82528083208884529091529081902090518391839161137c90889088906126e5565b90815260200160405180910390209182611397929190612866565b5083836040516113a89291906126e5565b6040518091039020857f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1868686866040516113e6949392919061294e565b60405180910390a35050505050565b60008280611404575060208251105b80610f3d575081601f8151811061141d5761141d61273d565b01602001516001600160f81b03191615905092915050565b6040805180820182528381526020808201848152600087815260328352848120546001600160401b03168152610199835284812088825283528490209251835551600190920191909155815184815290810183905284917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a2505050565b60008181526032602090815260409182902080546001600160401b038082166001011667ffffffffffffffff199091168117909155915191825282917fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a250565b826115336001826127f7565b161561155257604051631e76820d60e31b815260040160405180910390fd5b6000848152603260209081526040808320546001600160401b031683526065825280832087845282528083208684529091529020611591828483612866565b50604051839085907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a350505050565b6000818152603260209081526040808320546001600160401b0316835261016682528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260cb82528083208684529091529020611638828483612866565b50827ff138098ddddc53c41c8649e6533fdf517348a8e9d24e9db5e5628db793fb76b483836040516114b0929190612980565b6000828152603260209081526040808320546001600160401b03168352610166825280832085845290915290206116a28282612994565b50817fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7826040516116d39190612403565b60405180910390a25050565b606081806001600160401b038111156116fa576116fa61280a565b60405190808252806020026020018201604052801561172d57816020015b60608152602001906001900390816117185790505b5091506000606060005b838110156117f057308787838181106117525761175261273d565b90506020028101906117649190612753565b6040516117729291906126e5565b600060405180830381855af49150503d80600081146117ad576040519150601f19603f3d011682016040523d82523d6000602084013e6117b2565b606091505b50909350915087156117ca576117ca83151583611df2565b818582815181106117dd576117dd61273d565b6020908102919091010152600101611737565b505050509392505050565b6000838152603260209081526040808320546001600160401b03168084526101008352818420878552909252822080549192916118379061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546118639061268e565b80156118b05780601f10611885576101008083540402835291602001916118b0565b820191906000526020600020905b81548152906001019060200180831161189357829003601f168201915b505050506001600160401b0384166000908152610100602090815260408083208a845290915290209192506118e89050848683612866565b50847f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f8582868660405161191d93929190612a53565b60405180910390a25050505050565b6000838152603260209081526040808320546001600160401b03168352610133825280832086845282528083206001600160e01b031986168085529083529281902080546001600160a01b0319166001600160a01b038616908117909155905190815285917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a3505050565b60006001600160e01b031982166304920eeb60e41b148061050b575061050b82611e15565b611a346040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c0810182905261050b81611d0a565b6020810151815160609161050b91611a5f9082611e3a565b84519190611e94565b60a081015160c082015160609161050b91611a5f9082906127f7565b600081518351148015610f3d5750610f3d8360008460008751611f0a565b865160208801206000611ab6878787611e94565b90508315611bdd576001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611b009061268e565b159050611b5e576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611b4283612a83565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611b9e91612132565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611bd0929190612aa1565b60405180910390a2611cfe565b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611c1f9061268e565b9050600003611c7f576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611c6383612ac7565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611cc08282612994565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611cf593929190612ae8565b60405180910390a25b50505050505050505050565b60c08101516020820181905281515111611d215750565b6000611d3582600001518360200151611e3a565b8260200151611d449190612b17565b8251909150611d539082611f2d565b61ffff166040830152611d67600282612b17565b8251909150611d769082611f2d565b61ffff166060830152611d8a600282612b17565b8251909150611d999082611f55565b63ffffffff166080830152611daf600482612b17565b8251909150600090611dc19083611f2d565b61ffff169050611dd2600283612b17565b60a084018190529150611de58183612b17565b60c0909301929092525050565b816108a85780518015611e06578060208301fd5b5063350c20f16000526004601cfd5b60006001600160e01b0319821663e1a460d960e01b148061050b575061050b82611f7f565b6000815b83518110611e4e57611e4e612b2a565b6000611e5a8583611fa4565b60ff169050611e6a816001612b17565b611e749083612b17565b915080600003611e845750611e8a565b50611e3e565b61109183826127f7565b8251606090611ea38385612b17565b1115611eae57600080fd5b6000826001600160401b03811115611ec857611ec861280a565b6040519080825280601f01601f191660200182016040528015611ef2576020820181803683370190505b5090506020808201908686010161073a828287611fc8565b6000611f1784848461201e565b611f2287878561201e565b149695505050505050565b8151600090611f3d836002612b17565b1115611f4857600080fd5b50016002015161ffff1690565b8151600090611f65836004612b17565b1115611f7057600080fd5b50016004015163ffffffff1690565b60006001600160e01b03198216630f140b1160e11b148061050b575061050b82612042565b6000828281518110611fb857611fb861273d565b016020015160f81c905092915050565b602081106120005781518352611fdf602084612b17565b9250611fec602083612b17565b9150611ff96020826127f7565b9050611fc8565b905182516020929092036101000a6000190180199091169116179052565b825160009061202d8385612b17565b111561203857600080fd5b5091016020012090565b60006001600160e01b0319821663f7d7b8c160e01b148061050b575061050b8260006001600160e01b0319821663a20b2f5560e01b148061209357506001600160e01b031982166392a5e8f760e01b145b8061050b575061050b8260006001600160e01b0319821663d849d8e360e01b148061050b575061050b8260006001600160e01b03198216637760be6f60e11b148061050b575061050b8260006001600160e01b031982166320191f7360e11b148061050b575061050b8260006001600160e01b0319821663e103286b60e01b148061050b57506301ffc9a760e01b6001600160e01b031983161461050b565b50805461213e9061268e565b6000825580601f1061214e575050565b601f01602090049060005260206000209081019061216c919061216f565b50565b5b808211156121845760008155600101612170565b5090565b6001600160e01b03198116811461216c57600080fd5b6000602082840312156121b057600080fd5b8135610f3d81612188565b60008083601f8401126121cd57600080fd5b5081356001600160401b038111156121e457600080fd5b60208301915083602082850101111561087757600080fd5b60008060006040848603121561221157600080fd5b8335925060208401356001600160401b0381111561222e57600080fd5b61223a868287016121bb565b9497909650939450505050565b60008060008060006060868803121561225f57600080fd5b8535945060208601356001600160401b038082111561227d57600080fd5b61228989838a016121bb565b909650945060408801359150808211156122a257600080fd5b506122af888289016121bb565b969995985093965092949392505050565b600080604083850312156122d357600080fd5b8235915060208301356122e581612188565b809150509250929050565b6000806040838503121561230357600080fd5b50508035926020909101359150565b60005b8381101561232d578181015183820152602001612315565b50506000910152565b6000815180845261234e816020860160208601612312565b601f01601f19169290920160200192915050565b8281526040602082015260006110916040830184612336565b60008060006060848603121561239057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156123b957600080fd5b5035919050565b6001600160a01b038116811461216c57600080fd5b600080604083850312156123e857600080fd5b82356123f3816123c0565b915060208301356122e5816123c0565b602081526000610f3d6020830184612336565b6000806000806060858703121561242c57600080fd5b843593506020850135925060408501356001600160401b0381111561245057600080fd5b61245c878288016121bb565b95989497509550505050565b6000806040838503121561247b57600080fd5b8235915060208301356122e5816123c0565b6000806000606084860312156124a257600080fd5b8335925060208401359150604084013561ffff811681146124c257600080fd5b809150509250925092565b60008083601f8401126124df57600080fd5b5081356001600160401b038111156124f657600080fd5b6020830191508360208260051b850101111561087757600080fd5b6000806020838503121561252457600080fd5b82356001600160401b0381111561253a57600080fd5b612546858286016124cd565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156125a757603f19888603018452612595858351612336565b94509285019290850190600101612579565b5092979650505050505050565b6000806000604084860312156125c957600080fd5b8335925060208401356001600160401b038111156125e657600080fd5b61223a868287016124cd565b60008060006060848603121561260757600080fd5b83359250602084013561261981612188565b915060408401356124c2816123c0565b801515811461216c57600080fd5b60008060006040848603121561264c57600080fd5b833561265781612629565b925060208401356001600160401b038111156125e657600080fd5b60008251612684818460208701612312565b9190910192915050565b600181811c908216806126a257607f821691505b6020821081036126c257634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156126da57600080fd5b8151610f3d816123c0565b8183823760009101908152919050565b60006020828403121561270757600080fd5b5051919050565b6000806040838503121561272157600080fd5b825161272c81612629565b60208401519092506122e581612188565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261276a57600080fd5b8301803591506001600160401b0382111561278457600080fd5b60200191503681900382131561087757600080fd5b600080858511156127a957600080fd5b838611156127b657600080fd5b5050820193919092039150565b8035602083101561050b57600019602084900360031b1b1692915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561050b5761050b6127e1565b634e487b7160e01b600052604160045260246000fd5b601f821115610a5e57600081815260208120601f850160051c810160208610156128475750805b601f850160051c820191505b8181101561054557828155600101612853565b6001600160401b0383111561287d5761287d61280a565b6128918361288b835461268e565b83612820565b6000601f8411600181146128c557600085156128ad5750838201355b600019600387901b1c1916600186901b178355610c1d565b600083815260209020601f19861690835b828110156128f657868501358255602094850194600190920191016128d6565b50868210156129135760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612962604083018688612925565b8281036020840152612975818587612925565b979650505050505050565b602081526000611091602083018486612925565b81516001600160401b038111156129ad576129ad61280a565b6129c1816129bb845461268e565b84612820565b602080601f8311600181146129f657600084156129de5750858301515b600019600386901b1c1916600185901b178555610545565b600085815260208120601f198616915b82811015612a2557888601518255948401946001909101908401612a06565b5085821015612a435787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000612a666040830186612336565b8281036020840152612a79818587612925565b9695505050505050565b600061ffff821680612a9757612a976127e1565b6000190192915050565b604081526000612ab46040830185612336565b905061ffff831660208301529392505050565b600061ffff808316818103612ade57612ade6127e1565b6001019392505050565b606081526000612afb6060830186612336565b61ffff851660208401528281036040840152612a798185612336565b8082018082111561050b5761050b6127e1565b634e487b7160e01b600052600160045260246000fdfea264697066735822122071bbc4bff126add9e96885c48993935407bf76c98e0f32dfd2c1c91c3f35e40664736f6c63430008150033", + "nonce": "0x2c8e9" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "function": null, + "arguments": [ + "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0x485cc955000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf830000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0xd3d3f", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000933cd2272831334f1e46977bcc36153c8027dee8000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf830000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf71600000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8ea" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd8a479a76c31593e7feabb2f6b015593694ea059bdace9060b7376027824ceba", + "transactionType": "CREATE", + "contractName": "RONRegistrarController", + "contractAddress": "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x35bce3", + "value": "0x0", + "data": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612f2d80620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a610245366004612041565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f336600461206b565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d610358366004612099565b610745565b005b34801561036b57600080fd5b5061035d61037a366004612099565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b8366004612099565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d6104283660046120c9565b610815565b61035d61043b3660046120fb565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d61047336600461217d565b6109d8565b34801561048457600080fd5b5061035d610493366004612284565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612414565b610cdd565b3480156104ea57600080fd5b506102a26104f93660046124cf565b610e0b565b34801561050a57600080fd5b5061024a610519366004612099565b610e2a565b34801561052a57600080fd5b5061024a6105393660046124f1565b610e55565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e3660046124f1565b610ee3565b34801561057f57600080fd5b5061027361058e36600461252d565b610f6e565b34801561059f57600080fd5b5061035d6105ae36600461206b565b61101e565b3480156105bf57600080fd5b506103086105ce36600461206b565b611032565b61035d6105e1366004612573565b611049565b3480156105f257600080fd5b5061035d610601366004612099565b611156565b34801561061257600080fd5b50610308610621366004612573565b61117b565b34801561063257600080fd5b5061035d6106413660046124cf565b6111fc565b34801561065257600080fd5b50610308600080516020612ed883398151915281565b34801561067457600080fd5b5061035d6106833660046120c9565b611211565b34801561069457600080fd5b5061035d6106a336600461206b565b61123f565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f73660046124f1565b611298565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f826112d5565b92915050565b6000828152600260205260409020600101546107608161130a565b61076a8383611314565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611336565b5050565b600080516020612ed883398151915261080a8161130a565b610812611358565b50565b60006108208161130a565b6107ee826113aa565b610831611401565b610839611449565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610f6e915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac823461264d565b905060006108ef86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061129892505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190612660565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126a6565b60405180910390a282156109c3576109c333846114a2565b6109cb611507565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612ed88339815191528b61151d565b610aca60008c61151d565b610ad3836113aa565b610adc86611527565b610ae6878961155e565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae8161130a565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc6126da565b9050602002013581526020019081526020016000206000888885818110610c2557610c256126da565b9050602002016020810190610c3a91906120c9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac9594939291906126f0565b60405180910390a250505050505050565b600080516020612ed8833981519152610cd58161130a565b6108126115e8565b610ce5611401565b610ced611449565b6000610cf888611298565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d6f9190810190612868565b602090810151606001516000848152603f835260408082206001600160a01b038d168352909352919091205490915060ff16811580610dac575080155b15610dd25789898383604051631fc5717160e01b81526004016107db9493929190612976565b600080610ddf8c8b611625565b91509150610df48c8c8c8c8c8c8c898961167d565b5050505050610e0260018055565b50505050505050565b6000828152600360205260408120610e2390836117a7565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e62836117b3565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610e9b9085906004016129b0565b602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906129c3565b1592915050565b6000610eee82610e55565b801561073f5750603a546001600160a01b03166396e494e8610f0f84611298565b6040518263ffffffff1660e01b8152600401610f2d91815260200190565b602060405180830381865afa158015610f4a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129c3565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fa990899089906004016129e0565b608060405180830381865afa158015610fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fea9190612a3b565b80518251929450909250610ffd91612a70565b9350806020015182602001516110139190612a70565b925050509250929050565b60006110298161130a565b6107ee82611527565b600081815260036020526040812061073f906118a1565b611051611401565b611059611449565b600061106489611298565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d69190810190612868565b6020015160600151156110fe57886040516331597a5760e21b81526004016107db91906129b0565b60006111108a8a8a8a8a8a8a8a61117b565b905061111d8a89836118ab565b60008061112a8c8b611625565b9150915061113f8c8c8c8b8b8b8b898961167d565b5050505061114c60018055565b5050505050505050565b6000828152600260205260409020600101546111718161130a565b61076a8383611336565b6000821580159061119357506001600160a01b038516155b156111b1576040516334fd817160e21b815260040160405180910390fd5b6111ba89611298565b888888888888886040516020016111d8989796959493929190612b14565b60405160208183030381529060405280519060200120905098975050505050505050565b60006112078161130a565b61076a838361155e565b600061121c8161130a565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b611247611401565b6037546000828152603e6020526040902054429161126491612a70565b1061128557604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b6108128133611985565b61131e82826119b8565b600082815260036020526040902061076a9082611a3e565b6113408282611a53565b600082815260036020526040902061076a9082611aba565b611360611acf565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114475760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b60026001540361149b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114ae8383611b18565b90508061076a576114c7836001600160a01b0316611b8e565b6114d083611ba4565b6040516020016114e1929190612b74565b60408051601f198184030181529082905262461bcd60e51b82526107db916004016129b0565b603954611447906001600160a01b0316476114a2565b6107ee8282611314565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c906020016113f6565b4281111561157f57604051630b4319e560e21b815260040160405180910390fd5b81811161159f576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b6115f0611401565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861138d3390565b6000806116328484610f6e565b9092509050348111156116585760405163044044a560e21b815260040160405180910390fd5b3481810390821461166d5761166d33826114a2565b50611676611507565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b81526004016116e9959493929190612bf2565b60408051808303816000875af1158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b9190612c3d565b909250905085156117425761174288828989611bbb565b8415611752576117528b8b611c39565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117929493929190612c6b565b60405180910390a35050505050505050505050565b6000610e238383611cd0565b600080600080845190505b808310156118995760008584815181106117da576117da6126da565b01602001516001600160f81b0319169050600160ff1b8110156118025760018401935061188d565b600760fd1b6001600160f81b0319821610156118235760028401935061188d565b600f60fc1b6001600160f81b0319821610156118445760038401935061188d565b601f60fb1b6001600160f81b0319821610156118655760048401935061188d565b603f60fa1b6001600160f81b0319821610156118865760058401935061188d565b6006840193505b506001909101906117be565b509392505050565b600061073f825490565b603854826001600160401b031610156118e2576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6118eb83610ee3565b61190a57826040516308eee0fd60e31b81526004016107db91906129b0565b6000818152603e6020526040812054611923904261264d565b905060365481101561194b57604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119715760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e60205260408120555050565b61198f8282610e2a565b6107ee5761199c81611b8e565b6119a7836020611cfa565b6040516020016114e1929190612ca3565b6119c28282610e2a565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff191660011790556119fa3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e23836001600160a01b038416611e95565b611a5d8282610e2a565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e23836001600160a01b038416611ee4565b60005460ff166114475760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b429190612d18565b60006040518083038185875af1925050503d8060008114611b7f576040519150601f19603f3d011682016040523d82523d6000602084013e611b84565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611cfa565b606061073f82611bb384611fd7565b600101611cfa565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611beb90869086908690600401612d34565b6000604051808303816000875af1158015611c0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c329190810190612d57565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c61908690602001612e2e565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611c8d929190612e56565b6020604051808303816000875af1158015611cac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612e7a565b6000826000018281548110611ce757611ce76126da565b9060005260206000200154905092915050565b60606000611d09836002612e93565b611d14906002612a70565b6001600160401b03811115611d2b57611d2b612307565b6040519080825280601f01601f191660200182016040528015611d55576020820181803683370190505b509050600360fc1b81600081518110611d7057611d706126da565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611d9f57611d9f6126da565b60200101906001600160f81b031916908160001a9053506000611dc3846002612e93565b611dce906001612a70565b90505b6001811115611e46576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e0257611e026126da565b1a60f81b828281518110611e1857611e186126da565b60200101906001600160f81b031916908160001a90535060049490941c93611e3f81612eaa565b9050611dd1565b508315610e235760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611edc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015611fcd576000611f0860018361264d565b8554909150600090611f1c9060019061264d565b9050818114611f81576000866000018281548110611f3c57611f3c6126da565b9060005260206000200154905080876000018481548110611f5f57611f5f6126da565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611f9257611f92612ec1565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c15611fef5760809290921c916010015b604083901c156120045760409290921c916008015b602083901c156120195760209290921c916004015b601083901c1561202e5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561205357600080fd5b81356001600160e01b031981168114610e2357600080fd5b60006020828403121561207d57600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120ac57600080fd5b8235915060208301356120be81612084565b809150509250929050565b6000602082840312156120db57600080fd5b8135610e2381612084565b6001600160401b038116811461081257600080fd5b60008060006040848603121561211057600080fd5b83356001600160401b038082111561212757600080fd5b818601915086601f83011261213b57600080fd5b81358181111561214a57600080fd5b87602082850101111561215c57600080fd5b60209283019550935050840135612172816120e6565b809150509250925092565b6000806000806000806000806000806101408b8d03121561219d57600080fd5b8a356121a881612084565b995060208b01356121b881612084565b985060408b01356121c881612084565b975060608b0135965060808b0135955060a08b0135945060c08b01356121ed81612084565b935060e08b01356121fd81612084565b92506101008b013561220e81612084565b91506101208b013561221f81612084565b809150509295989b9194979a5092959850565b60008083601f84011261224457600080fd5b5081356001600160401b0381111561225b57600080fd5b6020830191508360208260051b850101111561167657600080fd5b801515811461081257600080fd5b60008060008060006060868803121561229c57600080fd5b85356001600160401b03808211156122b357600080fd5b6122bf89838a01612232565b909750955060208801359150808211156122d857600080fd5b506122e588828901612232565b90945092505060408601356122f981612276565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561233f5761233f612307565b60405290565b604051606081016001600160401b038111828210171561233f5761233f612307565b604051601f8201601f191681016001600160401b038111828210171561238f5761238f612307565b604052919050565b60006001600160401b038211156123b0576123b0612307565b50601f01601f191660200190565b600082601f8301126123cf57600080fd5b81356123e26123dd82612397565b612367565b8181528460208386010111156123f757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561242f57600080fd5b87356001600160401b038082111561244657600080fd5b6124528b838c016123be565b985060208a0135915061246482612084565b909650604089013590612476826120e6565b90955060608901359061248882612084565b9094506080890135908082111561249e57600080fd5b506124ab8a828b01612232565b90945092505060a08801356124bf81612276565b8091505092959891949750929550565b600080604083850312156124e257600080fd5b50508035926020909101359150565b60006020828403121561250357600080fd5b81356001600160401b0381111561251957600080fd5b612525848285016123be565b949350505050565b6000806040838503121561254057600080fd5b82356001600160401b0381111561255657600080fd5b612562858286016123be565b92505060208301356120be816120e6565b60008060008060008060008060e0898b03121561258f57600080fd5b88356001600160401b03808211156125a657600080fd5b6125b28c838d016123be565b995060208b013591506125c482612084565b90975060408a0135906125d6826120e6565b90965060608a0135955060808a0135906125ef82612084565b90945060a08a0135908082111561260557600080fd5b506126128b828c01612232565b90945092505060c089013561262681612276565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612637565b60006020828403121561267257600080fd5b8151610e23816120e6565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126ba60608301868861267d565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561271057600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b8783101561276d57833561275081612084565b6001600160a01b031681529281019260019290920191810161273d565b8615156040870152935061278092505050565b9695505050505050565b60005b838110156127a557818101518382015260200161278d565b50506000910152565b60006127bc6123dd84612397565b90508281528383830111156127d057600080fd5b610e2383602083018461278a565b6000608082840312156127f057600080fd5b604051608081018181106001600160401b038211171561281257612812612307565b8060405250809150825161282581612084565b8152602083015161283581612084565b60208201526040830151612848816120e6565b6040820152606083015161285b81612276565b6060919091015292915050565b6000602080838503121561287b57600080fd5b82516001600160401b038082111561289257600080fd5b9084019060a082870312156128a657600080fd5b6128ae61231d565b8251828111156128bd57600080fd5b8301606081890312156128cf57600080fd5b6128d7612345565b815160ff811681146128e857600080fd5b8152818601518682015260408201518481111561290457600080fd5b82019350601f8401891361291757600080fd5b6129258985518887016127ae565b6040820152825250612939878486016127de565b848201528094505050505092915050565b6000815180845261296281602086016020860161278a565b601f01601f19169290920160200192915050565b608081526000612989608083018761294a565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b602081526000610e23602083018461294a565b6000602082840312156129d557600080fd5b8151610e2381612276565b6040815260006129f3604083018561294a565b90506001600160401b03831660208301529392505050565b600060408284031215612a1d57600080fd5b612a2561231d565b9050815181526020820151602082015292915050565b60008060808385031215612a4e57600080fd5b612a588484612a0b565b9150612a678460408501612a0b565b90509250929050565b8082018082111561073f5761073f612637565b81835260006020808501808196508560051b810191508460005b87811015612b075782840389528135601e19883603018112612abe57600080fd5b870185810190356001600160401b03811115612ad957600080fd5b803603821315612ae857600080fd5b612af386828461267d565b9a87019a9550505090840190600101612a9d565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b5d9083018587612a83565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bbf81602a85016020880161278a565b660103b30b63ab2960cd1b602a918401918201528351612be681603184016020880161278a565b01603101949350505050565b85815260a060208201526000612c0b60a083018761294a565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c5057600080fd5b8251612c5b816120e6565b6020939093015192949293505050565b608081526000612c7e608083018761294a565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612cdb81601785016020880161278a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d0c81602884016020880161278a565b01602801949350505050565b60008251612d2a81846020870161278a565b9190910192915050565b838152604060208201526000612d4e604083018486612a83565b95945050505050565b60006020808385031215612d6a57600080fd5b82516001600160401b0380821115612d8157600080fd5b818501915085601f830112612d9557600080fd5b815181811115612da757612da7612307565b8060051b612db6858201612367565b9182528381018501918581019089841115612dd057600080fd5b86860192505b83831015612e2157825185811115612dee5760008081fd5b8601603f81018b13612e005760008081fd5b612e118b89830151604084016127ae565b8352509186019190860190612dd6565b9998505050505050505050565b60008251612e4081846020870161278a565b63173937b760e11b920191825250600401919050565b6001600160a01b03831681526040602082018190526000906125259083018461294a565b600060208284031215612e8c57600080fd5b5051919050565b808202811582820484141761073f5761073f612637565b600081612eb957612eb9612637565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212206a3d52d10991a468c57c6615bb62fcc62fde33eb734d4cc15addc19f2f75fb7b64736f6c63430008150033", + "nonce": "0x2c8eb" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "function": null, + "arguments": [ + "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0x64c65705000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000bc07dfda8f91aae03141b98278cb2321e36ec2f300000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab50000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x12e8d0", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000942b2dc201bacf99fec1f877bdd30c394325f3cc000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd70000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000014464c65705000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000bc07dfda8f91aae03141b98278cb2321e36ec2f300000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab50000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf71600000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8ec" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfcafa09725cd7e3cb2cf509b49bceba0e18fa25a3748c222b6ffa84a66650ccb", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x2154a", + "value": "0x0", + "data": "0x2f2ff15d7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "nonce": "0x2c8ed" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x6813cad5e382b91b0d75dd84fd880cdaa8a376843bcf2b4ec48897509c423361", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x26639", + "value": "0x0", + "data": "0x2f2ff15d87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "nonce": "0x2c8ee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdfebf6d29b4938b30b806e3b4ce35efceb7375b00a497723a8dc89d1893c5abb", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x2154a", + "value": "0x0", + "data": "0x2f2ff15d7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa799", + "nonce": "0x2c8ef" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x56bc0", + "value": "0x0", + "data": "0x0570891f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000000000000000000000000003726f6e0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8f0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x56c02", + "value": "0x0", + "data": "0x0570891f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000077265766572736500000000000000000000000000000000000000000000000000", + "nonce": "0x2c8f1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x62d55", + "value": "0x0", + "data": "0x0570891fa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d3400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000046164647200000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8f2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x98814fb702fc8202e3ca381c3ef0b2d33fdef857499e7c8ef7d4b2ced938c00b", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x11021", + "value": "0x0", + "data": "0xa22cb465000000000000000000000000b962edded164f55d136e491a3022246815e1b5a80000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2c8f3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xc69718e4b0f311aa76c1dcccf3a4b0c4b090ff8462155fa121e32b8eda1ba8c1", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x11021", + "value": "0x0", + "data": "0xa22cb465000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa7990000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2c8f4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb5da04ebceb3a3ca75a005e56d803fe8c716d5ae28b040572f8f30b63127bc2b", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x10cfa", + "value": "0x0", + "data": "0x095ea7b30000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf71691d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2", + "nonce": "0x2c8f5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf60851be682c3c0e371b74cad3434c93e214fa5cb91854f27b498834ee1d5901", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x0cc07f120dffdf507a6e983c54bcb402fc6bf716", + "gas": "0x10e42", + "value": "0x0", + "data": "0xc66485b2000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6", + "nonce": "0x2c8f6" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xbc07dfda8f91aae03141b98278cb2321e36ec2f3", + "gas": "0x1e6f019", + "value": "0x0", + "data": "0x245ed6540000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003f004f09f96950000000000000000000000000000000000000000000000000000000d32206769726c73203120637570000000000000000000000000000000000000043267316300000000000000000000000000000000000000000000000000000004347235650000000000000000000000000000000000000000000000000000000435683174000000000000000000000000000000000000000000000000000000043568697400000000000000000000000000000000000000000000000000000005615f735f73000000000000000000000000000000000000000000000000000003613535000000000000000000000000000000000000000000000000000000000861626f7274696f6e00000000000000000000000000000000000000000000000e6163726f746f6d6f7068696c6961000000000000000000000000000000000012616c6162616d6120686f7420706f636b65740000000000000000000000000010616c61736b616e20706970656c696e6500000000000000000000000000000004616e616c00000000000000000000000000000000000000000000000000000009616e696c696e6775730000000000000000000000000000000000000000000004616e757300000000000000000000000000000000000000000000000000000007617065736869740000000000000000000000000000000000000000000000000461723565000000000000000000000000000000000000000000000000000000056172727365000000000000000000000000000000000000000000000000000004617273650000000000000000000000000000000000000000000000000000000861727365686f6c65000000000000000000000000000000000000000000000003617373000000000000000000000000000000000000000000000000000000000a6173732d6675636b6572000000000000000000000000000000000000000000076173732d6861740000000000000000000000000000000000000000000000000a6173732d70697261746500000000000000000000000000000000000000000006617373626167000000000000000000000000000000000000000000000000000961737362616e646974000000000000000000000000000000000000000000000961737362616e67657200000000000000000000000000000000000000000000076173736269746500000000000000000000000000000000000000000000000008617373636c6f776e000000000000000000000000000000000000000000000007617373636f636b0000000000000000000000000000000000000000000000000a617373637261636b657200000000000000000000000000000000000000000005617373657300000000000000000000000000000000000000000000000000000761737366616365000000000000000000000000000000000000000000000000096173736675636b6572000000000000000000000000000000000000000000000861737366756b6b61000000000000000000000000000000000000000000000009617373676f626c696e000000000000000000000000000000000000000000000661737368617400000000000000000000000000000000000000000000000000076173736865616400000000000000000000000000000000000000000000000007617373686f6c6500000000000000000000000000000000000000000000000008617373686f6c6573000000000000000000000000000000000000000000000009617373686f7070657200000000000000000000000000000000000000000000096173736a61636b657200000000000000000000000000000000000000000000076173736c69636b000000000000000000000000000000000000000000000000096173736c69636b657200000000000000000000000000000000000000000000096173736d6f6e6b657900000000000000000000000000000000000000000000086173736d756e636800000000000000000000000000000000000000000000000a6173736d756e6368657200000000000000000000000000000000000000000009617373706972617465000000000000000000000000000000000000000000000861737373686f6c650000000000000000000000000000000000000000000000096173737375636b65720000000000000000000000000000000000000000000006617373776164000000000000000000000000000000000000000000000000000861737377686f6c65000000000000000000000000000000000000000000000007617373776970650000000000000000000000000000000000000000000000000b6175746f2065726f74696300000000000000000000000000000000000000000a6175746f65726f746963000000000000000000000000000000000000000000056221746368000000000000000000000000000000000000000000000000000005623030627300000000000000000000000000000000000000000000000000000562313763680000000000000000000000000000000000000000000000000000056231746368000000000000000000000000000000000000000000000000000008626162656c616e6400000000000000000000000000000000000000000000000b626162792062617474657200000000000000000000000000000000000000000a62616279206a756963650000000000000000000000000000000000000000000862616c6c2067616700000000000000000000000000000000000000000000000a62616c6c2067726176790000000000000000000000000000000000000000000c62616c6c206b69636b696e67000000000000000000000000000000000000000c62616c6c206c69636b696e67000000000000000000000000000000000000000962616c6c207361636b000000000000000000000000000000000000000000000c62616c6c207375636b696e67000000000000000000000000000000000000000762616c6c6261670000000000000000000000000000000000000000000000000a62616c6c6c69636b65720000000000000000000000000000000000000000000562616c6c7300000000000000000000000000000000000000000000000000000862616c6c7361636b00000000000000000000000000000000000000000000000662616d706f74000000000000000000000000000000000000000000000000000862616e6762726f73000000000000000000000000000000000000000000000008626172656261636b00000000000000000000000000000000000000000000000c626172656c79206c6567616c000000000000000000000000000000000000000b626172656c796c6567616c000000000000000000000000000000000000000009626172656e616b656400000000000000000000000000000000000000000000076261737461726400000000000000000000000000000000000000000000000008626173746172646f00000000000000000000000000000000000000000000000962617374696e61646f000000000000000000000000000000000000000000000362627700000000000000000000000000000000000000000000000000000000046264736d000000000000000000000000000000000000000000000000000000066265616e657200000000000000000000000000000000000000000000000000076265616e65727300000000000000000000000000000000000000000000000008626561737469616c00000000000000000000000000000000000000000000000b626561737469616c69747900000000000000000000000000000000000000000a6265617374696c6974790000000000000000000000000000000000000000000c62656174796f75726d656174000000000000000000000000000000000000000e62656176657220636c656176657200000000000000000000000000000000000b626561766572206c69707300000000000000000000000000000000000000000762656c6c656e64000000000000000000000000000000000000000000000000076265737469616c0000000000000000000000000000000000000000000000000a6265737469616c6974790000000000000000000000000000000000000000000562692b6368000000000000000000000000000000000000000000000000000006626961746368000000000000000000000000000000000000000000000000000962696720626c61636b000000000000000000000000000000000000000000000b626967206272656173747300000000000000000000000000000000000000000c626967206b6e6f636b6572730000000000000000000000000000000000000008626967207469747300000000000000000000000000000000000000000000000662696d626f730000000000000000000000000000000000000000000000000008626972646c6f636b000000000000000000000000000000000000000000000008626973657875616c00000000000000000000000000000000000000000000000562697463680000000000000000000000000000000000000000000000000000076269746368657200000000000000000000000000000000000000000000000008626974636865727300000000000000000000000000000000000000000000000762697463686573000000000000000000000000000000000000000000000000076269746368696e000000000000000000000000000000000000000000000000086269746368696e6700000000000000000000000000000000000000000000000a626c61636b20636f636b0000000000000000000000000000000000000000000d626c6f6e646520616374696f6e00000000000000000000000000000000000017626c6f6e6465206f6e20626c6f6e646520616374696f6e000000000000000006626c6f6f64790000000000000000000000000000000000000000000000000008626c6f77206a6f6200000000000000000000000000000000000000000000000e626c6f7720796f7572206c6f6164000000000000000000000000000000000007626c6f776a6f6200000000000000000000000000000000000000000000000008626c6f776a6f627300000000000000000000000000000000000000000000000b626c756520776166666c65000000000000000000000000000000000000000008626c756d706b696e000000000000000000000000000000000000000000000007626f696f6c617300000000000000000000000000000000000000000000000007626f6c6c6f636b00000000000000000000000000000000000000000000000008626f6c6c6f636b73000000000000000000000000000000000000000000000006626f6c6c6f6b0000000000000000000000000000000000000000000000000006626f6c6c6f780000000000000000000000000000000000000000000000000007626f6e6461676500000000000000000000000000000000000000000000000005626f6e6572000000000000000000000000000000000000000000000000000004626f6f6200000000000000000000000000000000000000000000000000000006626f6f6269650000000000000000000000000000000000000000000000000007626f6f6269657300000000000000000000000000000000000000000000000005626f6f6273000000000000000000000000000000000000000000000000000006626f6f6765720000000000000000000000000000000000000000000000000006626f6f6f62730000000000000000000000000000000000000000000000000007626f6f6f6f627300000000000000000000000000000000000000000000000008626f6f6f6f6f627300000000000000000000000000000000000000000000000a626f6f6f6f6f6f6f627300000000000000000000000000000000000000000005626f6f747900000000000000000000000000000000000000000000000000000a626f6f74792063616c6c000000000000000000000000000000000000000000066272656173740000000000000000000000000000000000000000000000000007627265617374730000000000000000000000000000000000000000000000000762726f7468656c0000000000000000000000000000000000000000000000000d62726f776e2073686f776572730000000000000000000000000000000000000f6272756e6574746520616374696f6e000000000000000000000000000000000662756365746100000000000000000000000000000000000000000000000000066275646468610000000000000000000000000000000000000000000000000006627567676572000000000000000000000000000000000000000000000000000762756b6b616b650000000000000000000000000000000000000000000000000862756c6c64796b6500000000000000000000000000000000000000000000000b62756c6c6574207669626500000000000000000000000000000000000000000862756c6c7368697400000000000000000000000000000000000000000000000362756d000000000000000000000000000000000000000000000000000000000962756e6720686f6c65000000000000000000000000000000000000000000000862756e67686f6c6500000000000000000000000000000000000000000000000c62756e6e79206675636b657200000000000000000000000000000000000000056275737479000000000000000000000000000000000000000000000000000004627574740000000000000000000000000000000000000000000000000000000b627574742d70697261746500000000000000000000000000000000000000000a62757474636865656b730000000000000000000000000000000000000000000862757474686f6c65000000000000000000000000000000000000000000000009627574746d756e6368000000000000000000000000000000000000000000000862757474706c75670000000000000000000000000000000000000000000000046330636b0000000000000000000000000000000000000000000000000000000a6330636b7375636b65720000000000000000000000000000000000000000000963616d656c20746f65000000000000000000000000000000000000000000000863616d656c746f6500000000000000000000000000000000000000000000000763616d6769726c0000000000000000000000000000000000000000000000000763616d736c75740000000000000000000000000000000000000000000000000863616d77686f726500000000000000000000000000000000000000000000000663616e636572000000000000000000000000000000000000000000000000000e636172706574206d756e6368657200000000000000000000000000000000000d6361727065746d756e63686572000000000000000000000000000000000000086361737472617465000000000000000000000000000000000000000000000008636174686f6c69630000000000000000000000000000000000000000000000046361776b000000000000000000000000000000000000000000000000000000056368696e630000000000000000000000000000000000000000000000000000056368696e6b00000000000000000000000000000000000000000000000000000563686f616400000000000000000000000000000000000000000000000000001263686f636f6c61746520726f736562756473000000000000000000000000000563686f6465000000000000000000000000000000000000000000000000000004636970610000000000000000000000000000000000000000000000000000000a636972636c656a65726b00000000000000000000000000000000000000000004636c317400000000000000000000000000000000000000000000000000000011636c6576656c616e6420737465616d6572000000000000000000000000000004636c697400000000000000000000000000000000000000000000000000000008636c697466616365000000000000000000000000000000000000000000000008636c69746f726973000000000000000000000000000000000000000000000005636c69747300000000000000000000000000000000000000000000000000000d636c6f76657220636c616d70730000000000000000000000000000000000000b636c75737465726675636b000000000000000000000000000000000000000004636e757400000000000000000000000000000000000000000000000000000007636f6361696e6500000000000000000000000000000000000000000000000004636f636b0000000000000000000000000000000000000000000000000000000b636f636b2d7375636b6572000000000000000000000000000000000000000008636f636b62697465000000000000000000000000000000000000000000000009636f636b626c6f636b000000000000000000000000000000000000000000000a636f636b62757267657200000000000000000000000000000000000000000008636f636b66616365000000000000000000000000000000000000000000000008636f636b6865616400000000000000000000000000000000000000000000000a636f636b6a6f636b65790000000000000000000000000000000000000000000a636f636b6b6e6f6b65720000000000000000000000000000000000000000000a636f636b6c69636b65720000000000000000000000000000000000000000000a636f636b6d61737465720000000000000000000000000000000000000000000b636f636b6d6f6e676c657200000000000000000000000000000000000000000c636f636b6d6f6e677275656c000000000000000000000000000000000000000a636f636b6d6f6e6b657900000000000000000000000000000000000000000009636f636b6d756e6368000000000000000000000000000000000000000000000b636f636b6d756e63686572000000000000000000000000000000000000000008636f636b6e6f736500000000000000000000000000000000000000000000000a636f636b6e756767657400000000000000000000000000000000000000000005636f636b73000000000000000000000000000000000000000000000000000008636f636b73686974000000000000000000000000000000000000000000000009636f636b736d697468000000000000000000000000000000000000000000000a636f636b736d6f6b657200000000000000000000000000000000000000000008636f636b7375636b00000000000000000000000000000000000000000000000a636f636b7375636b65640000000000000000000000000000000000000000000a636f636b7375636b65720000000000000000000000000000000000000000000b636f636b7375636b696e67000000000000000000000000000000000000000009636f636b7375636b730000000000000000000000000000000000000000000008636f636b73756b61000000000000000000000000000000000000000000000009636f636b73756b6b610000000000000000000000000000000000000000000003636f6b000000000000000000000000000000000000000000000000000000000a636f6b6d756e6368657200000000000000000000000000000000000000000008636f6b7375636b61000000000000000000000000000000000000000000000006636f6e646f6d0000000000000000000000000000000000000000000000000007636f6f6368696500000000000000000000000000000000000000000000000006636f6f6368790000000000000000000000000000000000000000000000000004636f6f6e00000000000000000000000000000000000000000000000000000005636f6f6e73000000000000000000000000000000000000000000000000000006636f6f746572000000000000000000000000000000000000000000000000000b636f70726f6c61676e696100000000000000000000000000000000000000000b636f70726f7068696c6961000000000000000000000000000000000000000008636f70756c617465000000000000000000000000000000000000000000000008636f726e686f6c65000000000000000000000000000000000000000000000003636f7800000000000000000000000000000000000000000000000000000000046372617000000000000000000000000000000000000000000000000000000008637265616d70696500000000000000000000000000000000000000000000000663726f746368000000000000000000000000000000000000000000000000000363756d000000000000000000000000000000000000000000000000000000000963756d627562626c65000000000000000000000000000000000000000000000b63756d64756d707374657200000000000000000000000000000000000000000a63756d67757a7a6c65720000000000000000000000000000000000000000000963756d6a6f636b6579000000000000000000000000000000000000000000000663756d6d6572000000000000000000000000000000000000000000000000000763756d6d696e670000000000000000000000000000000000000000000000000463756d730000000000000000000000000000000000000000000000000000000763756d73686f740000000000000000000000000000000000000000000000000763756d736c75740000000000000000000000000000000000000000000000000763756d746172740000000000000000000000000000000000000000000000000a63756e696c696e6775730000000000000000000000000000000000000000000b63756e696c6c696e67757300000000000000000000000000000000000000000663756e6e6965000000000000000000000000000000000000000000000000000b63756e6e696c696e67757300000000000000000000000000000000000000000463756e740000000000000000000000000000000000000000000000000000000863756e746661636500000000000000000000000000000000000000000000000863756e74686f6c6500000000000000000000000000000000000000000000000863756e746c69636b00000000000000000000000000000000000000000000000a63756e746c69636b65720000000000000000000000000000000000000000000b63756e746c69636b696e6700000000000000000000000000000000000000000763756e747261670000000000000000000000000000000000000000000000000563756e74730000000000000000000000000000000000000000000000000000066379616c69730000000000000000000000000000000000000000000000000008637962657266756300000000000000000000000000000000000000000000000963796265726675636b000000000000000000000000000000000000000000000b63796265726675636b656400000000000000000000000000000000000000000b63796265726675636b657200000000000000000000000000000000000000000c63796265726675636b657273000000000000000000000000000000000000000c63796265726675636b696e67000000000000000000000000000000000000000863796265727365780000000000000000000000000000000000000000000000046431636b0000000000000000000000000000000000000000000000000000000664616d6d6974000000000000000000000000000000000000000000000000000464616d6e000000000000000000000000000000000000000000000000000000066461726b696500000000000000000000000000000000000000000000000000096461746520726170650000000000000000000000000000000000000000000008646174657261706500000000000000000000000000000000000000000000000b64656570207468726f617400000000000000000000000000000000000000000a646565707468726f61740000000000000000000000000000000000000000000c64656e64726f7068696c696100000000000000000000000000000000000000046469636b000000000000000000000000000000000000000000000000000000076469636b6261670000000000000000000000000000000000000000000000000a6469636b626561746572000000000000000000000000000000000000000000086469636b666163650000000000000000000000000000000000000000000000086469636b686561640000000000000000000000000000000000000000000000086469636b686f6c650000000000000000000000000000000000000000000000096469636b6a7569636500000000000000000000000000000000000000000000086469636b6d696c6b00000000000000000000000000000000000000000000000a6469636b6d6f6e676572000000000000000000000000000000000000000000086469636b736c617000000000000000000000000000000000000000000000000a6469636b7375636b6572000000000000000000000000000000000000000000076469636b7761640000000000000000000000000000000000000000000000000a6469636b77656173656c000000000000000000000000000000000000000000086469636b776565640000000000000000000000000000000000000000000000076469636b776f640000000000000000000000000000000000000000000000000464696b650000000000000000000000000000000000000000000000000000000564696c646f00000000000000000000000000000000000000000000000000000664696c646f73000000000000000000000000000000000000000000000000000d64696e676c65626572726965730000000000000000000000000000000000000b64696e676c65626572727900000000000000000000000000000000000000000464696e6b0000000000000000000000000000000000000000000000000000000564696e6b730000000000000000000000000000000000000000000000000000076469707368697400000000000000000000000000000000000000000000000005646972736100000000000000000000000000000000000000000000000000000d64697274792070696c6c6f77730000000000000000000000000000000000000d64697274792073616e6368657a00000000000000000000000000000000000004646c636b00000000000000000000000000000000000000000000000000000009646f67207374796c65000000000000000000000000000000000000000000000a646f672d6675636b65720000000000000000000000000000000000000000000c646f67676965207374796c65000000000000000000000000000000000000000b646f676769657374796c65000000000000000000000000000000000000000006646f6767696e0000000000000000000000000000000000000000000000000007646f6767696e670000000000000000000000000000000000000000000000000b646f676779207374796c6500000000000000000000000000000000000000000a646f6767797374796c6500000000000000000000000000000000000000000007646f6c636574740000000000000000000000000000000000000000000000000a646f6d696e6174696f6e0000000000000000000000000000000000000000000a646f6d696e617472697800000000000000000000000000000000000000000006646f6d6d6573000000000000000000000000000000000000000000000000000c646f6e6b65792070756e6368000000000000000000000000000000000000000c646f6e6b65797269626265720000000000000000000000000000000000000008646f6f6368626167000000000000000000000000000000000000000000000006646f6f6b69650000000000000000000000000000000000000000000000000005646f6f736800000000000000000000000000000000000000000000000000000b646f75626c6520646f6e67000000000000000000000000000000000000000012646f75626c652070656e6574726174696f6e0000000000000000000000000006646f756368650000000000000000000000000000000000000000000000000009646f756368656261670000000000000000000000000000000000000000000009647020616374696f6e00000000000000000000000000000000000000000000086472792068756d70000000000000000000000000000000000000000000000005647563686500000000000000000000000000000000000000000000000000000764756d626173730000000000000000000000000000000000000000000000000864756d627368697400000000000000000000000000000000000000000000000764756d7368697400000000000000000000000000000000000000000000000004647664610000000000000000000000000000000000000000000000000000000464796b650000000000000000000000000000000000000000000000000000000a656174206d7920617373000000000000000000000000000000000000000000056563636869000000000000000000000000000000000000000000000000000009656a6163756c617465000000000000000000000000000000000000000000000a656a6163756c617465640000000000000000000000000000000000000000000a656a6163756c617465730000000000000000000000000000000000000000000b656a6163756c6174696e6700000000000000000000000000000000000000000c656a6163756c6174696e6773000000000000000000000000000000000000000b656a6163756c6174696f6e000000000000000000000000000000000000000009656a616b756c61746500000000000000000000000000000000000000000000086572656374696f6e00000000000000000000000000000000000000000000000665726f746963000000000000000000000000000000000000000000000000000765726f7469736d000000000000000000000000000000000000000000000000066573636f7274000000000000000000000000000000000000000000000000000665756e756368000000000000000000000000000000000000000000000000000965786372656d656e7400000000000000000000000000000000000000000000076620752063206b0000000000000000000000000000000000000000000000000b6620752063206b20652072000000000000000000000000000000000000000007665f755f635f6b0000000000000000000000000000000000000000000000000566346e6e7900000000000000000000000000000000000000000000000000000366616700000000000000000000000000000000000000000000000000000000066661676261670000000000000000000000000000000000000000000000000004666167670000000000000000000000000000000000000000000000000000000766616767696e670000000000000000000000000000000000000000000000000666616767697400000000000000000000000000000000000000000000000000076661676769747400000000000000000000000000000000000000000000000006666167676f74000000000000000000000000000000000000000000000000000566616767730000000000000000000000000000000000000000000000000000056661676f740000000000000000000000000000000000000000000000000000066661676f747300000000000000000000000000000000000000000000000000046661677300000000000000000000000000000000000000000000000000000007666167746172640000000000000000000000000000000000000000000000000566616e6e7900000000000000000000000000000000000000000000000000000a66616e6e79666c6170730000000000000000000000000000000000000000000b66616e6e796675636b657200000000000000000000000000000000000000000566616e79790000000000000000000000000000000000000000000000000000046661727400000000000000000000000000000000000000000000000000000006666172746564000000000000000000000000000000000000000000000000000766617274696e6700000000000000000000000000000000000000000000000005666172747900000000000000000000000000000000000000000000000000000666617461737300000000000000000000000000000000000000000000000000046663756b000000000000000000000000000000000000000000000000000000066663756b657200000000000000000000000000000000000000000000000000076663756b696e6700000000000000000000000000000000000000000000000005666563616c00000000000000000000000000000000000000000000000000000566656365730000000000000000000000000000000000000000000000000000046665636b000000000000000000000000000000000000000000000000000000066665636b6572000000000000000000000000000000000000000000000000000766656c6174696f0000000000000000000000000000000000000000000000000566656c636800000000000000000000000000000000000000000000000000000866656c6368696e6700000000000000000000000000000000000000000000000766656c6c6174650000000000000000000000000000000000000000000000000866656c6c6174696f00000000000000000000000000000000000000000000000666656c746368000000000000000000000000000000000000000000000000001066656d616c6520737175697274696e670000000000000000000000000000000666656d646f6d000000000000000000000000000000000000000000000000000766696767696e670000000000000000000000000000000000000000000000000a66696e67657262616e670000000000000000000000000000000000000000000a66696e6765726675636b0000000000000000000000000000000000000000000c66696e6765726675636b6564000000000000000000000000000000000000000c66696e6765726675636b6572000000000000000000000000000000000000000d66696e6765726675636b6572730000000000000000000000000000000000000d66696e6765726675636b696e670000000000000000000000000000000000000b66696e6765726675636b7300000000000000000000000000000000000000000966696e676572696e670000000000000000000000000000000000000000000008666973746675636b00000000000000000000000000000000000000000000000a666973746675636b65640000000000000000000000000000000000000000000a666973746675636b65720000000000000000000000000000000000000000000b666973746675636b65727300000000000000000000000000000000000000000b666973746675636b696e6700000000000000000000000000000000000000000c666973746675636b696e67730000000000000000000000000000000000000009666973746675636b73000000000000000000000000000000000000000000000766697374696e6700000000000000000000000000000000000000000000000006666c616d65720000000000000000000000000000000000000000000000000006666c616e67650000000000000000000000000000000000000000000000000004666f6f6b00000000000000000000000000000000000000000000000000000006666f6f6b6572000000000000000000000000000000000000000000000000000b666f6f7420666574697368000000000000000000000000000000000000000007666f6f746a6f620000000000000000000000000000000000000000000000000a666f6f746c69636b65720000000000000000000000000000000000000000000866726f7474696e670000000000000000000000000000000000000000000000046675636b0000000000000000000000000000000000000000000000000000000c6675636b20627574746f6e7300000000000000000000000000000000000000056675636b610000000000000000000000000000000000000000000000000000066675636b656400000000000000000000000000000000000000000000000000066675636b657200000000000000000000000000000000000000000000000000076675636b657273000000000000000000000000000000000000000000000000086675636b686561640000000000000000000000000000000000000000000000096675636b686561647300000000000000000000000000000000000000000000066675636b696e00000000000000000000000000000000000000000000000000076675636b696e67000000000000000000000000000000000000000000000000086675636b696e67730000000000000000000000000000000000000000000000176675636b696e67736869746d6f746865726675636b65720000000000000000066675636b6d6500000000000000000000000000000000000000000000000000056675636b730000000000000000000000000000000000000000000000000000096675636b746172647300000000000000000000000000000000000000000000086675636b776869740000000000000000000000000000000000000000000000076675636b7769740000000000000000000000000000000000000000000000000c6675646765207061636b6572000000000000000000000000000000000000000b66756467657061636b657200000000000000000000000000000000000000000366756b000000000000000000000000000000000000000000000000000000000566756b657200000000000000000000000000000000000000000000000000000666756b6b6572000000000000000000000000000000000000000000000000000666756b6b696e000000000000000000000000000000000000000000000000000466756b730000000000000000000000000000000000000000000000000000000766756b776869740000000000000000000000000000000000000000000000000666756b7769740000000000000000000000000000000000000000000000000008667574616e61726900000000000000000000000000000000000000000000000366757800000000000000000000000000000000000000000000000000000000056675783072000000000000000000000000000000000000000000000000000006672d73706f74000000000000000000000000000000000000000000000000000967616e672062616e67000000000000000000000000000000000000000000000867616e6762616e6700000000000000000000000000000000000000000000000a67616e6762616e6765640000000000000000000000000000000000000000000967616e6762616e67730000000000000000000000000000000000000000000003676179000000000000000000000000000000000000000000000000000000000767617920736578000000000000000000000000000000000000000000000000066761796173730000000000000000000000000000000000000000000000000006676179626f620000000000000000000000000000000000000000000000000005676179646f0000000000000000000000000000000000000000000000000000076761796c6f72640000000000000000000000000000000000000000000000000667617973657800000000000000000000000000000000000000000000000000076761797461726400000000000000000000000000000000000000000000000006676179776164000000000000000000000000000000000000000000000000000767656e6974616c0000000000000000000000000000000000000000000000000867656e6974616c7300000000000000000000000000000000000000000000000a6769616e7420636f636b000000000000000000000000000000000000000000066769676f6c6f00000000000000000000000000000000000000000000000000076769726c206f6e0000000000000000000000000000000000000000000000000b6769726c206f6e20746f7000000000000000000000000000000000000000000f6769726c7320676f6e652077696c640000000000000000000000000000000006676f617463780000000000000000000000000000000000000000000000000006676f617473650000000000000000000000000000000000000000000000000008676f642064616d6e000000000000000000000000000000000000000000000007676f642d64616d0000000000000000000000000000000000000000000000000a676f642d64616d6e656400000000000000000000000000000000000000000007676f6464616d6e00000000000000000000000000000000000000000000000009676f6464616d6e65640000000000000000000000000000000000000000000006676f6b6b756e000000000000000000000000000000000000000000000000000d676f6c64656e2073686f77657200000000000000000000000000000000000009676f6e6f72726865610000000000000000000000000000000000000000000008676f6f206769726c000000000000000000000000000000000000000000000005676f6f6368000000000000000000000000000000000000000000000000000008676f6f64706f6f70000000000000000000000000000000000000000000000004676f6f6b00000000000000000000000000000000000000000000000000000008676f72656761736d0000000000000000000000000000000000000000000000066772696e676f000000000000000000000000000000000000000000000000000567726f706500000000000000000000000000000000000000000000000000000967726f7570207365780000000000000000000000000000000000000000000005677569646f0000000000000000000000000000000000000000000000000000046775726f0000000000000000000000000000000000000000000000000000000868616e64206a6f6200000000000000000000000000000000000000000000000768616e646a6f62000000000000000000000000000000000000000000000000096861726420636f7265000000000000000000000000000000000000000000000868617264636f726500000000000000000000000000000000000000000000000b68617264636f7265736578000000000000000000000000000000000000000004686565620000000000000000000000000000000000000000000000000000000468656c6c0000000000000000000000000000000000000000000000000000000668656e74616900000000000000000000000000000000000000000000000000066865727065730000000000000000000000000000000000000000000000000005686573686500000000000000000000000000000000000000000000000000000c68657465726f73657875616c00000000000000000000000000000000000000066869746c65720000000000000000000000000000000000000000000000000002686f000000000000000000000000000000000000000000000000000000000004686f617200000000000000000000000000000000000000000000000000000005686f617265000000000000000000000000000000000000000000000000000003686f650000000000000000000000000000000000000000000000000000000004686f657200000000000000000000000000000000000000000000000000000004686f6d6f0000000000000000000000000000000000000000000000000000000a686f6d6f65726f7469630000000000000000000000000000000000000000000a686f6d6f73657875616c00000000000000000000000000000000000000000006686f6e6b65790000000000000000000000000000000000000000000000000005686f6e6b79000000000000000000000000000000000000000000000000000006686f6f6b65720000000000000000000000000000000000000000000000000004686f726500000000000000000000000000000000000000000000000000000008686f726e69657374000000000000000000000000000000000000000000000005686f726e79000000000000000000000000000000000000000000000000000007686f73656a6f6200000000000000000000000000000000000000000000000008686f74206361726c000000000000000000000000000000000000000000000009686f7420636869636b0000000000000000000000000000000000000000000006686f74736578000000000000000000000000000000000000000000000000000b686f7720746f206b696c6c00000000000000000000000000000000000000000d686f7720746f206d757264657200000000000000000000000000000000000008687567652066617400000000000000000000000000000000000000000000000768756d70696e67000000000000000000000000000000000000000000000000056964696f74000000000000000000000000000000000000000000000000000006696e63657374000000000000000000000000000000000000000000000000000b696e746572636f7572736500000000000000000000000000000000000000000b696e74657272616369616c0000000000000000000000000000000000000000086a61636b206f66660000000000000000000000000000000000000000000000086a61636b2d6f66660000000000000000000000000000000000000000000000076a61636b617373000000000000000000000000000000000000000000000000076a61636b6f6666000000000000000000000000000000000000000000000000096a61696c206261697400000000000000000000000000000000000000000000086a61696c626169740000000000000000000000000000000000000000000000036a6170000000000000000000000000000000000000000000000000000000000b6a656c6c7920646f6e75740000000000000000000000000000000000000000086a65726b206f66660000000000000000000000000000000000000000000000086a65726b2d6f66660000000000000000000000000000000000000000000000076a65726b6f6666000000000000000000000000000000000000000000000000056a657375730000000000000000000000000000000000000000000000000000066a657769736800000000000000000000000000000000000000000000000000076a696761626f6f000000000000000000000000000000000000000000000000086a69676761626f6f0000000000000000000000000000000000000000000000096a6967676572626f6f00000000000000000000000000000000000000000000046a69736d000000000000000000000000000000000000000000000000000000036a697a00000000000000000000000000000000000000000000000000000000046a697a6d000000000000000000000000000000000000000000000000000000046a697a7a000000000000000000000000000000000000000000000000000000056a756767730000000000000000000000000000000000000000000000000000046b61776b000000000000000000000000000000000000000000000000000000046b696b65000000000000000000000000000000000000000000000000000000076b696e62616b75000000000000000000000000000000000000000000000000086b696e6b737465720000000000000000000000000000000000000000000000056b696e6b790000000000000000000000000000000000000000000000000000056b69756e740000000000000000000000000000000000000000000000000000046b6e6f62000000000000000000000000000000000000000000000000000000086b6e6f6262696e670000000000000000000000000000000000000000000000076b6e6f62656164000000000000000000000000000000000000000000000000066b6e6f62656400000000000000000000000000000000000000000000000000076b6e6f62656e64000000000000000000000000000000000000000000000000086b6e6f62686561640000000000000000000000000000000000000000000000096b6e6f626a6f636b7900000000000000000000000000000000000000000000096b6e6f626a6f6b657900000000000000000000000000000000000000000000046b6f636b000000000000000000000000000000000000000000000000000000066b6f6e64756d00000000000000000000000000000000000000000000000000076b6f6e64756d73000000000000000000000000000000000000000000000000056b6f6f63680000000000000000000000000000000000000000000000000000066b6f6f74636800000000000000000000000000000000000000000000000000036b756d00000000000000000000000000000000000000000000000000000000056b756d65720000000000000000000000000000000000000000000000000000066b756d6d657200000000000000000000000000000000000000000000000000076b756d6d696e67000000000000000000000000000000000000000000000000046b756d730000000000000000000000000000000000000000000000000000000a6b756e696c696e677573000000000000000000000000000000000000000000046b756e74000000000000000000000000000000000000000000000000000000046b796b65000000000000000000000000000000000000000000000000000000066c33692b636800000000000000000000000000000000000000000000000000066c336974636800000000000000000000000000000000000000000000000000056c616269610000000000000000000000000000000000000000000000000000116c65617468657220726573747261696e740000000000000000000000000000176c656174686572207374726169676874206a61636b657400000000000000000b6c656d6f6e2070617274790000000000000000000000000000000000000000076c65736269616e000000000000000000000000000000000000000000000000056c6573626f0000000000000000000000000000000000000000000000000000066c657a7a696500000000000000000000000000000000000000000000000000066c696269646f00000000000000000000000000000000000000000000000000056c6d66616f0000000000000000000000000000000000000000000000000000066c6f6c697461000000000000000000000000000000000000000000000000000a6c6f76656d616b696e67000000000000000000000000000000000000000000046c757374000000000000000000000000000000000000000000000000000000076c757374696e67000000000000000000000000000000000000000000000000046d306630000000000000000000000000000000000000000000000000000000046d30666f0000000000000000000000000000000000000000000000000000000a6d343574657262617465000000000000000000000000000000000000000000086d6135746572623800000000000000000000000000000000000000000000000a6d6135746572626174650000000000000000000000000000000000000000000c6d616b65206d6520636f6d65000000000000000000000000000000000000000e6d616c6520737175697274696e670000000000000000000000000000000000096d6172696a75616e6100000000000000000000000000000000000000000000096d61736f6368697374000000000000000000000000000000000000000000000b6d61737465722d626174650000000000000000000000000000000000000000086d6173746572623800000000000000000000000000000000000000000000000a6d61737465726261742a0000000000000000000000000000000000000000000a6d6173746572626174330000000000000000000000000000000000000000000a6d6173746572626174650000000000000000000000000000000000000000000c6d6173746572626174696f6e000000000000000000000000000000000000000d6d6173746572626174696f6e730000000000000000000000000000000000000a6d6173747572626174650000000000000000000000000000000000000000000a6d6561746265617465720000000000000000000000000000000000000000000e6d656e61676520612074726f69730000000000000000000000000000000000046d696c66000000000000000000000000000000000000000000000000000000056d696e67650000000000000000000000000000000000000000000000000000136d697373696f6e61727920706f736974696f6e000000000000000000000000056d6f2d666f0000000000000000000000000000000000000000000000000000046d6f6630000000000000000000000000000000000000000000000000000000046d6f666f000000000000000000000000000000000000000000000000000000086d6f6c65737465720000000000000000000000000000000000000000000000096d6f6e676f6c6f696400000000000000000000000000000000000000000000066d6f726d6f6e00000000000000000000000000000000000000000000000000056d6f726f6e0000000000000000000000000000000000000000000000000000096d6f7468616675636b000000000000000000000000000000000000000000000a6d6f7468616675636b610000000000000000000000000000000000000000000b6d6f7468616675636b617300000000000000000000000000000000000000000b6d6f7468616675636b617a00000000000000000000000000000000000000000b6d6f7468616675636b656400000000000000000000000000000000000000000b6d6f7468616675636b657200000000000000000000000000000000000000000c6d6f7468616675636b657273000000000000000000000000000000000000000b6d6f7468616675636b696e00000000000000000000000000000000000000000c6d6f7468616675636b696e67000000000000000000000000000000000000000d6d6f7468616675636b696e67730000000000000000000000000000000000000a6d6f7468616675636b730000000000000000000000000000000000000000000d6d6f74686572206675636b65720000000000000000000000000000000000000a6d6f746865726675636b0000000000000000000000000000000000000000000c6d6f746865726675636b6564000000000000000000000000000000000000000c6d6f746865726675636b6572000000000000000000000000000000000000000d6d6f746865726675636b6572730000000000000000000000000000000000000c6d6f746865726675636b696e000000000000000000000000000000000000000d6d6f746865726675636b696e670000000000000000000000000000000000000e6d6f746865726675636b696e677300000000000000000000000000000000000c6d6f746865726675636b6b61000000000000000000000000000000000000000b6d6f746865726675636b7300000000000000000000000000000000000000000e6d6f756e64206f662076656e75730000000000000000000000000000000000086d722068616e64730000000000000000000000000000000000000000000000046d7566660000000000000000000000000000000000000000000000000000000a6d756666206469766572000000000000000000000000000000000000000000096d7566666469766572000000000000000000000000000000000000000000000a6d756666646976696e67000000000000000000000000000000000000000000066d75736c696d00000000000000000000000000000000000000000000000000056d7574686100000000000000000000000000000000000000000000000000000b6d757468616665636b657200000000000000000000000000000000000000000c6d757468616675636b6b657200000000000000000000000000000000000000066d7574686572000000000000000000000000000000000000000000000000000c6d75746865726675636b657200000000000000000000000000000000000000056e316767610000000000000000000000000000000000000000000000000000066e316767657200000000000000000000000000000000000000000000000000066e616d626c6100000000000000000000000000000000000000000000000000076e617761736869000000000000000000000000000000000000000000000000046e617a69000000000000000000000000000000000000000000000000000000056e6567726f0000000000000000000000000000000000000000000000000000076e656f6e617a69000000000000000000000000000000000000000000000000076e6967206e6f67000000000000000000000000000000000000000000000000066e696767337200000000000000000000000000000000000000000000000000066e696767346800000000000000000000000000000000000000000000000000056e696767610000000000000000000000000000000000000000000000000000066e696767616800000000000000000000000000000000000000000000000000066e696767617300000000000000000000000000000000000000000000000000066e696767617a00000000000000000000000000000000000000000000000000066e696767657200000000000000000000000000000000000000000000000000076e696767657273000000000000000000000000000000000000000000000000066e69676c6574000000000000000000000000000000000000000000000000000b6e696d70686f6d616e69610000000000000000000000000000000000000000066e6970706c6500000000000000000000000000000000000000000000000000076e6970706c6573000000000000000000000000000000000000000000000000036e6f6200000000000000000000000000000000000000000000000000000000096e6f62206a6f6b657900000000000000000000000000000000000000000000076e6f6268656164000000000000000000000000000000000000000000000000086e6f626a6f636b790000000000000000000000000000000000000000000000086e6f626a6f6b657900000000000000000000000000000000000000000000000b6e73667720696d616765730000000000000000000000000000000000000000046e756465000000000000000000000000000000000000000000000000000000066e756469747900000000000000000000000000000000000000000000000000086e756d626e7574730000000000000000000000000000000000000000000000076e75747361636b000000000000000000000000000000000000000000000000066e796d70686f000000000000000000000000000000000000000000000000000b6e796d70686f6d616e69610000000000000000000000000000000000000000096f63746f707573737900000000000000000000000000000000000000000000086f6d6f72617368690000000000000000000000000000000000000000000000116f6e65206375702074776f206769726c7300000000000000000000000000000f6f6e6520677579206f6e65206a617200000000000000000000000000000000076f72676173696d000000000000000000000000000000000000000000000000086f72676173696d730000000000000000000000000000000000000000000000066f726761736d00000000000000000000000000000000000000000000000000076f726761736d73000000000000000000000000000000000000000000000000046f726779000000000000000000000000000000000000000000000000000000047030726e0000000000000000000000000000000000000000000000000000000a706165646f7068696c650000000000000000000000000000000000000000000470616b690000000000000000000000000000000000000000000000000000000770616e6f6f63680000000000000000000000000000000000000000000000000770616e746965730000000000000000000000000000000000000000000000000570616e74790000000000000000000000000000000000000000000000000000047061776e000000000000000000000000000000000000000000000000000000067065636b6572000000000000000000000000000000000000000000000000000a7065636b657268656164000000000000000000000000000000000000000000087065646f626561720000000000000000000000000000000000000000000000097065646f7068696c650000000000000000000000000000000000000000000007706565686f6c650000000000000000000000000000000000000000000000000770656767696e670000000000000000000000000000000000000000000000000570656e697300000000000000000000000000000000000000000000000000000b70656e69736675636b657200000000000000000000000000000000000000000970686f6e6520736578000000000000000000000000000000000000000000000870686f6e65736578000000000000000000000000000000000000000000000005706875636b0000000000000000000000000000000000000000000000000000047068756b000000000000000000000000000000000000000000000000000000067068756b656400000000000000000000000000000000000000000000000000077068756b696e67000000000000000000000000000000000000000000000000077068756b6b6564000000000000000000000000000000000000000000000000087068756b6b696e670000000000000000000000000000000000000000000000057068756b73000000000000000000000000000000000000000000000000000004706875710000000000000000000000000000000000000000000000000000000d7069656365206f662073686974000000000000000000000000000000000000097069676675636b6572000000000000000000000000000000000000000000000670696d706973000000000000000000000000000000000000000000000000000370697300000000000000000000000000000000000000000000000000000000057069736573000000000000000000000000000000000000000000000000000005706973696e000000000000000000000000000000000000000000000000000006706973696e6700000000000000000000000000000000000000000000000000057069736f6600000000000000000000000000000000000000000000000000000470697373000000000000000000000000000000000000000000000000000000087069737320706967000000000000000000000000000000000000000000000006706973736564000000000000000000000000000000000000000000000000000670697373657200000000000000000000000000000000000000000000000000077069737365727300000000000000000000000000000000000000000000000006706973736573000000000000000000000000000000000000000000000000000870697373666c617000000000000000000000000000000000000000000000000970697373666c617073000000000000000000000000000000000000000000000670697373696e000000000000000000000000000000000000000000000000000770697373696e6700000000000000000000000000000000000000000000000007706973736f6666000000000000000000000000000000000000000000000000077069737370696700000000000000000000000000000000000000000000000007706c6179626f790000000000000000000000000000000000000000000000000e706c65617375726520636865737400000000000000000000000000000000000b706f6c6520736d6f6b657200000000000000000000000000000000000000000a706f6c65736d6f6b657200000000000000000000000000000000000000000007706f6c6c6f636b00000000000000000000000000000000000000000000000008706f6e79706c6179000000000000000000000000000000000000000000000003706f6f0000000000000000000000000000000000000000000000000000000004706f6f6600000000000000000000000000000000000000000000000000000004706f6f6e00000000000000000000000000000000000000000000000000000007706f6f6e616e6900000000000000000000000000000000000000000000000007706f6f6e616e7900000000000000000000000000000000000000000000000008706f6f6e74616e67000000000000000000000000000000000000000000000004706f6f700000000000000000000000000000000000000000000000000000000a706f6f7020636875746500000000000000000000000000000000000000000009706f6f7063687574650000000000000000000000000000000000000000000004706f726e00000000000000000000000000000000000000000000000000000005706f726e6f00000000000000000000000000000000000000000000000000000b706f726e6f677261706879000000000000000000000000000000000000000006706f726e6f730000000000000000000000000000000000000000000000000005707269636b000000000000000000000000000000000000000000000000000006707269636b7300000000000000000000000000000000000000000000000000167072696e636520616c62657274207069657263696e670000000000000000000470726f6e0000000000000000000000000000000000000000000000000000000a70726f7374697475746500000000000000000000000000000000000000000004707468630000000000000000000000000000000000000000000000000000000470756265000000000000000000000000000000000000000000000000000000057075626573000000000000000000000000000000000000000000000000000005707562696300000000000000000000000000000000000000000000000000000770756e616e6e790000000000000000000000000000000000000000000000000670756e616e79000000000000000000000000000000000000000000000000000570756e74610000000000000000000000000000000000000000000000000000067075736965730000000000000000000000000000000000000000000000000005707573736500000000000000000000000000000000000000000000000000000570757373690000000000000000000000000000000000000000000000000000077075737369657300000000000000000000000000000000000000000000000005707573737900000000000000000000000000000000000000000000000000000c70757373796c69636b696e670000000000000000000000000000000000000006707573737973000000000000000000000000000000000000000000000000000470757379000000000000000000000000000000000000000000000000000000047075746f0000000000000000000000000000000000000000000000000000000571756561660000000000000000000000000000000000000000000000000000057175656566000000000000000000000000000000000000000000000000000005717565657200000000000000000000000000000000000000000000000000000971756565726261697400000000000000000000000000000000000000000000097175656572686f6c6500000000000000000000000000000000000000000000047175696d000000000000000000000000000000000000000000000000000000067261636973740000000000000000000000000000000000000000000000000007726167686561640000000000000000000000000000000000000000000000000c726167696e6720626f6e657200000000000000000000000000000000000000047261706500000000000000000000000000000000000000000000000000000006726170696e670000000000000000000000000000000000000000000000000006726170697374000000000000000000000000000000000000000000000000000672656374756d000000000000000000000000000000000000000000000000000572656e6f62000000000000000000000000000000000000000000000000000006726574617264000000000000000000000000000000000000000000000000000f7265766572736520636f776769726c000000000000000000000000000000000672696d6a6177000000000000000000000000000000000000000000000000000672696d6a6f62000000000000000000000000000000000000000000000000000772696d6d696e6700000000000000000000000000000000000000000000000009726f73792070616c6d000000000000000000000000000000000000000000001b726f73792070616c6d20616e64206865722035207369737465727300000000057275736b6900000000000000000000000000000000000000000000000000000e72757374792074726f6d626f6e650000000000000000000000000000000000057320686974000000000000000000000000000000000000000000000000000007735f685f695f7400000000000000000000000000000000000000000000000006732e6f2e622e000000000000000000000000000000000000000000000000000373266d000000000000000000000000000000000000000000000000000000000673616469736d0000000000000000000000000000000000000000000000000006736164697374000000000000000000000000000000000000000000000000000873616e746f72756d00000000000000000000000000000000000000000000000473636174000000000000000000000000000000000000000000000000000000077363686c6f6e670000000000000000000000000000000000000000000000000a73636973736f72696e67000000000000000000000000000000000000000000087363726577696e670000000000000000000000000000000000000000000000067363726f617400000000000000000000000000000000000000000000000000067363726f746500000000000000000000000000000000000000000000000000077363726f74756d000000000000000000000000000000000000000000000000077363756d6261670000000000000000000000000000000000000000000000000573656d656e00000000000000000000000000000000000000000000000000000373657800000000000000000000000000000000000000000000000000000000047365786f0000000000000000000000000000000000000000000000000000000473657879000000000000000000000000000000000000000000000000000000047368212b0000000000000000000000000000000000000000000000000000000473682174000000000000000000000000000000000000000000000000000000047368317400000000000000000000000000000000000000000000000000000004736861670000000000000000000000000000000000000000000000000000000773686167676572000000000000000000000000000000000000000000000000077368616767696e000000000000000000000000000000000000000000000000087368616767696e6700000000000000000000000000000000000000000000000d736861766564206265617665720000000000000000000000000000000000000c73686176656420707573737900000000000000000000000000000000000000077368656d616c65000000000000000000000000000000000000000000000000047368692b0000000000000000000000000000000000000000000000000000000773686962617269000000000000000000000000000000000000000000000000047368697400000000000000000000000000000000000000000000000000000008736869742d617373000000000000000000000000000000000000000000000008736869742d62616700000000000000000000000000000000000000000000000b736869742d62616767657200000000000000000000000000000000000000000a736869742d627261696e0000000000000000000000000000000000000000000b736869742d627265617468000000000000000000000000000000000000000009736869742d63756e740000000000000000000000000000000000000000000009736869742d6469636b000000000000000000000000000000000000000000000b736869742d656174696e67000000000000000000000000000000000000000009736869742d66616365000000000000000000000000000000000000000000000a736869742d666163656400000000000000000000000000000000000000000008736869742d666974000000000000000000000000000000000000000000000009736869742d686561640000000000000000000000000000000000000000000009736869742d6865656c0000000000000000000000000000000000000000000009736869742d686f6c65000000000000000000000000000000000000000000000a736869742d686f75736500000000000000000000000000000000000000000009736869742d6c6f61640000000000000000000000000000000000000000000008736869742d706f7400000000000000000000000000000000000000000000000c736869742d73706974746572000000000000000000000000000000000000000a736869742d737461696e000000000000000000000000000000000000000000077368697461737300000000000000000000000000000000000000000000000007736869746261670000000000000000000000000000000000000000000000000a736869746261676765720000000000000000000000000000000000000000000973686974626c696d70000000000000000000000000000000000000000000000973686974627261696e000000000000000000000000000000000000000000000a73686974627265617468000000000000000000000000000000000000000000087368697463756e74000000000000000000000000000000000000000000000008736869746469636b000000000000000000000000000000000000000000000005736869746500000000000000000000000000000000000000000000000000000a73686974656174696e670000000000000000000000000000000000000000000673686974656400000000000000000000000000000000000000000000000000067368697465790000000000000000000000000000000000000000000000000008736869746661636500000000000000000000000000000000000000000000000973686974666163656400000000000000000000000000000000000000000000077368697466697400000000000000000000000000000000000000000000000008736869746675636b0000000000000000000000000000000000000000000000087368697466756c6c0000000000000000000000000000000000000000000000087368697468656164000000000000000000000000000000000000000000000008736869746865656c00000000000000000000000000000000000000000000000873686974686f6c6500000000000000000000000000000000000000000000000973686974686f757365000000000000000000000000000000000000000000000773686974696e670000000000000000000000000000000000000000000000000873686974696e6773000000000000000000000000000000000000000000000008736869746c6f616400000000000000000000000000000000000000000000000773686974706f7400000000000000000000000000000000000000000000000005736869747300000000000000000000000000000000000000000000000000000b736869747370697474657200000000000000000000000000000000000000000973686974737461696e000000000000000000000000000000000000000000000773686974746564000000000000000000000000000000000000000000000000077368697474657200000000000000000000000000000000000000000000000008736869747465727300000000000000000000000000000000000000000000000973686974746965737400000000000000000000000000000000000000000000087368697474696e670000000000000000000000000000000000000000000000097368697474696e67730000000000000000000000000000000000000000000006736869747479000000000000000000000000000000000000000000000000000573686974790000000000000000000000000000000000000000000000000000047368697a000000000000000000000000000000000000000000000000000000077368697a6e69740000000000000000000000000000000000000000000000000573686f7461000000000000000000000000000000000000000000000000000009736872696d70696e670000000000000000000000000000000000000000000005736b616e6b000000000000000000000000000000000000000000000000000005736b656574000000000000000000000000000000000000000000000000000008736c616e74657965000000000000000000000000000000000000000000000004736c757400000000000000000000000000000000000000000000000000000007736c757462616700000000000000000000000000000000000000000000000005736c757473000000000000000000000000000000000000000000000000000004736d656700000000000000000000000000000000000000000000000000000006736d65676d610000000000000000000000000000000000000000000000000004736d757400000000000000000000000000000000000000000000000000000006736e61746368000000000000000000000000000000000000000000000000000b736e6f7762616c6c696e67000000000000000000000000000000000000000008736f646f6d697a65000000000000000000000000000000000000000000000006736f646f6d79000000000000000000000000000000000000000000000000000e736f6e2d6f662d612d62697463680000000000000000000000000000000000047370616300000000000000000000000000000000000000000000000000000005737065726d0000000000000000000000000000000000000000000000000000047370696300000000000000000000000000000000000000000000000000000005737069636b00000000000000000000000000000000000000000000000000000773706c6f6f67650000000000000000000000000000000000000000000000000d73706c6f6f6765206d6f6f73650000000000000000000000000000000000000673706f6f6765000000000000000000000000000000000000000000000000000b737072656164206c6567730000000000000000000000000000000000000000057370756e6b0000000000000000000000000000000000000000000000000000087374726170206f6e00000000000000000000000000000000000000000000000773747261706f6e0000000000000000000000000000000000000000000000000973747261707061646f000000000000000000000000000000000000000000000a737472697020636c756200000000000000000000000000000000000000000006737475706964000000000000000000000000000000000000000000000000000b7374796c6520646f6767790000000000000000000000000000000000000000047375636b000000000000000000000000000000000000000000000000000000057375636b73000000000000000000000000000000000000000000000000000007737569636964650000000000000000000000000000000000000000000000000d73756963696465206769726c730000000000000000000000000000000000000c73756c74727920776f6d656e00000000000000000000000000000000000000087377617374696b610000000000000000000000000000000000000000000000077377696e6765720000000000000000000000000000000000000000000000000873797068696c69730000000000000000000000000000000000000000000000077431747431653500000000000000000000000000000000000000000000000007743174746965730000000000000000000000000000000000000000000000000c7461696e746564206c6f7665000000000000000000000000000000000000000474617264000000000000000000000000000000000000000000000000000000087461737465206d7900000000000000000000000000000000000000000000000b7465612062616767696e6700000000000000000000000000000000000000000574656574730000000000000000000000000000000000000000000000000000047465657a00000000000000000000000000000000000000000000000000000008746573746963616c0000000000000000000000000000000000000000000000087465737469636c650000000000000000000000000000000000000000000000097465737469636c657300000000000000000000000000000000000000000000097468726565736f6d6500000000000000000000000000000000000000000000097468726f6174696e67000000000000000000000000000000000000000000000b7468756e64657263756e74000000000000000000000000000000000000000007746965642075700000000000000000000000000000000000000000000000000b746967687420776869746500000000000000000000000000000000000000000374697400000000000000000000000000000000000000000000000000000000077469746675636b0000000000000000000000000000000000000000000000000474697473000000000000000000000000000000000000000000000000000000047469747400000000000000000000000000000000000000000000000000000007746974746965350000000000000000000000000000000000000000000000000c7469747469656675636b657200000000000000000000000000000000000000077469747469657300000000000000000000000000000000000000000000000005746974747900000000000000000000000000000000000000000000000000000974697474796675636b0000000000000000000000000000000000000000000009746974747977616e6b000000000000000000000000000000000000000000000774697477616e6b0000000000000000000000000000000000000000000000000b746f6e67756520696e2061000000000000000000000000000000000000000007746f706c65737300000000000000000000000000000000000000000000000006746f737365720000000000000000000000000000000000000000000000000009746f77656c6865616400000000000000000000000000000000000000000000067472616e6e79000000000000000000000000000000000000000000000000000974726962616469736d0000000000000000000000000000000000000000000008747562206769726c0000000000000000000000000000000000000000000000077475626769726c0000000000000000000000000000000000000000000000000474757264000000000000000000000000000000000000000000000000000000057475736879000000000000000000000000000000000000000000000000000004747734740000000000000000000000000000000000000000000000000000000474776174000000000000000000000000000000000000000000000000000000087477617468656164000000000000000000000000000000000000000000000008747761746c69707300000000000000000000000000000000000000000000000674776174747900000000000000000000000000000000000000000000000000057477696e6b0000000000000000000000000000000000000000000000000000077477696e6b69650000000000000000000000000000000000000000000000001174776f206769726c73206f6e65206375700000000000000000000000000000057477756e740000000000000000000000000000000000000000000000000000077477756e7465720000000000000000000000000000000000000000000000000a756e6472657373696e67000000000000000000000000000000000000000000077570736b6972740000000000000000000000000000000000000000000000000c7572657468726120706c6179000000000000000000000000000000000000000975726f7068696c696100000000000000000000000000000000000000000000067631346772610000000000000000000000000000000000000000000000000005763167726100000000000000000000000000000000000000000000000000000676612d6a2d6a00000000000000000000000000000000000000000000000000037661670000000000000000000000000000000000000000000000000000000006766167696e61000000000000000000000000000000000000000000000000000b76656e7573206d6f756e6400000000000000000000000000000000000000000676696167726100000000000000000000000000000000000000000000000000087669627261746f7200000000000000000000000000000000000000000000000b76696f6c65742077616e64000000000000000000000000000000000000000007766a61796a61790000000000000000000000000000000000000000000000000c766f726172657068696c69610000000000000000000000000000000000000006766f79657572000000000000000000000000000000000000000000000000000576756c7661000000000000000000000000000000000000000000000000000005773030736500000000000000000000000000000000000000000000000000000477616e670000000000000000000000000000000000000000000000000000000477616e6b0000000000000000000000000000000000000000000000000000000677616e6b6572000000000000000000000000000000000000000000000000000577616e6b79000000000000000000000000000000000000000000000000000004776565640000000000000000000000000000000000000000000000000000000977657420647265616d00000000000000000000000000000000000000000000077765746261636b0000000000000000000000000000000000000000000000000b776869746520706f77657200000000000000000000000000000000000000000577686f617200000000000000000000000000000000000000000000000000000577686f726500000000000000000000000000000000000000000000000000000777696c6c6965730000000000000000000000000000000000000000000000000577696c6c7900000000000000000000000000000000000000000000000000000c7772617070696e67206d656e00000000000000000000000000000000000000117772696e6b6c656420737461726669736800000000000000000000000000000678726174656400000000000000000000000000000000000000000000000000027878000000000000000000000000000000000000000000000000000000000003787878000000000000000000000000000000000000000000000000000000000479616f690000000000000000000000000000000000000000000000000000000e79656c6c6f772073686f7765727300000000000000000000000000000000000579696666790000000000000000000000000000000000000000000000000000097a6f6f7068696c696100000000000000000000000000000000000000000000", + "nonce": "0x2c8f7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x553cace89d412b26cc92e89120c8c23086f3c5c9ff96f8b67c64ad0ac93535ac", + "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "0x2273c7150d065f5a4783077c76d3937b84af0d9844ea0f04c7783a3b4aaa9d58", + "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "0x8be57891432f175fa98311e1e197921abe10650d036cdb3432ce1762287ec002", + "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "0x75907324b5eaccf7026a2c425bdcd52383335de33068c0124a53d0ab46ccfee1", + "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "0x68422a6b0ad97b5b1e0b22f5615edc36f1f9162aba8064402b52e15e445c2db3", + "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "0xd8a479a76c31593e7feabb2f6b015593694ea059bdace9060b7376027824ceba", + "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "0xfcafa09725cd7e3cb2cf509b49bceba0e18fa25a3748c222b6ffa84a66650ccb", + "0x6813cad5e382b91b0d75dd84fd880cdaa8a376843bcf2b4ec48897509c423361", + "0xdfebf6d29b4938b30b806e3b4ce35efceb7375b00a497723a8dc89d1893c5abb", + "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "0x98814fb702fc8202e3ca381c3ef0b2d33fdef857499e7c8ef7d4b2ced938c00b", + "0xc69718e4b0f311aa76c1dcccf3a4b0c4b090ff8462155fa121e32b8eda1ba8c1", + "0xb5da04ebceb3a3ca75a005e56d803fe8c716d5ae28b040572f8f30b63127bc2b", + "0xf60851be682c3c0e371b74cad3434c93e214fa5cb91854f27b498834ee1d5901", + "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44" + ], + "returns": {}, + "timestamp": 1697372924, + "chain": 2021, + "multi": false, + "commit": "e0d7c31" +} \ No newline at end of file diff --git a/broadcast/20231015_Deploy.s.sol/2021/run-1697372932.json b/broadcast/20231015_Deploy.s.sol/2021/run-1697372932.json new file mode 100644 index 00000000..c8580f0a --- /dev/null +++ b/broadcast/20231015_Deploy.s.sol/2021/run-1697372932.json @@ -0,0 +1,2036 @@ +{ + "transactions": [ + { + "hash": "0x553cace89d412b26cc92e89120c8c23086f3c5c9ff96f8b67c64ad0ac93535ac", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4af6da", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6142b3806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b61030961030436600461345a565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c366004613477565b6107d7565b6040516103159190613564565b61035161034c3660046135f2565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b604051610315919061366f565b6103ba6103b5366004613477565b610bba565b6040516001600160a01b039091168152602001610315565b6103e760008051602061423e83398151915281565b604051908152602001610315565b610408610403366004613682565b610be1565b005b6103e7610418366004613737565b610cfb565b61039a61042b366004613477565b610d06565b6103e761043e366004613477565b60096020526000908152604090205481565b603f546103e7565b61039a610466366004613477565b610d53565b61040861047936600461377f565b610e5f565b61040861048c3660046137c0565b610ff4565b6103e761049f366004613477565b6000908152600160208190526040909120015490565b6104086104c33660046137fc565b611026565b6104086104d63660046137fc565b611080565b6103e76104e9366004613682565b6110a6565b6103e760008051602061421e83398151915281565b6104086105113660046137fc565b61113c565b6104086111ba565b61040861052c3660046137c0565b6111dd565b61040861053f366004613477565b6111f8565b6103e7610552366004613477565b611226565b61056a610565366004613828565b6112b9565b6040516001600160401b039091168152602001610315565b61040861059036600461384b565b61137e565b6104086105a3366004613866565b6113a7565b603c5460ff16610309565b6103ba6105c1366004613477565b6113bc565b6103e76105d43660046138a7565b6113dd565b610408611463565b6103ba6105ef3660046138c2565b611483565b6103096106023660046137fc565b6114a2565b604080518082019091526003815262524e5360e81b602082015261039a565b610309610634366004613477565b6114cd565b6103e7600081565b61040861064f3660046138f4565b6114f8565b6073546103e7565b61040861066a36600461391e565b611503565b61040861067d3660046139b4565b61171b565b61056a6001600160401b0381565b61039a61069e366004613477565b61174d565b6103e76106b1366004613477565b6117c0565b6104086106c43660046137fc565b6117d7565b60a7546001600160401b031661056a565b6103e760008051602061425e83398151915281565b6103096106fd366004613a2f565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613a59565b6117fd565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b610408610773366004613828565b611907565b61078b610786366004613adc565b611988565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611aba565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df6133e8565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613b0f565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611adf565b60208201516001600160401b03909116604090910152919050565b600080610938611b5b565b6109423389611ba3565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bbf92505050565b90506109a9816114cd565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6109cf81611bd5565b156109dd576109dd81611bf2565b6109e78482611c2e565b6109fc426001600160401b0380861690611c41565b9150610a088883611c77565b610a106133e8565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b038616828401526000606080840182905285830193909352835192830184528c815260a890915291909120548190610a759060ff166001613b59565b60ff1681526020018a815260200189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250509183525082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b039082613bc0565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206141fe83398151915290610ba690600019908590613c7f565b60405180910390a250965096945050505050565b6000610bc582611cbd565b506000908152600760205260409020546001600160a01b031690565b6000610bec82611d0d565b9050806001600160a01b0316836001600160a01b031603610c5e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610c7a5750610c7a81336106fd565b610cec5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610c55565b610cf68383611d6d565b505050565b60006107d182611ddb565b606081610d1281611cbd565b600083815260a8602090815260408083206009835292819020549051610d3b9392879101613c98565b60405160208183030381529060405291505b50919050565b606081600003610d7157505060408051602081019091526000815290565b600082815260a860205260409020600281018054610d8e90613b0f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dba90613b0f565b8015610e075780601f10610ddc57610100808354040283529160200191610e07565b820191906000526020600020905b815481529060010190602001808311610dea57829003601f168201915b50505050509150806001015492505b8215610d4d5750600082815260a860209081526040918290209151610e42918491600285019101613da6565b604051602081830303815290604052915080600101549250610e16565b610e67611b5b565b8282610e738282611e4e565b610e7b6133e8565b600086815260a860205260409020600301610ea0610e996006611e6f565b8790611e91565b15610ee157610eb56080860160608701613e58565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610eee610e996005611e6f565b15610f2457610f2487610f07606088016040890161384b565b60208501516001600160401b039091166040909101819052611e9d565b610f31610e996003611e6f565b15610f6757610f4360208601866138a7565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206141fe8339815191528784604051610f87929190613c7f565b60405180910390a2610f9c610e996004611e6f565b15610feb57600087815260a8602090815260409182902060040154610feb926001600160a01b0390911691610fd59189019089016138a7565b8960405180602001604052806000815250611f76565b50505050505050565b610fff335b82611fa9565b61101b5760405162461bcd60e51b8152600401610c5590613e73565b610cf6838383611fcb565b61102e611b5b565b816110396004611e6f565b6110438282611e4e565b600084815260a86020908152604080832060040154815192830190915291815261107a916001600160a01b03169085908790611f76565b50505050565b6000828152600160208190526040909120015461109c816120c7565b610cf683836120d1565b60006110b1836113dd565b82106111135760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610c55565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146111ac5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c55565b6111b682826120f3565b5050565b60008051602061425e8339815191526111d2816120c7565b6111da612115565b50565b610cf68383836040518060200160405280600081525061171b565b61120133610ff9565b61121d5760405162461bcd60e51b8152600401610c5590613e73565b6111da81611bf2565b6000611231603f5490565b82106112945760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610c55565b603f82815481106112a7576112a7613ec0565b90600052602060002001549050919050565b60006112c3611b5b565b60008051602061423e8339815191526112db816120c7565b6112e36133e8565b600085815260a86020526040902060040154611315906001600160401b03600160a01b90910481169086811690611c41565b6020820180516001600160401b0390921660409283015251015161133a908690611e9d565b6020810151604001519250846000805160206141fe83398151915261135f6005611e6f565b8360405161136e929190613c7f565b60405180910390a2505092915050565b611386611b5b565b60008051602061423e83398151915261139e816120c7565b6111b682612167565b60006113b2816120c7565b610cf683836121bf565b60006113c782612214565b156113d457506000919050565b6107d182611d0d565b60006001600160a01b0382166114475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c55565b506001600160a01b031660009081526006602052604090205490565b60008051602061425e83398151915261147b816120c7565b6111da612230565b600082815260026020526040812061149b908361226d565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006114f06114db83611adf565b60a7546001600160401b039182169116612279565b421192915050565b6111b633838361228d565b600054610100900460ff16158080156115235750600054600160ff909116105b8061153d5750303b15801561153d575060005460ff166001145b6115a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c55565b6000805460ff1916600117905580156115c3576000805461ff0019166101001790555b6115ce6000896120d1565b6115e660008051602061425e833981519152886120d1565b6115fe60008051602061423e833981519152876120d1565b61161660008051602061421e833981519152866120d1565b61162083836121bf565b61162984612167565b611634886000611c2e565b61163c6133e8565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206141fe8339815191526116b36005611e6f565b836040516116c2929190613c7f565b60405180910390a2508015611711576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117253383611fa9565b6117415760405162461bcd60e51b8152600401610c5590613e73565b61107a84848484611f76565b60608161175981611cbd565b600061176361235b565b9050600081511161178357604051806020016040528060008152506117b8565b8061178d306123ed565b61179686612403565b6040516020016117a893929190613ed6565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d190612495565b600082815260016020819052604090912001546117f3816120c7565b610cf683836120f3565b60008051602061421e833981519152611815816120c7565b60006118216006611e6f565b9050600061182d6133e8565b602081015185151560609091015260005b868110156117115787878281811061185857611858613ec0565b90506020020135925061186a83611bd5565b611887576040516304a3dbd560e51b815260040160405180910390fd5b600083815260a8602052604090206004015460ff600160e01b909104161515861515146118ff57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206141fe833981519152906118f69087908690613c7f565b60405180910390a25b60010161183e565b61190f611b5b565b60008051602061423e833981519152611927816120c7565b61192f6133e8565b60208101516001600160401b0384166040909101819052611951908590611e9d565b836000805160206141fe83398151915261196b6005611e6f565b8360405161197a929190613c7f565b60405180910390a250505050565b600080611996836007611e91565b156119ad57506000905063da698a4d60e01b611ab2565b6119b684611bd5565b6119cc5750600090506304a3dbd560e51b611ab2565b6119e06119d96006611e6f565b8490611e91565b8015611a0157506119ff60008051602061421e833981519152866114a2565b155b15611a1857506000905063c24b0f3f60e01b611ab2565b6000611a3260008051602061423e833981519152876114a2565b9050611a48611a416005611e6f565b8590611e91565b8015611a52575080155b15611a6b57506000915063ed4b948760e01b9050611ab2565b611a76846018611e91565b8015611a9057508080611a8e5750611a8e8686611ba3565b155b15611aa85750600091506282b42960e81b9050611ab2565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d18261249f565b600081815260056020526040812054611b22907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b03166114a2565b15611b3557506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611ba15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c55565b565b6000611baf8383611fa9565b8061149b575061149b83836124df565b6000918252805160209182012090526040902090565b6000908152600560205260409020546001600160a01b0316151590565b611bfb8161253d565b600090815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055565b6073805460010190556111b682826125e0565b600081841180611c5057508183115b15611c5c57508061149b565b611c668484612279565b90508181111561149b575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156111b65760405163da87d84960e01b815260040160405180910390fd5b611cc681611bd5565b6111da5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c55565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c55565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611da282611d0d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611e445760006020840160018303810160008052805b828110611e3f57828114602e600183035160f81c1480821715611e3457600186848603030180842060205260406000206000526001810187019650505b505060001901611df7565b505050505b5050600051919050565b600080611e5c338585611988565b915091508161107a578060005260046000fd5b6000816006811115611e8357611e83613e42565b60ff166001901b9050919050565b6000828216151561149b565b600082815260a86020526040902060010154611eb99082611c77565b611ec2826114cd565b15611ee057604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611f2557604051631c21962760e11b815260040160405180910390fd5b611f2d6133e8565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b611f81848484611fcb565b611f8d8484848461275b565b61107a5760405162461bcd60e51b8152600401610c5590613f26565b6000611fb482612214565b15611fc1575060006107d1565b61149b838361285c565b611fd68383836128da565b611fde6133e8565b6000611fea6004611e6f565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b0319169091179055905061203d60008051602061421e833981519152336114a2565b1580156120625750600083815260a86020526040902060040154600160e01b900460ff165b1561209857600083815260a860205260409020600401805460ff60e01b19169055612095816120916006611e6f565b1790565b90505b826000805160206141fe83398151915282846040516120b8929190613c7f565b60405180910390a25050505050565b6111da8133612a4b565b6120db8282612aa4565b6000828152600260205260409020610cf69082612b0f565b6120fd8282612b24565b6000828152600260205260409020610cf69082612b8b565b61211d612ba0565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b60746121cc828483613f78565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051612208929190614037565b60405180910390a25050565b600061221f82611adf565b6001600160401b0316421192915050565b612238611b5b565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861214a3390565b600061149b8383612be9565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036122ee5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c55565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461236a90613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461239690613b0f565b80156123e35780601f106123b8576101008083540402835291602001916123e3565b820191906000526020600020905b8154815290600101906020018083116123c657829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612c13565b6060600061241083612dae565b60010190506000816001600160401b0381111561242f5761242f6136ac565b6040519080825280601f01601f191660200182016040528015612459576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461246357509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b14806124d057506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612e86565b6000805b82156125335750600082815260a860205260409020600401546001600160a01b03908116908416810361251a5760019150506107d1565b600092835260a8602052604090922060010154916124e3565b5060009392505050565b600061254882611d0d565b9050612558816000846001612eab565b61256182611d0d565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126365760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c55565b61263f81611bd5565b1561268c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c55565b61269a600083836001612eab565b6126a381611bd5565b156126f05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c55565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561285157604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061279f903390899088908890600401614066565b6020604051808303816000875af19250505080156127da575060408051601f3d908101601f191682019092526127d7918101906140a3565b60015b612837573d808015612808576040519150601f19603f3d011682016040523d82523d6000602084013e61280d565b606091505b50805160000361282f5760405162461bcd60e51b8152600401610c5590613f26565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117b8565b506001949350505050565b60008061286883611d0d565b9050806001600160a01b0316846001600160a01b031614806128af57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806117b85750836001600160a01b03166128c884610bba565b6001600160a01b031614949350505050565b826001600160a01b03166128ed82611d0d565b6001600160a01b0316146129135760405162461bcd60e51b8152600401610c55906140c0565b6001600160a01b0382166129755760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c55565b6129828383836001612eab565b826001600160a01b031661299582611d0d565b6001600160a01b0316146129bb5760405162461bcd60e51b8152600401610c55906140c0565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612a5582826114a2565b6111b657612a62816123ed565b612a6d836020612c13565b604051602001612a7e929190614105565b60408051601f198184030181529082905262461bcd60e51b8252610c559160040161366f565b612aae82826114a2565b6111b65760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061149b836001600160a01b038416612eb7565b612b2e82826114a2565b156111b65760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061149b836001600160a01b038416612f06565b603c5460ff16611ba15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c55565b6000826000018281548110612c0057612c00613ec0565b9060005260206000200154905092915050565b60606000612c2283600261417a565b612c2d906002614191565b6001600160401b03811115612c4457612c446136ac565b6040519080825280601f01601f191660200182016040528015612c6e576020820181803683370190505b509050600360fc1b81600081518110612c8957612c89613ec0565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612cb857612cb8613ec0565b60200101906001600160f81b031916908160001a9053506000612cdc84600261417a565b612ce7906001614191565b90505b6001811115612d5f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612d1b57612d1b613ec0565b1a60f81b828281518110612d3157612d31613ec0565b60200101906001600160f81b031916908160001a90535060049490941c93612d58816141a4565b9050612cea565b50831561149b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c55565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612ded5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e19576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612e3757662386f26fc10000830492506010015b6305f5e1008310612e4f576305f5e100830492506008015b6127108310612e6357612710830492506004015b60648310612e75576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d182612ff9565b61107a8484848461302e565b6000818152600183016020526040812054612efe575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60008181526001830160205260408120548015612fef576000612f2a6001836141bb565b8554909150600090612f3e906001906141bb565b9050818114612fa3576000866000018281548110612f5e57612f5e613ec0565b9060005260206000200154905080876000018481548110612f8157612f81613ec0565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612fb457612fb46141ce565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b61303a8484848461316e565b60018111156130a95760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610c55565b816001600160a01b0385166131055761310081603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b613128565b836001600160a01b0316856001600160a01b0316146131285761312885826131e1565b6001600160a01b0384166131445761313f8161327e565b613167565b846001600160a01b0316846001600160a01b03161461316757613167848261332d565b5050505050565b61317a84848484613371565b603c5460ff161561107a5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610c55565b600060016131ee846113dd565b6131f891906141bb565b6000838152603e602052604090205490915080821461324b576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f54600090613290906001906141bb565b600083815260406020819052812054603f80549394509092849081106132b8576132b8613ec0565b9060005260206000200154905080603f83815481106132d9576132d9613ec0565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f805480613311576133116141ce565b6001900381819060005260206000200160009055905550505050565b6000613338836113dd565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b61337d8284614191565b8110156133e257600081815260096020526040812080549091906133a0906141e4565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a3806133da816141e4565b915050613373565b5061107a565b604051806040016040528061341a6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b0319811681146111da57600080fd5b60006020828403121561346c57600080fd5b813561149b81613444565b60006020828403121561348957600080fd5b5035919050565b60005b838110156134ab578181015183820152602001613493565b50506000910152565b600081518084526134cc816020860160208601613490565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135166101008501826134b4565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061149b60208301846134e0565b60008083601f84011261358957600080fd5b5081356001600160401b038111156135a057600080fd5b6020830191508360208285010111156135b857600080fd5b9250929050565b80356001600160a01b03811681146135d657600080fd5b919050565b80356001600160401b03811681146135d657600080fd5b60008060008060008060a0878903121561360b57600080fd5b8635955060208701356001600160401b0381111561362857600080fd5b61363489828a01613577565b90965094506136479050604088016135bf565b9250613655606088016135bf565b9150613663608088016135db565b90509295509295509295565b60208152600061149b60208301846134b4565b6000806040838503121561369557600080fd5b61369e836135bf565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b03808411156136dc576136dc6136ac565b604051601f8501601f19908116603f01168101908282118183101715613704576137046136ac565b8160405280935085815286868601111561371d57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561374957600080fd5b81356001600160401b0381111561375f57600080fd5b8201601f8101841361377057600080fd5b6117b8848235602084016136c2565b600080600083850360c081121561379557600080fd5b84359350602085013592506080603f19820112156137b257600080fd5b506040840190509250925092565b6000806000606084860312156137d557600080fd5b6137de846135bf565b92506137ec602085016135bf565b9150604084013590509250925092565b6000806040838503121561380f57600080fd5b8235915061381f602084016135bf565b90509250929050565b6000806040838503121561383b57600080fd5b8235915061381f602084016135db565b60006020828403121561385d57600080fd5b61149b826135db565b6000806020838503121561387957600080fd5b82356001600160401b0381111561388f57600080fd5b61389b85828601613577565b90969095509350505050565b6000602082840312156138b957600080fd5b61149b826135bf565b600080604083850312156138d557600080fd5b50508035926020909101359150565b803580151581146135d657600080fd5b6000806040838503121561390757600080fd5b613910836135bf565b915061381f602084016138e4565b600080600080600080600060c0888a03121561393957600080fd5b613942886135bf565b9650613950602089016135bf565b955061395e604089016135bf565b945061396c606089016135bf565b935061397a608089016135db565b925060a08801356001600160401b0381111561399557600080fd5b6139a18a828b01613577565b989b979a50959850939692959293505050565b600080600080608085870312156139ca57600080fd5b6139d3856135bf565b93506139e1602086016135bf565b92506040850135915060608501356001600160401b03811115613a0357600080fd5b8501601f81018713613a1457600080fd5b613a23878235602084016136c2565b91505092959194509250565b60008060408385031215613a4257600080fd5b613a4b836135bf565b915061381f602084016135bf565b600080600060408486031215613a6e57600080fd5b83356001600160401b0380821115613a8557600080fd5b818601915086601f830112613a9957600080fd5b813581811115613aa857600080fd5b8760208260051b8501011115613abd57600080fd5b602092830195509350613ad391860190506138e4565b90509250925092565b600080600060608486031215613af157600080fd5b613afa846135bf565b95602085013595506040909401359392505050565b600181811c90821680613b2357607f821691505b602082108103610d4d57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613b43565b601f821115610cf657600081815260208120601f850160051c81016020861015613b995750805b601f850160051c820191505b81811015613bb857828155600101613ba5565b505050505050565b81516001600160401b03811115613bd957613bd96136ac565b613bed81613be78454613b0f565b84613b72565b602080601f831160018114613c225760008415613c0a5750858301515b600019600386901b1c1916600185901b178555613bb8565b600085815260208120601f198616915b82811015613c5157888601518255948401946001909101908401613c32565b5085821015613c6f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006117b860408301846134e0565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613cd581613b0f565b8061016088015261018085831660008114613cf75760018114613d1157613d42565b60ff1984168983015282151560051b890182019450613d42565b8560005260208060002060005b85811015613d395781548c8201860152908901908201613d1e565b8b018401965050505b50505050613d926080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613db98285838901613490565b8184019150601760f91b8252600160008654613dd481613b0f565b8184168015613dea5760018114613e0357613e33565b60ff198316878601528115158202870185019350613e33565b896000528560002060005b83811015613e29578154898201880152908601908701613e0e565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613e6a57600080fd5b61149b826138e4565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613ee8818460208901613490565b845190830190613efc818360208901613490565b602f60f81b91019081528351613f19816001840160208801613490565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b03831115613f8f57613f8f6136ac565b613fa383613f9d8354613b0f565b83613b72565b6000601f841160018114613fd75760008515613fbf5750838201355b600019600387901b1c1916600186901b178355613167565b600083815260209020601f19861690835b828110156140085786850135825560209485019460019092019101613fe8565b50868210156140255760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614099908301846134b4565b9695505050505050565b6000602082840312156140b557600080fd5b815161149b81613444565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161413d816017850160208801613490565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161416e816028840160208801613490565b01602801949350505050565b80820281158282048414176107d1576107d1613b43565b808201808211156107d1576107d1613b43565b6000816141b3576141b3613b43565b506000190190565b818103818111156107d1576107d1613b43565b634e487b7160e01b600052603160045260246000fd5b6000600182016141f6576141f6613b43565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220301f6572af699c777a4ce459646815492b8048541c5752ac22e91ffe87e5b23064736f6c63430008150033", + "nonce": "0x2c8df" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": [ + "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xabfaf005000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6d657461646174612d726e732e736b796d617669732e6f6e652f736169676f6e2f0000000000000000000000000000000000000000000000" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x17e3b3", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000713139b9f92d4f2bc54832a47200b7b8c6718158000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124abfaf005000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6d657461646174612d726e732e736b796d617669732e6f6e652f736169676f6e2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2273c7150d065f5a4783077c76d3937b84af0d9844ea0f04c7783a3b4aaa9d58", + "transactionType": "CREATE", + "contractName": "RNSAuction", + "contractAddress": "0xCcD3837278C083027DeF4537b3e66343D940377F", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x29c3e9", + "value": "0x0", + "data": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6124a6806100df6000396000f3fe6080604052600436106101b75760003560e01c806381bec1b3116100ec578063b96716901161008a578063db5e1ec611610064578063db5e1ec6146105a0578063ec14cf37146105c0578063f0f44260146105e0578063f5b541a61461060057600080fd5b8063b967169014610545578063ca15c87314610560578063d547741f1461058057600080fd5b806391d14854116100c657806391d14854146104e85780639979ef4514610508578063a217fddf1461051b578063a282d4ae1461053057600080fd5b806381bec1b31461048a5780638c843314146104aa5780639010d07c146104c857600080fd5b80634c255c97116101595780636e7d60f2116101335780636e7d60f21461039e578063777b0a18146103cb57806378bd7935146103eb578063791a26b41461045d57600080fd5b80634c255c971461034857806353f9195e1461035e57806360223b441461037e57600080fd5b8063248a9ca311610195578063248a9ca3146102955780632f2ff15d146102d457806336568abe146102f65780633b19e84a1461031657600080fd5b806301ffc9a7146101bc57806315a29162146101f157806319a3ee4014610265575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611d1f565b610622565b60405190151581526020015b60405180910390f35b3480156101fd57600080fd5b5061024a61020c366004611d49565b604080518082019091526000808252602082015250600090815260366020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101e8565b34801561027157600080fd5b5061027d6301e1338081565b6040516001600160401b0390911681526020016101e8565b3480156102a157600080fd5b506102c66102b0366004611d49565b6000908152600160208190526040909120015490565b6040519081526020016101e8565b3480156102e057600080fd5b506102f46102ef366004611d77565b61064d565b005b34801561030257600080fd5b506102f4610311366004611d77565b610678565b34801561032257600080fd5b506038546001600160a01b03165b6040516001600160a01b0390911681526020016101e8565b34801561035457600080fd5b506102c661271081565b34801561036a57600080fd5b506101dc610379366004611d49565b6106fb565b34801561038a57600080fd5b506102f4610399366004611d49565b61071e565b3480156103aa57600080fd5b506103be6103b9366004611df2565b610732565b6040516101e89190611e33565b3480156103d757600080fd5b506102f46103e6366004611e79565b610a6a565b3480156103f757600080fd5b5061040b610406366004611d49565b610bcd565b6040805183518152602080850151818301529382015180516001600160a01b03168284015293840151606080830191909152918401516080820152920151151560a083015260c082015260e0016101e8565b34801561046957600080fd5b5061047d610478366004611df2565b610cbd565b6040516101e89190611ef2565b34801561049657600080fd5b506102f46104a5366004611f42565b610e78565b3480156104b657600080fd5b506035546001600160a01b0316610330565b3480156104d457600080fd5b506103306104e3366004611f6f565b610ef5565b3480156104f457600080fd5b506101dc610503366004611d77565b610f14565b6102f4610516366004611d49565b610f3f565b34801561052757600080fd5b506102c6600081565b34801561053c57600080fd5b506039546102c6565b34801561055157600080fd5b5061027d6001600160401b0381565b34801561056c57600080fd5b506102c661057b366004611d49565b6110ff565b34801561058c57600080fd5b506102f461059b366004611d77565b611116565b3480156105ac57600080fd5b506102c66105bb366004611f91565b61113c565b3480156105cc57600080fd5b506102f46105db366004611fad565b6111d9565b3480156105ec57600080fd5b506102f46105fb366004612031565b611376565b34801561060c57600080fd5b506102c660008051602061245183398151915281565b60006001600160e01b03198216635a05180f60e01b148061064757506106478261138a565b92915050565b60008281526001602081905260409091200154610669816113bf565b61067383836113cc565b505050565b6001600160a01b03811633146106ed5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106f782826113ee565b5050565b600881901c6000908152603a6020526040812054600160ff84161b161515610647565b6000610729816113bf565b6106f782611410565b6060600080610754604051806040016040528060008152602001600081525090565b610792604080516060808201835260008083526020808401829052845160808101865282815290810182905280850182905291820152909182015290565b85806001600160401b038111156107ab576107ab61204e565b6040519080825280602002602001820160405280156107d4578160200160208202803683370190505b506035549096506001600160a01b031660006107fc426301e133806001600160401b0361146e565b905060005b83811015610a46578a8a8281811061081b5761081b612064565b60209081029290920135600081815260378452604080822081516060808201845282548252600180840154838a0152845160808101865260028501546001600160a01b031681526003850154818b015260048501548187015260059094015460ff1615158483015282850193845282518652603689529484902084518086019095528054855290940154968301969096525190910151919b509850919650610a3e90505760208601514210156108e4576040516372d1250d60e01b815260040160405180910390fd5b84604001516040015160000361090d576040516323bbcc0160e01b815260040160405180910390fd5b6040850151602001516109209088612090565b60405163fc284d1160e01b8152600481018a90526001600160401b03841660248201529097506001600160a01b0384169063fc284d1190604401600060405180830381600087803b15801561097457600080fd5b505af1158015610988573d6000803e3d6000fd5b505050506040858101515190516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018a9052908416906323b872dd90606401600060405180830381600087803b1580156109e357600080fd5b505af11580156109f7573d6000803e3d6000fd5b505050506001898281518110610a0f57610a0f612064565b911515602092830291909101820181905260008a815260379092526040909120600501805460ff191690911790555b600101610801565b50603854610a5d906001600160a01b0316876114a4565b5050505050505092915050565b600080516020612451833981519152610a82816113bf565b85610a8c81611509565b84801580610a9a5750808414155b15610ab857604051634ec4810560e11b815260040160405180910390fd5b6000806000805b84811015610b81578a8a82818110610ad957610ad9612064565b905060200201359350610aeb846106fb565b610b0857604051637d6fe8d760e11b815260040160405180910390fd5b6000848152603760205260409020805493509150821580610b2857508b83145b80610b3557506004820154155b610b5257604051631dc8374160e01b815260040160405180910390fd5b8b8255888882818110610b6757610b67612064565b905060200201358260010181905550806001019050610abf565b508a7f9a845a1c4235343a450f5e39d4179b7e2a6c9586c02bff45d956717f4a19dd948b8b8b8b604051610bb894939291906120d5565b60405180910390a25050505050505050505050565b610c0b604080516060808201835260008083526020808401829052845160808101865282815290810182905280850182905291820152909182015290565b5060008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b0316815260038501548188015260048501548187015260059094015460ff161515918401919091528184019290925280518351808501855286815285018690528552603684528285208351808501909452805484529091015492820192909252909190610cb58382611556565b915050915091565b6060600080516020612451833981519152610cd7816113bf565b826000819003610cfa57604051634ec4810560e11b815260040160405180910390fd5b806001600160401b03811115610d1257610d1261204e565b604051908082528060200260200182016040528015610d3b578160200160208202803683370190505b506035549093506001600160a01b03167fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6886301e1338060005b84811015610e6c57836001600160a01b0316630570891f848b8b85818110610d9e57610d9e612064565b9050602002810190610db09190612107565b600030886040518763ffffffff1660e01b8152600401610dd59695949392919061214d565b60408051808303816000875af1158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1791906121a9565b9050878281518110610e2b57610e2b612064565b602002602001018181525050610e64878281518110610e4c57610e4c612064565b6020026020010151603a6115ae90919063ffffffff16565b600101610d74565b50505050505092915050565b6000610e83816113bf565b81610e8d816115d7565b83610e9781611509565b60008581526036602090815260409091208535815590850135600182015550847fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b85604051610ee691906121e3565b60405180910390a25050505050565b6000828152600260205260408120610f0d908361161c565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b0316815260038501548188015260048501548187015260059094015460ff1615159184019190915281840192909252805185526036845282852083518085019094528054845290910154928201929092529091610fd88383611556565b9050610fe382611628565b611000576040516348c6117b60e11b815260040160405180910390fd5b8034101561102157604051632ca2f52b60e11b815260040160405180910390fd5b3361102d816000611643565b61104a57604051634bad17b360e01b815260040160405180910390fd5b604084810151805160209182015160008981526037845284902034600382018190556002820180546001600160a01b0319166001600160a01b038981169182178355426004909501949094558b5188519384529683015295810183905290831660608201529193909290918991907f5934294f4724ea4bb71fee8511b9ccb8dd6d2249ac4d120a81ccfcbbd0ad905f9060800160405180910390a381156110f5576110f583836114a4565b5050505050505050565b6000818152600260205260408120610647906116b9565b60008281526001602081905260409091200154611132816113bf565b61067383836113ee565b600080611148816113bf565b82611152816115d7565b33846040516020016111659291906121fa565b60408051808303601f1901815291815281516020928301206000818152603684529190912086358155918601356001830155935050827fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b856040516111ca91906121e3565b60405180910390a25050919050565b600054610100900460ff16158080156111f95750600054600160ff909116105b806112135750303b158015611213575060005460ff166001145b6112765760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106e4565b6000805460ff191660011790558015611299576000805461ff0019166101001790555b6112a2836116c3565b6112ab82611410565b6112b6600088611734565b8460008051602061245183398151915260005b8281101561130957611301828a8a848181106112e7576112e7612064565b90506020020160208101906112fc9190612031565b611734565b6001016112c9565b5050603580546001600160a01b0319166001600160a01b03871617905550801561136d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6000611381816113bf565b6106f7826116c3565b60006001600160e01b03198216637965db0b60e01b148061064757506301ffc9a760e01b6001600160e01b0319831614610647565b6113c9813361173e565b50565b6113d68282611771565b600082815260026020526040902061067390826117dc565b6113f882826117f1565b60008281526002602052604090206106739082611858565b6127108111156114335760405163220f1a1560e01b815260040160405180910390fd5b60398190556040518181527f846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab70671823429060200160405180910390a150565b60008184118061147d57508183115b15611489575080610f0d565b611493848461186d565b905081811115610f0d575092915050565b60006114b08383611643565b905080610673576114c9836001600160a01b0316611881565b6114d283611897565b6040516020016114e3929190612245565b60408051601f198184030181529082905262461bcd60e51b82526106e4916004016122c3565b60008181526036602090815260409182902082518084019093528054835260010154908201526115399051421090565b6113c95760405163028e4e9760e51b815260040160405180910390fd5b600061156e83602001518460400151602001516118ae565b905082604001516020015160001415801561158c5750602082015142105b15610647576115a483602001516039546127106118c4565b610f0d9082612090565b600881901c600090815260209290925260409091208054600160ff9093169290921b9091179055565b60208101358135111580156115ff57506115ff6115f9368390038301836122f6565b51421090565b6113c9576040516302ef0c7360e21b815260040160405180910390fd5b6000610f0d83836119ae565b60004282600001511115801561064757505060200151421090565b604080516000808252602082019092526001600160a01b03841690839060405161166d9190612352565b60006040518083038185875af1925050503d80600081146116aa576040519150601f19603f3d011682016040523d82523d6000602084013e6116af565b606091505b5090949350505050565b6000610647825490565b6001600160a01b0381166116ea576040516362daafb160e11b815260040160405180910390fd5b603880546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b6106f782826113cc565b6117488282610f14565b6106f75761175581611881565b6117608360206119d8565b6040516020016114e392919061236e565b61177b8282610f14565b6106f75760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610f0d836001600160a01b038416611b73565b6117fb8282610f14565b156106f75760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f0d836001600160a01b038416611bc2565b818101828110156106475750600019610647565b60606106476001600160a01b03831660146119d8565b6060610647826118a684611cb5565b6001016119d8565b60008183116118bd5781610f0d565b5090919050565b60008080600019858709858702925082811083820303915050806000036118fe578382816118f4576118f46123e3565b0492505050610f0d565b8084116119455760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106e4565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008260000182815481106119c5576119c5612064565b9060005260206000200154905092915050565b606060006119e78360026123f9565b6119f2906002612090565b6001600160401b03811115611a0957611a0961204e565b6040519080825280601f01601f191660200182016040528015611a33576020820181803683370190505b509050600360fc1b81600081518110611a4e57611a4e612064565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a7d57611a7d612064565b60200101906001600160f81b031916908160001a9053506000611aa18460026123f9565b611aac906001612090565b90505b6001811115611b24576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611ae057611ae0612064565b1a60f81b828281518110611af657611af6612064565b60200101906001600160f81b031916908160001a90535060049490941c93611b1d81612410565b9050611aaf565b508315610f0d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106e4565b6000818152600183016020526040812054611bba57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610647565b506000610647565b60008181526001830160205260408120548015611cab576000611be6600183612427565b8554909150600090611bfa90600190612427565b9050818114611c5f576000866000018281548110611c1a57611c1a612064565b9060005260206000200154905080876000018481548110611c3d57611c3d612064565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611c7057611c7061243a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610647565b6000915050610647565b600080608083901c15611ccd5760809290921c916010015b604083901c15611ce25760409290921c916008015b602083901c15611cf75760209290921c916004015b601083901c15611d0c5760109290921c916002015b600883901c156106475760010192915050565b600060208284031215611d3157600080fd5b81356001600160e01b031981168114610f0d57600080fd5b600060208284031215611d5b57600080fd5b5035919050565b6001600160a01b03811681146113c957600080fd5b60008060408385031215611d8a57600080fd5b823591506020830135611d9c81611d62565b809150509250929050565b60008083601f840112611db957600080fd5b5081356001600160401b03811115611dd057600080fd5b6020830191508360208260051b8501011115611deb57600080fd5b9250929050565b60008060208385031215611e0557600080fd5b82356001600160401b03811115611e1b57600080fd5b611e2785828601611da7565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015611e6d578351151583529284019291840191600101611e4f565b50909695505050505050565b600080600080600060608688031215611e9157600080fd5b8535945060208601356001600160401b0380821115611eaf57600080fd5b611ebb89838a01611da7565b90965094506040880135915080821115611ed457600080fd5b50611ee188828901611da7565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b81811015611e6d57835183529284019291840191600101611f0e565b600060408284031215611f3c57600080fd5b50919050565b60008060608385031215611f5557600080fd5b82359150611f668460208501611f2a565b90509250929050565b60008060408385031215611f8257600080fd5b50508035926020909101359150565b600060408284031215611fa357600080fd5b610f0d8383611f2a565b60008060008060008060a08789031215611fc657600080fd5b8635611fd181611d62565b955060208701356001600160401b03811115611fec57600080fd5b611ff889828a01611da7565b909650945050604087013561200c81611d62565b9250606087013561201c81611d62565b80925050608087013590509295509295509295565b60006020828403121561204357600080fd5b8135610f0d81611d62565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106475761064761207a565b81835260006001600160fb1b038311156120bc57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006120e96040830186886120a3565b82810360208401526120fc8185876120a3565b979650505050505050565b6000808335601e1984360301811261211e57600080fd5b8301803591506001600160401b0382111561213857600080fd5b602001915036819003821315611deb57600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b600080604083850312156121bc57600080fd5b82516001600160401b03811681146121d357600080fd5b6020939093015192949293505050565b813581526020808301359082015260408101610647565b6001600160a01b038316815260608101610f0d602083018480358252602090810135910152565b60005b8381101561223c578181015183820152602001612224565b50506000910152565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b60208201526000835161229081602a850160208801612221565b660103b30b63ab2960cd1b602a9184019182015283516122b7816031840160208801612221565b01603101949350505050565b60208152600082518060208401526122e2816040850160208701612221565b601f01601f19169190910160400192915050565b60006040828403121561230857600080fd5b604051604081018181106001600160401b038211171561233857634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b60008251612364818460208701612221565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123a6816017850160208801612221565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123d7816028840160208801612221565b01602801949350505050565b634e487b7160e01b600052601260045260246000fd5b80820281158282048414176106475761064761207a565b60008161241f5761241f61207a565b506000190190565b818103818111156106475761064761207a565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220b309f671b8e19d4b799039d85a64646c38d5a7039b741c8381d1403a8713f8bf64736f6c63430008150033", + "nonce": "0x2c8e1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "function": null, + "arguments": [ + "0xCcD3837278C083027DeF4537b3e66343D940377F", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xec14cf37000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x112dc0", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000ccd3837278c083027def4537b3e66343d940377f000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e4ec14cf37000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8be57891432f175fa98311e1e197921abe10650d036cdb3432ce1762287ec002", + "transactionType": "CREATE", + "contractName": "NameChecker", + "contractAddress": "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x1e4f9b", + "value": "0x0", + "data": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611a34806100df6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806391d14854116100b8578063ca5f79951161007c578063ca5f7995146102df578063d547741f1461030d578063e04af3b714610320578063e786c3ad14610340578063fb3809be14610360578063fbc639091461037357600080fd5b806391d148541461027957806392aec2fc1461028c57806396237206146102b1578063a217fddf146102c4578063ca15c873146102cc57600080fd5b80632f2ff15d116100ff5780632f2ff15d1461020257806336568abe14610215578063439e42e7146102285780635c0a3caa1461023b5780639010d07c1461024e57600080fd5b806301ffc9a71461013c5780630fda4464146101645780631d367b5714610177578063245ed654146101bb578063248a9ca3146101d0575b600080fd5b61014f61014a3660046113ad565b610386565b60405190151581526020015b60405180910390f35b61014f6101723660046113d7565b6103b1565b6101a16040805180820190915260355460ff80821680845261010090920416602090920182905291565b6040805160ff93841681529290911660208301520161015b565b6101ce6101c93660046114aa565b6103d4565b005b6101f46101de3660046114fe565b6000908152600160208190526040909120015490565b60405190815260200161015b565b6101ce61021036600461152e565b610423565b6101ce61022336600461152e565b61044e565b61014f6102363660046113d7565b6104d1565b61014f6102493660046113d7565b61056f565b61026161025c36600461155a565b610737565b6040516001600160a01b03909116815260200161015b565b61014f61028736600461152e565b61074f565b6101f461029a366004611633565b6000601f600183510310601f830151029050919050565b6101ce6102bf3660046114aa565b61077a565b6101f4600081565b6101f46102da3660046114fe565b6107a7565b6102f26102ed3660046114fe565b6107be565b6040805193845260208401929092529082015260600161015b565b6101ce61031b36600461152e565b6107fd565b61033361032e3660046116f5565b610823565b60405161015b919061173e565b61035361034e3660046113d7565b6108b9565b60405161015b91906117d2565b6101ce61036e366004611845565b6108e9565b6101ce61038136600461187f565b610a09565b60006001600160e01b03198216635a05180f60e01b14806103ab57506103ab82610a1e565b92915050565b60006103bd838361056f565b806103cd57506103cd83836104d1565b9392505050565b60006103df81610a53565b61041d848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250610a60915050565b50505050565b6000828152600160208190526040909120015461043f81610a53565b6104498383610c00565b505050565b6001600160a01b03811633146104c35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104cd8282610c22565b5050565b6000806104de84846108b9565b805190915060005b818110156105635761054a610525848381518110610506576105066118a9565b60200260200101516000601f600183510310601f830151029050919050565b600881901c600090815260366020526040902054600160ff9092169190911b16151590565b1561055b57600193505050506103ab565b6001016104e6565b50600095945050505050565b600080600084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935050600019820190508115806105e75750826000815181106105d0576105d06118a9565b6020910101516001600160f81b031916602d60f81b145b8061061657508281815181106105ff576105ff6118a9565b6020910101516001600160f81b031916602d60f81b145b156106285760019450505050506103ab565b60005b8281101561072957838181518110610645576106456118a9565b01602001516001600160f81b0319169450602d60f81b8590036106b1578181141580156106995750838160010181518110610682576106826118a9565b6020910101516001600160f81b031916602d60f81b145b156106ac576001955050505050506103ab565b610721565b600360fc1b6001600160f81b03198616108015906106dd5750603960f81b6001600160f81b0319861611155b8061070f5750606160f81b6001600160f81b031986161080159061070f5750603d60f91b6001600160f81b0319861611155b610721576001955050505050506103ab565b60010161062b565b506000979650505050505050565b60008281526002602052604081206103cd9083610c44565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061078581610a53565b600061079461032e85876118bf565b90506107a08184610a60565b5050505050565b60008181526002602052604081206103ab90610c50565b6040805180820190915260355460ff8082168352610100909104166020820152600090819081906107f0908590610c5a565b9196909550909350915050565b6000828152600160208190526040909120015461081981610a53565b6104498383610c22565b80516060908067ffffffffffffffff8111156108415761084161157c565b60405190808252806020026020018201604052801561086a578160200160208202803683370190505b50915060005b818110156108b25761088d848281518110610506576105066118a9565b83828151811061089f5761089f6118a9565b6020908102919091010152600101610870565b5050919050565b6040805180820190915260355460ff80821683526101009091041660208201526060906103cd9084908490610ccb565b600054610100900460ff16158080156109095750600054600160ff909116105b806109235750303b158015610923575060005460ff166001145b6109865760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ba565b6000805460ff1916600117905580156109a9576000805461ff0019166101001790555b6109b4600085610dda565b6109be8383610de4565b801561041d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6000610a1481610a53565b6104498383610de4565b60006001600160e01b03198216637965db0b60e01b14806103ab57506301ffc9a760e01b6001600160e01b03198316146103ab565b610a5d8133610eca565b50565b8151600080600019815b84811015610b4a57868181518110610a8457610a846118a9565b6020026020010151600003610adb5760405162461bcd60e51b815260206004820181905260248201527f4e616d65436865636b65723a20696e76616c6964207061636b656420776f726460448201526064016104ba565b60f8878281518110610aef57610aef6118a9565b6020026020010151901c9350610b058285610f23565b9150610b118385610f39565b9250610b42878281518110610b2857610b286118a9565b6020026020010151876036610f489092919063ffffffff16565b600101610a6a565b508415610bbc576040805180820190915260355460ff808216808452610100909204166020830152610b7d908390610f23565b9150610b9083826020015160ff16610f39565b815190935060ff1682148015610bac5750806020015160ff1683145b610bba57610bba8284610de4565b505b60408051858152861515602082015233917f060d5a3fc05fdd11d7ba941d00a4fdcde096fb95171930e19997ce2b7df89174910160405180910390a2505050505050565b610c0a8282610f97565b60008281526002602052604090206104499082611002565b610c2c8282611017565b6000828152600260205260409020610449908261107e565b60006103cd8383611093565b60006103ab825490565b6000806000610c70846000015160ff1686610f23565b9150610c83846020015160ff1686610f23565b8281036001818101808302821c868a039092010203945090915061ffff841115610cc357604051630faa3ef560e11b8152600481018590526024016104ba565b509250925092565b60608260008080610cdc8487610c5a565b9250925092508267ffffffffffffffff811115610cfb57610cfb61157c565b604051908082528060200260200182016040528015610d2e57816020015b6060815260200190600190039081610d195790505b50945060008060005b86811015610dcc57610d4b84820188610f23565b91508085015b828111610dc357610d6481838d8f6118cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508b5160018801978d935091508110610db057610db06118a9565b6020908102919091010152600101610d51565b50600101610d37565b505050505050509392505050565b6104cd8282610c00565b60ff821615801590610dfc57508060ff168260ff1611155b610e5f5760405162461bcd60e51b815260206004820152602e60248201527f4e616d65436865636b65723a206d696e20776f7264206c656e677468203e206d60448201526d0c2f040eedee4c840d8cadccee8d60931b60648201526084016104ba565b60408051808201825260ff84811680835290841660209283018190526035805461ffff191683176101008302179055835191825291810191909152815133927faabf778cd749a472313a9476aa3b29565e69697c48eb0f82b52fc9f071fd3c95928290030190a25050565b610ed4828261074f565b6104cd57610ee1816110bd565b610eec8360206110cf565b604051602001610efd9291906118f6565b60408051601f198184030181529082905262461bcd60e51b82526104ba9160040161196b565b6000818310610f3257816103cd565b5090919050565b6000818311610f3257816103cd565b8015610f7257600882901c60009081526020849052604090208054600160ff85161b179055505050565b600882901c60009081526020849052604090208054600160ff85161b19169055505050565b610fa1828261074f565b6104cd5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006103cd836001600160a01b03841661126b565b611021828261074f565b156104cd5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006103cd836001600160a01b0384166112ba565b60008260000182815481106110aa576110aa6118a9565b9060005260206000200154905092915050565b60606103ab6001600160a01b03831660145b606060006110de836002611994565b6110e99060026119ab565b67ffffffffffffffff8111156111015761110161157c565b6040519080825280601f01601f19166020018201604052801561112b576020820181803683370190505b509050600360fc1b81600081518110611146576111466118a9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611175576111756118a9565b60200101906001600160f81b031916908160001a9053506000611199846002611994565b6111a49060016119ab565b90505b600181111561121c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106111d8576111d86118a9565b1a60f81b8282815181106111ee576111ee6118a9565b60200101906001600160f81b031916908160001a90535060049490941c93611215816119be565b90506111a7565b5083156103cd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ba565b60008181526001830160205260408120546112b2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556103ab565b5060006103ab565b600081815260018301602052604081205480156113a35760006112de6001836119d5565b85549091506000906112f2906001906119d5565b9050818114611357576000866000018281548110611312576113126118a9565b9060005260206000200154905080876000018481548110611335576113356118a9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611368576113686119e8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506103ab565b60009150506103ab565b6000602082840312156113bf57600080fd5b81356001600160e01b0319811681146103cd57600080fd5b600080602083850312156113ea57600080fd5b823567ffffffffffffffff8082111561140257600080fd5b818501915085601f83011261141657600080fd5b81358181111561142557600080fd5b86602082850101111561143757600080fd5b60209290920196919550909350505050565b60008083601f84011261145b57600080fd5b50813567ffffffffffffffff81111561147357600080fd5b6020830191508360208260051b850101111561148e57600080fd5b9250929050565b803580151581146114a557600080fd5b919050565b6000806000604084860312156114bf57600080fd5b833567ffffffffffffffff8111156114d657600080fd5b6114e286828701611449565b90945092506114f5905060208501611495565b90509250925092565b60006020828403121561151057600080fd5b5035919050565b80356001600160a01b03811681146114a557600080fd5b6000806040838503121561154157600080fd5b8235915061155160208401611517565b90509250929050565b6000806040838503121561156d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115bb576115bb61157c565b604052919050565b600082601f8301126115d457600080fd5b813567ffffffffffffffff8111156115ee576115ee61157c565b611601601f8201601f1916602001611592565b81815284602083860101111561161657600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561164557600080fd5b813567ffffffffffffffff81111561165c57600080fd5b611668848285016115c3565b949350505050565b600067ffffffffffffffff8084111561168b5761168b61157c565b8360051b602061169c818301611592565b868152935090840190808401878311156116b557600080fd5b855b838110156116e9578035858111156116cf5760008081fd5b6116db8a828a016115c3565b8352509082019082016116b7565b50505050509392505050565b60006020828403121561170757600080fd5b813567ffffffffffffffff81111561171e57600080fd5b8201601f8101841361172f57600080fd5b61166884823560208401611670565b6020808252825182820181905260009190848201906040850190845b818110156117765783518352928401929184019160010161175a565b50909695505050505050565b60005b8381101561179d578181015183820152602001611785565b50506000910152565b600081518084526117be816020860160208601611782565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561182757603f198886030184526118158583516117a6565b945092850192908501906001016117f9565b5092979650505050505050565b803560ff811681146114a557600080fd5b60008060006060848603121561185a57600080fd5b61186384611517565b925061187160208501611834565b91506114f560408501611834565b6000806040838503121561189257600080fd5b61189b83611834565b915061155160208401611834565b634e487b7160e01b600052603260045260246000fd5b60006103cd368484611670565b600080858511156118dc57600080fd5b838611156118e957600080fd5b5050820193919092039150565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161192e816017850160208801611782565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161195f816028840160208801611782565b01602801949350505050565b6020815260006103cd60208301846117a6565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103ab576103ab61197e565b808201808211156103ab576103ab61197e565b6000816119cd576119cd61197e565b506000190190565b818103818111156103ab576103ab61197e565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202247f1c7e637d2639344dd5ecdf7446256de2b88f161ff1c1c345bfb1a96a16764736f6c63430008150033", + "nonce": "0x2c8e3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "function": null, + "arguments": [ + "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xfb3809be000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0xe96c2", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000af4a77bc41320bedf62d33ad278d76731eaabcf4000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064fb3809be000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x75907324b5eaccf7026a2c425bdcd52383335de33068c0124a53d0ab46ccfee1", + "transactionType": "CREATE", + "contractName": "RNSDomainPrice", + "contractAddress": "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x31bf47", + "value": "0x0", + "data": "0x60806040526200000e62000014565b620000d5565b600054610100900460ff1615620000815760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000d3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612bee80620000e56000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635c68c83011610104578063ca15c873116100a2578063e229a67011610071578063e229a67014610480578063f4651f4914610493578063f5b541a6146104b4578063fe303ebf146104c957600080fd5b8063ca15c87314610434578063d40ed58c14610447578063d547741f1461045a578063dd28776d1461046d57600080fd5b80637174026e116100de5780637174026e146103db5780639010d07c146103ee57806391d1485414610419578063a217fddf1461042c57600080fd5b80635c68c830146103985780635ef32e2c146103ab578063713a69a7146103b357600080fd5b80632f6ee6951161017157806339e47da71161014b57806339e47da7146102ec5780634c255c971461034457806353faf90914610365578063599eaabf1461038557600080fd5b80632f6ee695146102ac57806335feb741146102c657806336568abe146102d957600080fd5b8063248a9ca3116101ad578063248a9ca31461023257806328dd3065146102565780632be09ecc1461026b5780632f2ff15d1461029957600080fd5b806301ffc9a7146101d4578063037f1769146101fc5780630a44f51f1461021d575b600080fd5b6101e76101e2366004612074565b6104dc565b60405190151581526020015b60405180910390f35b61020f61020a36600461209e565b610507565b6040519081526020016101f3565b610225610599565b6040516101f391906120b7565b61020f61024036600461209e565b6000908152600160208190526040909120015490565b61026961026436600461212e565b610676565b005b603554603954603a54604080516001600160a01b0390941684526020840192909252908201526060016101f3565b6102696102a7366004612163565b610692565b6102b4601281565b60405160ff90911681526020016101f3565b6102696102d43660046121d7565b6106bd565b6102696102e7366004612163565b6106d2565b604080518082018252600080825260209182015281518083018352603b546001600160c01b0381168083526001600160401b03600160c01b9092048216928401928352845190815291511691810191909152016101f3565b61034d61271081565b6040516001600160401b0390911681526020016101f3565b61037861037336600461225c565b610755565b6040516101f3919061231f565b61026961039336600461225c565b61087c565b61020f6103a6366004612365565b61093a565b60375461020f565b6103c66103c1366004612478565b6109b8565b604080519283526020830191909152016101f3565b61020f6103e936600461209e565b6109e4565b6104016103fc3660046124ac565b610a77565b6040516001600160a01b0390911681526020016101f3565b6101e7610427366004612163565b610a96565b61020f600081565b61020f61044236600461209e565b610ac1565b6102696104553660046124e6565b610ad8565b610269610468366004612163565b610c8e565b61026961047b3660046125bf565b610cb4565b61026961048e36600461262a565b610dc0565b6104a66104a1366004612646565b610dd4565b6040516101f392919061268a565b61020f600080516020612b9983398151915281565b6102696104d736600461209e565b610f68565b60006001600160e01b03198216635a05180f60e01b1480610501575061050182610f7c565b92915050565b603554603a5460395460405163052571af60e51b815260009361050193869360129384936001600160a01b03169263a4ae35e09261055092600401918252602082015260400190565b608060405180830381865afa15801561056d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059191906126c5565b929190610fb1565b603854606090806001600160401b038111156105b7576105b76123d6565b6040519080825280602002602001820160405280156105fc57816020015b60408051808201909152600080825260208201528152602001906001900390816105d55790505b5091506000805b82811015610670578060010191508184828151811061062457610624612750565b60200260200101516000018181525050603c60008381526020019081526020016000205484828151811061065a5761065a612750565b6020908102919091018101510152600101610603565b50505090565b600061068181610ff2565b61068c848484610fff565b50505050565b600082815260016020819052604090912001546106ae81610ff2565b6106b88383611071565b505050565b60006106c881610ff2565b6106b88383611093565b6001600160a01b03811633146107475760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61075182826111ac565b5050565b6060600080516020612b9983398151915261076f81610ff2565b60006107818b8b8b8b8b8b8b8b6111ce565b905033816001600160401b0381111561079c5761079c6123d6565b6040519080825280602002602001820160405280156107c5578160200160208202803683370190505b50935060005b8281101561086c57610842828e8e848181106107e9576107e9612750565b905060200201358d8d8581811061080257610802612750565b905060200201358c8c8681811061081b5761081b612750565b905060200201358b8b8781811061083457610834612750565b90506020020135600061121c565b85828151811061085457610854612750565b911515602092830291909101909101526001016107cb565b5050505098975050505050505050565b600080516020612b9983398151915261089481610ff2565b60006108a68a8a8a8a8a8a8a8a6111ce565b90503360005b8281101561092c57610923828d8d848181106108ca576108ca612750565b905060200201358c8c858181106108e3576108e3612750565b905060200201358b8b868181106108fc576108fc612750565b905060200201358a8a8781811061091557610915612750565b90506020020135600161121c565b506001016108ac565b505050505050505050505050565b6000603e600061097f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112ab92505050565b8152602001908152602001600020549050806000036109b157604051635421761560e11b815260040160405180910390fd5b1992915050565b6000806109d26109cd84805160209091012090565b6112b6565b91506109dd826109e4565b9050915091565b603554603a5460395460405163052571af60e51b815260048101929092526024820152600091610501918491601291829161059191601119916001600160a01b03169063a4ae35e090604401608060405180830381865afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7191906126c5565b90611330565b6000828152600260205260408120610a8f908361148a565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260026020526040812061050190611496565b600054610100900460ff1615808015610af85750600054600160ff909116105b80610b125750303b158015610b12575060005460ff166001145b610b755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161073e565b6000805460ff191660011790558015610b98576000805461ff0019166101001790555b89600080516020612b9983398151915260005b82811015610beb57610be3828f8f84818110610bc957610bc9612750565b9050602002016020810190610bde9190612766565b6114a0565b600101610bab565b50603680546001600160a01b0319166001600160a01b038816179055610c1260008f6114a0565b610c1c8b8b611093565b610c25896114aa565b610c2e886114df565b610c39878686610fff565b5050801561092c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b60008281526001602081905260409091200154610caa81610ff2565b6106b883836111ac565b600080516020612b99833981519152610ccc81610ff2565b83801580610cda5750808314155b15610cf857604051634ec4810560e11b815260040160405180910390fd5b600033815b83811015610db557868682818110610d1757610d17612750565b9050602002013519925082603e60008b8b85818110610d3857610d38612750565b90506020020135815260200190815260200160002081905550888882818110610d6357610d63612750565b90506020020135826001600160a01b03167fb52d278cb3ef3b003bdfb385ce2eb23a83eb6d713724abfba1acaa16ccf6621485604051610da591815260200190565b60405180910390a3600101610cfd565b505050505050505050565b6000610dcb81610ff2565b610751826114df565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610e078561155b565b855160208701209091506000906000818152603e60205260409020549091508015610e3e57610e37811987612799565b8552610f3b565b6000603c6000610e5086603854611649565b81526020019081526020016000205490508087610e6d9190612799565b86526036546001600160a01b03166353f9195e610ebb7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888b6000918252805160209182012090526040902090565b6040518263ffffffff1660e01b8152600401610ed991815260200190565b602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a91906127b0565b15610f3957610f36603754610f2e856112b6565b61271061165f565b85525b505b8351610f46906109e4565b60208501528451610f56906109e4565b60208601525092959194509092505050565b6000610f7381610ff2565b610751826114aa565b60006001600160e01b03198216637965db0b60e01b148061050157506301ffc9a760e01b6001600160e01b0319831614610501565b6000610fe784610fd7876000015160070b886040015186610fd291906127d2565b611748565b610fe2600187611748565b61165f565b90505b949350505050565b610ffc81336117a2565b50565b603580546001600160a01b0319166001600160a01b0385169081179091556039839055603a8290558190336001600160a01b03167f671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b8560405161106491815260200190565b60405180910390a4505050565b61107b82826117fb565b60008281526002602052604090206106b89082611866565b60408051808201909152600080825260208201523390603854839060005b8281101561115e578686828181106110cb576110cb612750565b9050604002018036038101906110e191906127f9565b93506110f182856000015161187b565b6020808601805187516000908152603c90935260409283902055865190519151929450916001600160a01b038816917f85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a779161114e91815260200190565b60405180910390a36001016110b1565b5060385481146111a457603881905560405181906001600160a01b038616907f7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b90600090a35b505050505050565b6111b6828261188a565b60008281526002602052604090206106b890826118f1565b868015806111dc5750858114155b806111e75750838114155b806111f25750818114155b1561121057604051634ec4810560e11b815260040160405180910390fd5b98975050505050505050565b60008061122886610507565b6000888152603d6020526040902090915083806112455750805482115b9250821561129f57818155426001820155604080518381526020810187905287918a916001600160a01b038d16917f60d5fd6d2284807447aae62f93c05517a647b8e8479c3af2c27ee1d1c85b540f910160405180910390a45b50509695505050505050565b805160209091012090565b6000818152603d6020526040812060018101548083036112da575060009392505050565b60006112e68242612847565b835460408051808201909152603b546001600160c01b0381168252600160c01b90046001600160401b03166020820152919250611327919061271084611906565b95945050505050565b604080516080810182526000808252602082018190529181018290526060810191909152600061136960018560400151610fd29061285a565b90506001600160ff1b0381111561139f576040808501519051633e87ca5d60e11b815260039190910b600482015260240161073e565b60006113af6001610fd28661285a565b90506001600160ff1b038111156113df57604051633e87ca5d60e11b8152600385900b600482015260240161073e565b845160009060070b6113f1838561287d565b6113fb91906128c3565b9050677fffffffffffffff81131561144757604086810151875191516329b2fb5560e11b8152600391820b60048201529087900b602482015260079190910b604482015260640161073e565b60405180608001604052808260070b815260200187602001516001600160401b031681526020018660030b81526020018760600151815250935050505092915050565b6000610a8f83836119dc565b6000610501825490565b6107518282611071565b6037819055604051819033907f1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf07390600090a350565b80603b6114ec8282612906565b503390507fa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc6461151e6020840184612948565b61152e6040850160208601612965565b604080516001600160c01b0390931683526001600160401b0390911660208301520160405180910390a250565b600080600080845190505b8083101561164157600085848151811061158257611582612750565b01602001516001600160f81b0319169050600160ff1b8110156115aa57600184019350611635565b600760fd1b6001600160f81b0319821610156115cb57600284019350611635565b600f60fc1b6001600160f81b0319821610156115ec57600384019350611635565b601f60fb1b6001600160f81b03198216101561160d57600484019350611635565b603f60fa1b6001600160f81b03198216101561162e57600584019350611635565b6006840193505b50600190910190611566565b509392505050565b60008183106116585781610a8f565b5090919050565b60008080600019858709858702925082811083820303915050806000036116995783828161168f5761168f6128ad565b0492505050610a8f565b8084116116e05760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161073e565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000808260030b121561177a5761175e8261285a565b61176990600a612a66565b6117739084612a78565b9050610501565b60008260030b131561179b5761179182600a612a66565b6117739084612799565b5081610501565b6117ac8282610a96565b610751576117b981611a06565b6117c4836020611a18565b6040516020016117d5929190612ab0565b60408051601f198184030181529082905262461bcd60e51b825261073e91600401612b25565b6118058282610a96565b6107515760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610a8f836001600160a01b038416611bb3565b60008183116116585781610a8f565b6118948282610a96565b156107515760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610a8f836001600160a01b038416611c02565b60008085602001516001600160401b0316836119229190612a78565b9050801580611939575085516001600160c01b0316155b156119475784915050610fea565b85516001600160c01b03166001600160401b0385160361196b576000915050610fea565b61ffff81111561199157604051637359f25f60e01b81526004810182905260240161073e565b60006119c18760000151866001600160401b0316036001600160c01b0316612710876001600160401b031661165f565b90506119d1868261271085611cf5565b979650505050505050565b60008260000182815481106119f3576119f3612750565b9060005260206000200154905092915050565b60606105016001600160a01b03831660145b60606000611a27836002612799565b611a32906002612b58565b6001600160401b03811115611a4957611a496123d6565b6040519080825280601f01601f191660200182016040528015611a73576020820181803683370190505b509050600360fc1b81600081518110611a8e57611a8e612750565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611abd57611abd612750565b60200101906001600160f81b031916908160001a9053506000611ae1846002612799565b611aec906001612b58565b90505b6001811115611b64576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611b2057611b20612750565b1a60f81b828281518110611b3657611b36612750565b60200101906001600160f81b031916908160001a90535060049490941c93611b5d81612b6b565b9050611aef565b508315610a8f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161073e565b6000818152600183016020526040812054611bfa57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610501565b506000610501565b60008181526001830160205260408120548015611ceb576000611c26600183612847565b8554909150600090611c3a90600190612847565b9050818114611c9f576000866000018281548110611c5a57611c5a612750565b9060005260206000200154905080876000018481548110611c7d57611c7d612750565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611cb057611cb0612b82565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610501565b6000915050610501565b600082841480611d07575061ffff8216155b15611d13575083610fea565b50836000808080611d3461ffff8716611d2b8a611e58565b61ffff16611649565b90505b61ffff811615611d8a57611d518561ffff83168a0a612029565b90945092508315611d6a57829450808603955080820191505b611d83600261ffff83160461ffff168761ffff16611649565b9050611d37565b505b61ffff851615611dfd57611da08488612029565b90935091508215611dbf57600019909401939092508290600101611d8c565b61ffff811615611de457858481611dd857611dd86128ad565b04935060001901611d8c565b611def84888861165f565b600019909501949350611d8c565b6000611e0887611e58565b90505b61ffff821615611e4c576000611e298261ffff168461ffff16611649565b90508061ffff16880a8681611e4057611e406128ad565b04955090910390611e0b565b50505050949350505050565b60006003821015611e6b575060ff919050565b6004821015611e7c57506080919050565b6010821015611e8d57506040919050565b610100821015611e9f57506020919050565b611bdc821015611eb157506014919050565b612c70821015611ec357506013919050565b614aa9821015611ed557506012919050565b618554821015611ee757506011919050565b62010000821015611efa57506010919050565b62021837821015611f0d5750600f919050565b6204e046821015611f205750600e919050565b620ced4c821015611f335750600d919050565b62285146821015611f465750600c919050565b629aa2ad821015611f595750600b919050565b6303080c01821015611f6d5750600a919050565b6315c5cbbd821015611f8157506009919050565b640100000000821015611f9657506008919050565b6417c6a1f29f821015611fab57506007919050565b6506597fa94f5c821015611fc157506006919050565b66093088c35d733b821015611fd857506005919050565b68010000000000000000821015611ff157506004919050565b6a285145f31ae515c447bb5782101561200c57506003919050565b600160801b82101561202057506002919050565b5060015b919050565b60008083600003612040575060019050600061206d565b83830283858281612053576120536128ad565b041461206657600080925092505061206d565b6001925090505b9250929050565b60006020828403121561208657600080fd5b81356001600160e01b031981168114610a8f57600080fd5b6000602082840312156120b057600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b82811015612101576120f184835180518252602090810151910152565b92840192908501906001016120d4565b5091979650505050505050565b6001600160a01b0381168114610ffc57600080fd5b80356120248161210e565b60008060006060848603121561214357600080fd5b833561214e8161210e565b95602085013595506040909401359392505050565b6000806040838503121561217657600080fd5b8235915060208301356121888161210e565b809150509250929050565b60008083601f8401126121a557600080fd5b5081356001600160401b038111156121bc57600080fd5b6020830191508360208260061b850101111561206d57600080fd5b600080602083850312156121ea57600080fd5b82356001600160401b0381111561220057600080fd5b61220c85828601612193565b90969095509350505050565b60008083601f84011261222a57600080fd5b5081356001600160401b0381111561224157600080fd5b6020830191508360208260051b850101111561206d57600080fd5b6000806000806000806000806080898b03121561227857600080fd5b88356001600160401b038082111561228f57600080fd5b61229b8c838d01612218565b909a50985060208b01359150808211156122b457600080fd5b6122c08c838d01612218565b909850965060408b01359150808211156122d957600080fd5b6122e58c838d01612218565b909650945060608b01359150808211156122fe57600080fd5b5061230b8b828c01612218565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b8181101561235957835115158352928401929184019160010161233b565b50909695505050505050565b6000806020838503121561237857600080fd5b82356001600160401b038082111561238f57600080fd5b818501915085601f8301126123a357600080fd5b8135818111156123b257600080fd5b8660208285010111156123c457600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126123fd57600080fd5b81356001600160401b0380821115612417576124176123d6565b604051601f8301601f19908116603f0116810190828211818310171561243f5761243f6123d6565b8160405283815286602085880101111561245857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561248a57600080fd5b81356001600160401b038111156124a057600080fd5b610fea848285016123ec565b600080604083850312156124bf57600080fd5b50508035926020909101359150565b6000604082840312156124e057600080fd5b50919050565b60008060008060008060008060008060006101408c8e03121561250857600080fd5b6125128c3561210e565b8b359a506001600160401b038060208e0135111561252f57600080fd5b61253f8e60208f01358f01612218565b909b50995060408d013581101561255557600080fd5b506125668d60408e01358e01612193565b909850965060608c0135955061257f8d60808e016124ce565b945060c08c013561258f8161210e565b935061259d60e08d01612123565b92506101008c013591506101208c013590509295989b509295989b9093969950565b600080600080604085870312156125d557600080fd5b84356001600160401b03808211156125ec57600080fd5b6125f888838901612218565b9096509450602087013591508082111561261157600080fd5b5061261e87828801612218565b95989497509550505050565b60006040828403121561263c57600080fd5b610a8f83836124ce565b6000806040838503121561265957600080fd5b82356001600160401b0381111561266f57600080fd5b61267b858286016123ec565b95602094909401359450505050565b825181526020808401518183015282516040830152820151606082015260808101610a8f565b6001600160401b0381168114610ffc57600080fd5b6000608082840312156126d757600080fd5b604051608081018181106001600160401b03821117156126f9576126f96123d6565b6040528251600781900b811461270e57600080fd5b8152602083015161271e816126b0565b60208201526040830151600381900b811461273857600080fd5b60408201526060928301519281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561277857600080fd5b8135610a8f8161210e565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761050157610501612783565b6000602082840312156127c257600080fd5b81518015158114610a8f57600080fd5b600381810b9083900b01637fffffff8113637fffffff198212171561050157610501612783565b60006040828403121561280b57600080fd5b604051604081018181106001600160401b038211171561282d5761282d6123d6565b604052823581526020928301359281019290925250919050565b8181038181111561050157610501612783565b60008160030b637fffffff19810361287457612874612783565b60000392915050565b80820260008212600160ff1b8414161561289957612899612783565b818105831482151761050157610501612783565b634e487b7160e01b600052601260045260246000fd5b6000826128d2576128d26128ad565b600160ff1b8214600019841416156128ec576128ec612783565b500590565b6001600160c01b0381168114610ffc57600080fd5b8135612911816128f1565b81546001600160c01b03199081166001600160c01b03929092169182178355602084013561293e816126b0565b60c01b1617905550565b60006020828403121561295a57600080fd5b8135610a8f816128f1565b60006020828403121561297757600080fd5b8135610a8f816126b0565b600181815b808511156129bd5781600019048211156129a3576129a3612783565b808516156129b057918102915b93841c9390800290612987565b509250929050565b6000826129d457506001610501565b816129e157506000610501565b81600181146129f75760028114612a0157612a1d565b6001915050610501565b60ff841115612a1257612a12612783565b50506001821b610501565b5060208310610133831016604e8410600b8410161715612a40575081810a610501565b612a4a8383612982565b8060001904821115612a5e57612a5e612783565b029392505050565b6000610a8f63ffffffff8416836129c5565b600082612a8757612a876128ad565b500490565b60005b83811015612aa7578181015183820152602001612a8f565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612ae8816017850160208801612a8c565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612b19816028840160208801612a8c565b01602801949350505050565b6020815260008251806020840152612b44816040850160208701612a8c565b601f01601f19169190910160400192915050565b8082018082111561050157610501612783565b600081612b7a57612b7a612783565b506000190190565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a264697066735822122076690926c2db8bd93ce00d4367403bba09c400c1ff6d19c14bc2e66eb1b25abc64736f6c63430008150033", + "nonce": "0x2c8e5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "function": null, + "arguments": [ + "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xd40ed58c000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000076a700000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000000000000000000000000000000000000000151804cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000024ea4122ae0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000002e24d16b5a80000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000008a6e74420f9" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x145bcd", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000007ac1624287b0959d664cced3a01a51a440353b42000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000264d40ed58c000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000076a700000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000000000000000000000000000000000000000151804cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000024ea4122ae0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000002e24d16b5a80000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000008a6e74420f900000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e6" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "transactionType": "CREATE", + "contractName": "RNSReverseRegistrar", + "contractAddress": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x1772f1", + "value": "0x0", + "data": "0x608060405261000d3361001a565b610015610075565b610134565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b600054610100900460ff16156100e15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614610132576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6113db806101436000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638c84331411610097578063c66485b211610066578063c66485b21461020d578063c911994114610220578063d472ad0414610233578063f2fde38b1461024657600080fd5b80638c843314146101bf5780638da5cb5b146101d0578063b93f9b0a146101e7578063c47f0027146101fa57600080fd5b80631e83409a116100d35780631e83409a1461016a5780633efa047f1461017d578063485cc955146101a2578063715018a6146101b757600080fd5b806301ffc9a7146100fa578063092c5b3b146101225780630f5a546614610157575b600080fd5b61010d610108366004610e5b565b610259565b60405190151581526020015b60405180910390f35b6101497f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335781565b604051908152602001610119565b610149610165366004610e9a565b6102ab565b610149610178366004610ed3565b6102d1565b6034546001600160a01b03165b6040516001600160a01b039091168152602001610119565b6101b56101b0366004610e9a565b6102eb565b005b6101b561041f565b6033546001600160a01b031661018a565b6000546201000090046001600160a01b031661018a565b61018a6101f5366004610ef0565b610433565b610149610208366004610f52565b6104f5565b6101b561021b366004610ed3565b610502565b61014961022e366004610f94565b61057b565b610149610241366004610ed3565b61073a565b6101b5610254366004610ed3565b610776565b60006001600160e01b0319821663d96a46ad60e01b148061028a57506001600160e01b031982166301ffc9a760e01b145b806102a557506001600160e01b0319821663d5a614db60e01b145b92915050565b60006102b56107ef565b826102bf8161098e565b6102c98484610acd565b949350505050565b6034546000906102a59083906001600160a01b03166102ab565b600054610100900460ff161580801561030b5750600054600160ff909116105b806103255750303b158015610325575060005460ff166001145b61038d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156103b0576000805461ff0019166101001790555b603380546001600160a01b0319166001600160a01b0384161790556103d483610bb4565b801561041a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610427610c0f565b6104316000610bb4565b565b6033546040516303e9e60960e01b81526004810183905260009182916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610481573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104a9919081019061114e565b805160200151909150600080516020611386833981519152146104df57604051631bf4348160e31b815260040160405180910390fd5b8051604001516104ee90610c70565b9392505050565b60006104ee33848461057b565b61050a610c0f565b6001600160a01b038116610531576040516362daafb160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf90600090a250565b60006105856107ef565b8361058f8161098e565b6105988561073a565b6033546040516331a9108f60e11b8152600481018390529193506001600160a01b03169030908290636352211e90602401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611271565b6001600160a01b031614610656576034546000906106329088906001600160a01b0316610acd565b905083811461065457604051631bf4348160e31b815260040160405180910390fd5b505b6040516303e9e60960e01b8152600481018490526000906001600160a01b038316906303e9e60990602401600060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c6919081019061114e565b602081015151604051637737221360e01b81529192506001600160a01b0316906377372213906106fe9087908a908a9060040161128e565b600060405180830381600087803b15801561071857600080fd5b505af115801561072c573d6000803e3d6000fd5b505050505050509392505050565b60006102a5600080516020611386833981519152610760846001600160a01b0316610d0a565b6000918252805160209182012090526040902090565b61077e610c0f565b6001600160a01b0381166107e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610384565b6107ec81610bb4565b50565b6033546040516331a9108f60e11b8152600080516020611386833981519152600482018190526001600160a01b0390921691906000908390636352211e90602401602060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190611271565b90506001600160a01b0381163014806108fb575060405163020604bf60e21b81526004810183905230906001600160a01b0385169063081812fc90602401602060405180830381865afa1580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f09190611271565b6001600160a01b0316145b80610971575060405163e985e9c560e01b81526001600160a01b03828116600483015230602483015284169063e985e9c590604401602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906112c4565b61041a576040516306b7c75960e31b815260040160405180910390fd5b60335433906001600160a01b03908116908316821480610a395750604051632474521560e21b81527f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335760048201526001600160a01b0383811660248301528216906391d1485490604401602060405180830381865afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3991906112c4565b80610ab1575060405163e985e9c560e01b81526001600160a01b038481166004830152838116602483015282169063e985e9c590604401602060405180830381865afa158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab191906112c4565b61041a576040516282b42960e81b815260040160405180910390fd5b600080610ae2846001600160a01b0316610d0a565b603354604051630570891f60e01b81529192506001600160a01b031690630570891f90610b31906000805160206113868339815191529085908890309067ffffffffffffffff906004016112df565b60408051808303816000875af1158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190611343565b6040519093508391506001600160a01b038616907f53591c13f73c953042ec59cc15c968c03041980e380816e0b08dfcead86c89ac90600090a35092915050565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6000546001600160a01b03620100009091041633146104315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b60008151602814610c9457604051638dc6ac0160e01b815260040160405180910390fd5b6000805b6028811015610d035761010082029150610cd1848281518110610cbd57610cbd61136f565b01602001516001600160f81b031916610d7b565b60ff1660100282019150610cf3848260010181518110610cbd57610cbd61136f565b60ff169190910190600201610c98565b5092915050565b6060602881526020810160285b8015610d74576001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a828201536010840493506001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a82820153601084049350610d17565b5050919050565b60006001600160f81b03198216606160f81b11801590610da95750603360f91b6001600160f81b0319831611155b15610db9575060f81c6056190190565b6001600160f81b03198216604160f81b11801590610de55750602360f91b6001600160f81b0319831611155b15610df5575060f81c6036190190565b6001600160f81b03198216600360fc1b11801590610e215750603960f81b6001600160f81b0319831611155b15610e31575060f81c602f190190565b604051633fd7c86760e01b81526001600160f81b031983166004820152602401610384565b919050565b600060208284031215610e6d57600080fd5b81356001600160e01b0319811681146104ee57600080fd5b6001600160a01b03811681146107ec57600080fd5b60008060408385031215610ead57600080fd5b8235610eb881610e85565b91506020830135610ec881610e85565b809150509250929050565b600060208284031215610ee557600080fd5b81356104ee81610e85565b600060208284031215610f0257600080fd5b5035919050565b60008083601f840112610f1b57600080fd5b50813567ffffffffffffffff811115610f3357600080fd5b602083019150836020828501011115610f4b57600080fd5b9250929050565b60008060208385031215610f6557600080fd5b823567ffffffffffffffff811115610f7c57600080fd5b610f8885828601610f09565b90969095509350505050565b600080600060408486031215610fa957600080fd5b8335610fb481610e85565b9250602084013567ffffffffffffffff811115610fd057600080fd5b610fdc86828701610f09565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561102257611022610fe9565b60405290565b6040516060810167ffffffffffffffff8111828210171561102257611022610fe9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561107457611074610fe9565b604052919050565b60005b8381101561109757818101518382015260200161107f565b50506000910152565b805167ffffffffffffffff81168114610e5657600080fd5b80518015158114610e5657600080fd5b6000608082840312156110da57600080fd5b6040516080810181811067ffffffffffffffff821117156110fd576110fd610fe9565b8060405250809150825161111081610e85565b8152602083015161112081610e85565b6020820152611131604084016110a0565b6040820152611142606084016110b8565b60608201525092915050565b6000602080838503121561116157600080fd5b825167ffffffffffffffff8082111561117957600080fd5b9084019060a0828703121561118d57600080fd5b611195610fff565b8251828111156111a457600080fd5b8301606081890312156111b657600080fd5b6111be611028565b815160ff811681146111cf57600080fd5b815281860151868201526040820151848111156111eb57600080fd5b80830192505088601f83011261120057600080fd5b81518481111561121257611212610fe9565b611224601f8201601f1916880161104b565b9450808552898782850101111561123a57600080fd5b6112498188870189860161107c565b5060408101849052825250611260878486016110c8565b848201528094505050505092915050565b60006020828403121561128357600080fd5b81516104ee81610e85565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156112d657600080fd5b6104ee826110b8565b85815260a06020820152600085518060a08401526113048160c0850160208a0161107c565b6001600160a01b03958616604084015293909416606082015267ffffffffffffffff91909116608082015260c0601f909201601f191601019392505050565b6000806040838503121561135657600080fd5b61135f836110a0565b9150602083015190509250929050565b634e487b7160e01b600052603260045260246000fdfe91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2a264697066735822122049d04f0a54497bd86795b9d36ef715d010bd0683d9b3512d8cfc1fae5778484f64736f6c63430008150033", + "nonce": "0x2c8e7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "function": null, + "arguments": [ + "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0x485cc955000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0xce3be", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656400000000000000000000000049e2f4aa6edd7453a4d9c91cc8fb02fcba68d7ea000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf8300000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e8" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x68422a6b0ad97b5b1e0b22f5615edc36f1f9162aba8064402b52e15e445c2db3", + "transactionType": "CREATE", + "contractName": "PublicResolver", + "contractAddress": "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x313d44", + "value": "0x0", + "data": "0x60806040526200000e62000014565b620000d8565b6101cd54610100900460ff1615620000825760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b6101cd5460ff90811614620000d6576101cd805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612b7680620000e86000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063691f343111610104578063ac9650d8116100a2578063d700ff3311610071578063d700ff3314610486578063e32954eb146104c7578063e59d895d146104da578063f8014891146104ed57600080fd5b8063ac9650d8146103e5578063c869023314610405578063ce3decdc14610460578063d5fa2b001461047357600080fd5b80638c843314116100de5780638c8433141461039a578063956db465146103ac578063a821a728146103bf578063a8fa5682146103d257600080fd5b8063691f34311461036157806370687fcb14610374578063773722131461038757600080fd5b80633603d758116101715780634cbf6ba41161014b5780634cbf6ba4146102ce57806359d1d43c1461031b5780635c98042b1461033b578063623195b01461034e57600080fd5b80633603d758146102955780633b3b57de146102a8578063485cc955146102bb57600080fd5b8063124a319c116101ad578063124a319c146102245780632203ab561461024f578063237a78fb1461027057806329cd62ea1461028257600080fd5b806301ffc9a7146101d45780630af179d7146101fc57806310f13a8c14610211575b600080fd5b6101e76101e236600461219e565b610500565b60405190151581526020015b60405180910390f35b61020f61020a3660046121fc565b610511565b005b61020f61021f366004612247565b61052d565b6102376102323660046122c0565b61054d565b6040516001600160a01b0390911681526020016101f3565b61026261025d3660046122f0565b610745565b6040516101f3929190612362565b610201546001600160a01b0316610237565b61020f61029036600461237b565b61087e565b61020f6102a33660046123a7565b610894565b6102376102b63660046123a7565b6108ac565b61020f6102c93660046123d5565b61091b565b6101e76102dc3660046122f0565b6000828152603260209081526040808320546001600160401b0316835260ff825280832094835293815283822092825291909152205461ffff16151590565b61032e6103293660046121fc565b610a63565b6040516101f39190612403565b61032e6103493660046123a7565b610b45565b61020f61035c366004612416565b610c06565b61032e61036f3660046123a7565b610c24565b61020f6103823660046121fc565b610dbf565b61020f6103953660046121fc565b610dd5565b610200546001600160a01b0316610237565b6101e76103ba366004612468565b610e20565b61032e6103cd3660046123a7565b610ea5565b61032e6103e036600461248d565b610ee0565b6103f86103f3366004612511565b610f2f565b6040516101f39190612552565b61044b6104133660046123a7565b6000818152603260209081526040808320546001600160401b0316835261019982528083209383529290522080546001909101549091565b604080519283526020830191909152016101f3565b61020f61046e3660046121fc565b610f44565b61020f610481366004612468565b610f5a565b6104af6104943660046123a7565b6000908152603260205260409020546001600160401b031690565b6040516001600160401b0390911681526020016101f3565b6103f86104d53660046125b4565b610fb8565b61020f6104e83660046125f2565b611099565b6103f86104fb366004612637565b6110af565b600061050b826110bc565b92915050565b8261051c81336110e1565b610527848484611143565b50505050565b8461053881336110e1565b610545868686868661133a565b505050505050565b6000828152603260209081526040808320546001600160401b03168352610133825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156105a357905061050b565b60006105ae856108ac565b90506001600160a01b0381166105c95760009250505061050b565b6040516301ffc9a760e01b60248201526000906060906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106229190612672565b600060405180830381855afa9150503d806000811461065d576040519150601f19603f3d011682016040523d82523d6000602084013e610662565b606091505b50909250905061067282826113f5565b61068357600094505050505061050b565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106d99190612672565b600060405180830381855afa9150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50909250905061072982826113f5565b61073a57600094505050505061050b565b509095945050505050565b6000828152603260209081526040808320546001600160401b0316835260658252808320858452909152812060609060015b84811161085e57808516158015906107a75750600081815260208390526040812080546107a39061268e565b9050115b1561085657808260008381526020019081526020016000208080546107cb9061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546107f79061268e565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b50505050509050935093505050610877565b60011b610777565b5060006040518060200160405280600081525092509250505b9250929050565b8261088981336110e1565b610527848484611435565b8061089f81336110e1565b6108a8826114bd565b5050565b610200546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa1580156108f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b91906126c8565b6101cd54610100900460ff161580801561093d57506101cd54600160ff909116105b806109585750303b15801561095857506101cd5460ff166001145b6109c05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6101cd805460ff1916600117905580156109e5576101cd805461ff0019166101001790555b61020080546001600160a01b038086166001600160a01b0319928316179092556102018054928516929091169190911790558015610a5e576101cd805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000838152603260209081526040808320546001600160401b031683526101cc825280832086845290915290819020905160609190610aa590859085906126e5565b90815260200160405180910390208054610abe9061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea9061268e565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b505050505090509392505050565b6000818152603260209081526040808320546001600160401b0316835261010082528083208484529091529020805460609190610b819061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bad9061268e565b8015610bfa5780601f10610bcf57610100808354040283529160200191610bfa565b820191906000526020600020905b815481529060010190602001808311610bdd57829003601f168201915b50505050509050919050565b83610c1181336110e1565b610c1d85858585611527565b5050505050565b61020154604051635c9fcd8560e11b8152600481018390526060916000916001600160a01b039091169063b93f9b0a90602401602060405180830381865afa158015610c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9891906126c8565b90506000610ca5846115c5565b610200546040516304c3ccb160e11b81529192506000916001600160a01b0390911690630987996290610cdc908590600401612403565b602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d91906126f5565b610200546040516331a9108f60e11b8152600481018390529192506001600160a01b0385811692911690636352211e90602401602060405180830381865afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9191906126c8565b6001600160a01b031614610db45760405180602001604052806000815250610db6565b815b95945050505050565b82610dca81336110e1565b610527848484611601565b82610de081336110e1565b6105278484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166b92505050565b6102005460405163fd3fa91960e01b81526001600160a01b0383811660048301526024820185905260186044830152600092169063fd3fa919906064016040805180830381865afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d919061270e565b509392505050565b6000818152603260209081526040808320546001600160401b0316835260cb82528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260fe82528083208684528252808320858452825280832061ffff851684529091529020805460609190610abe9061268e565b6060610f3d600184846116df565b9392505050565b82610f4f81336110e1565b6105278484846117fb565b81610f6581336110e1565b60405162461bcd60e51b815260206004820152602260248201527f5075626c69635265736f6c7665723a2043616e6e6f7420736574206164647265604482015261737360f01b60648201526084016109b7565b606083156110855760005b8281101561108357838382818110610fdd57610fdd61273d565b9050602002810190610fef9190612753565b610ffe91602491600491612799565b611007916127c3565b851461107b5760405162461bcd60e51b815260206004820152603960248201527f5075626c69635265736f6c7665723a20416c6c207265636f726473206d75737460448201527f20686176652061206d61746368696e67206e616d65686173680000000000000060648201526084016109b7565b600101610fc3565b505b611091600184846116df565b949350505050565b826110a481336110e1565b61052784848461192c565b60606110918484846116df565b60006001600160e01b03198216635497184960e01b148061050b575061050b826119c1565b6110eb8282610e20565b6108a85760405162461bcd60e51b815260206004820152602360248201527f5075626c69635265736f6c7665723a20756e617574686f72697a65642063616c6044820152623632b960e91b60648201526084016109b7565b6000838152603260209081526040808320548151601f86018490048402810184019092528482528392606092839285926001600160401b039091169183916111aa9183918c908c908190840183828082843760009201919091525092939250506119e69050565b90505b805151602082015110156112d4578661ffff1660000361121257806040015196506111d781611a47565b9450846040516020016111ea9190612672565b60405160208183030381529060405280519060200120925061120b81611a68565b93506112c6565b600061121d82611a47565b9050816040015161ffff168861ffff16141580611241575061123f8682611a84565b155b156112c45761129d8b878a8d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801518d91506112949082906127f7565b8b51158a611aa2565b8160400151975081602001519650809550858051906020012093506112c182611a68565b94505b505b6112cf81611d0a565b6111ad565b5083511561132f5761132f8985888b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061132691508290508e6127f7565b89511588611aa2565b505050505050505050565b6000858152603260209081526040808320546001600160401b031683526101cc82528083208884529091529081902090518391839161137c90889088906126e5565b90815260200160405180910390209182611397929190612866565b5083836040516113a89291906126e5565b6040518091039020857f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1868686866040516113e6949392919061294e565b60405180910390a35050505050565b60008280611404575060208251105b80610f3d575081601f8151811061141d5761141d61273d565b01602001516001600160f81b03191615905092915050565b6040805180820182528381526020808201848152600087815260328352848120546001600160401b03168152610199835284812088825283528490209251835551600190920191909155815184815290810183905284917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a2505050565b60008181526032602090815260409182902080546001600160401b038082166001011667ffffffffffffffff199091168117909155915191825282917fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a250565b826115336001826127f7565b161561155257604051631e76820d60e31b815260040160405180910390fd5b6000848152603260209081526040808320546001600160401b031683526065825280832087845282528083208684529091529020611591828483612866565b50604051839085907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a350505050565b6000818152603260209081526040808320546001600160401b0316835261016682528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260cb82528083208684529091529020611638828483612866565b50827ff138098ddddc53c41c8649e6533fdf517348a8e9d24e9db5e5628db793fb76b483836040516114b0929190612980565b6000828152603260209081526040808320546001600160401b03168352610166825280832085845290915290206116a28282612994565b50817fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7826040516116d39190612403565b60405180910390a25050565b606081806001600160401b038111156116fa576116fa61280a565b60405190808252806020026020018201604052801561172d57816020015b60608152602001906001900390816117185790505b5091506000606060005b838110156117f057308787838181106117525761175261273d565b90506020028101906117649190612753565b6040516117729291906126e5565b600060405180830381855af49150503d80600081146117ad576040519150601f19603f3d011682016040523d82523d6000602084013e6117b2565b606091505b50909350915087156117ca576117ca83151583611df2565b818582815181106117dd576117dd61273d565b6020908102919091010152600101611737565b505050509392505050565b6000838152603260209081526040808320546001600160401b03168084526101008352818420878552909252822080549192916118379061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546118639061268e565b80156118b05780601f10611885576101008083540402835291602001916118b0565b820191906000526020600020905b81548152906001019060200180831161189357829003601f168201915b505050506001600160401b0384166000908152610100602090815260408083208a845290915290209192506118e89050848683612866565b50847f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f8582868660405161191d93929190612a53565b60405180910390a25050505050565b6000838152603260209081526040808320546001600160401b03168352610133825280832086845282528083206001600160e01b031986168085529083529281902080546001600160a01b0319166001600160a01b038616908117909155905190815285917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a3505050565b60006001600160e01b031982166304920eeb60e41b148061050b575061050b82611e15565b611a346040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c0810182905261050b81611d0a565b6020810151815160609161050b91611a5f9082611e3a565b84519190611e94565b60a081015160c082015160609161050b91611a5f9082906127f7565b600081518351148015610f3d5750610f3d8360008460008751611f0a565b865160208801206000611ab6878787611e94565b90508315611bdd576001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611b009061268e565b159050611b5e576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611b4283612a83565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611b9e91612132565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611bd0929190612aa1565b60405180910390a2611cfe565b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611c1f9061268e565b9050600003611c7f576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611c6383612ac7565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611cc08282612994565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611cf593929190612ae8565b60405180910390a25b50505050505050505050565b60c08101516020820181905281515111611d215750565b6000611d3582600001518360200151611e3a565b8260200151611d449190612b17565b8251909150611d539082611f2d565b61ffff166040830152611d67600282612b17565b8251909150611d769082611f2d565b61ffff166060830152611d8a600282612b17565b8251909150611d999082611f55565b63ffffffff166080830152611daf600482612b17565b8251909150600090611dc19083611f2d565b61ffff169050611dd2600283612b17565b60a084018190529150611de58183612b17565b60c0909301929092525050565b816108a85780518015611e06578060208301fd5b5063350c20f16000526004601cfd5b60006001600160e01b0319821663e1a460d960e01b148061050b575061050b82611f7f565b6000815b83518110611e4e57611e4e612b2a565b6000611e5a8583611fa4565b60ff169050611e6a816001612b17565b611e749083612b17565b915080600003611e845750611e8a565b50611e3e565b61109183826127f7565b8251606090611ea38385612b17565b1115611eae57600080fd5b6000826001600160401b03811115611ec857611ec861280a565b6040519080825280601f01601f191660200182016040528015611ef2576020820181803683370190505b5090506020808201908686010161073a828287611fc8565b6000611f1784848461201e565b611f2287878561201e565b149695505050505050565b8151600090611f3d836002612b17565b1115611f4857600080fd5b50016002015161ffff1690565b8151600090611f65836004612b17565b1115611f7057600080fd5b50016004015163ffffffff1690565b60006001600160e01b03198216630f140b1160e11b148061050b575061050b82612042565b6000828281518110611fb857611fb861273d565b016020015160f81c905092915050565b602081106120005781518352611fdf602084612b17565b9250611fec602083612b17565b9150611ff96020826127f7565b9050611fc8565b905182516020929092036101000a6000190180199091169116179052565b825160009061202d8385612b17565b111561203857600080fd5b5091016020012090565b60006001600160e01b0319821663f7d7b8c160e01b148061050b575061050b8260006001600160e01b0319821663a20b2f5560e01b148061209357506001600160e01b031982166392a5e8f760e01b145b8061050b575061050b8260006001600160e01b0319821663d849d8e360e01b148061050b575061050b8260006001600160e01b03198216637760be6f60e11b148061050b575061050b8260006001600160e01b031982166320191f7360e11b148061050b575061050b8260006001600160e01b0319821663e103286b60e01b148061050b57506301ffc9a760e01b6001600160e01b031983161461050b565b50805461213e9061268e565b6000825580601f1061214e575050565b601f01602090049060005260206000209081019061216c919061216f565b50565b5b808211156121845760008155600101612170565b5090565b6001600160e01b03198116811461216c57600080fd5b6000602082840312156121b057600080fd5b8135610f3d81612188565b60008083601f8401126121cd57600080fd5b5081356001600160401b038111156121e457600080fd5b60208301915083602082850101111561087757600080fd5b60008060006040848603121561221157600080fd5b8335925060208401356001600160401b0381111561222e57600080fd5b61223a868287016121bb565b9497909650939450505050565b60008060008060006060868803121561225f57600080fd5b8535945060208601356001600160401b038082111561227d57600080fd5b61228989838a016121bb565b909650945060408801359150808211156122a257600080fd5b506122af888289016121bb565b969995985093965092949392505050565b600080604083850312156122d357600080fd5b8235915060208301356122e581612188565b809150509250929050565b6000806040838503121561230357600080fd5b50508035926020909101359150565b60005b8381101561232d578181015183820152602001612315565b50506000910152565b6000815180845261234e816020860160208601612312565b601f01601f19169290920160200192915050565b8281526040602082015260006110916040830184612336565b60008060006060848603121561239057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156123b957600080fd5b5035919050565b6001600160a01b038116811461216c57600080fd5b600080604083850312156123e857600080fd5b82356123f3816123c0565b915060208301356122e5816123c0565b602081526000610f3d6020830184612336565b6000806000806060858703121561242c57600080fd5b843593506020850135925060408501356001600160401b0381111561245057600080fd5b61245c878288016121bb565b95989497509550505050565b6000806040838503121561247b57600080fd5b8235915060208301356122e5816123c0565b6000806000606084860312156124a257600080fd5b8335925060208401359150604084013561ffff811681146124c257600080fd5b809150509250925092565b60008083601f8401126124df57600080fd5b5081356001600160401b038111156124f657600080fd5b6020830191508360208260051b850101111561087757600080fd5b6000806020838503121561252457600080fd5b82356001600160401b0381111561253a57600080fd5b612546858286016124cd565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156125a757603f19888603018452612595858351612336565b94509285019290850190600101612579565b5092979650505050505050565b6000806000604084860312156125c957600080fd5b8335925060208401356001600160401b038111156125e657600080fd5b61223a868287016124cd565b60008060006060848603121561260757600080fd5b83359250602084013561261981612188565b915060408401356124c2816123c0565b801515811461216c57600080fd5b60008060006040848603121561264c57600080fd5b833561265781612629565b925060208401356001600160401b038111156125e657600080fd5b60008251612684818460208701612312565b9190910192915050565b600181811c908216806126a257607f821691505b6020821081036126c257634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156126da57600080fd5b8151610f3d816123c0565b8183823760009101908152919050565b60006020828403121561270757600080fd5b5051919050565b6000806040838503121561272157600080fd5b825161272c81612629565b60208401519092506122e581612188565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261276a57600080fd5b8301803591506001600160401b0382111561278457600080fd5b60200191503681900382131561087757600080fd5b600080858511156127a957600080fd5b838611156127b657600080fd5b5050820193919092039150565b8035602083101561050b57600019602084900360031b1b1692915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561050b5761050b6127e1565b634e487b7160e01b600052604160045260246000fd5b601f821115610a5e57600081815260208120601f850160051c810160208610156128475750805b601f850160051c820191505b8181101561054557828155600101612853565b6001600160401b0383111561287d5761287d61280a565b6128918361288b835461268e565b83612820565b6000601f8411600181146128c557600085156128ad5750838201355b600019600387901b1c1916600186901b178355610c1d565b600083815260209020601f19861690835b828110156128f657868501358255602094850194600190920191016128d6565b50868210156129135760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612962604083018688612925565b8281036020840152612975818587612925565b979650505050505050565b602081526000611091602083018486612925565b81516001600160401b038111156129ad576129ad61280a565b6129c1816129bb845461268e565b84612820565b602080601f8311600181146129f657600084156129de5750858301515b600019600386901b1c1916600185901b178555610545565b600085815260208120601f198616915b82811015612a2557888601518255948401946001909101908401612a06565b5085821015612a435787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000612a666040830186612336565b8281036020840152612a79818587612925565b9695505050505050565b600061ffff821680612a9757612a976127e1565b6000190192915050565b604081526000612ab46040830185612336565b905061ffff831660208301529392505050565b600061ffff808316818103612ade57612ade6127e1565b6001019392505050565b606081526000612afb6060830186612336565b61ffff851660208401528281036040840152612a798185612336565b8082018082111561050b5761050b6127e1565b634e487b7160e01b600052600160045260246000fdfea264697066735822122071bbc4bff126add9e96885c48993935407bf76c98e0f32dfd2c1c91c3f35e40664736f6c63430008150033", + "nonce": "0x2c8e9" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "function": null, + "arguments": [ + "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0x485cc955000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf830000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0xd3d3f", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000933cd2272831334f1e46977bcc36153c8027dee8000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf830000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf71600000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8ea" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd8a479a76c31593e7feabb2f6b015593694ea059bdace9060b7376027824ceba", + "transactionType": "CREATE", + "contractName": "RONRegistrarController", + "contractAddress": "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x35bce3", + "value": "0x0", + "data": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612f2d80620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a610245366004612041565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f336600461206b565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d610358366004612099565b610745565b005b34801561036b57600080fd5b5061035d61037a366004612099565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b8366004612099565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d6104283660046120c9565b610815565b61035d61043b3660046120fb565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d61047336600461217d565b6109d8565b34801561048457600080fd5b5061035d610493366004612284565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612414565b610cdd565b3480156104ea57600080fd5b506102a26104f93660046124cf565b610e0b565b34801561050a57600080fd5b5061024a610519366004612099565b610e2a565b34801561052a57600080fd5b5061024a6105393660046124f1565b610e55565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e3660046124f1565b610ee3565b34801561057f57600080fd5b5061027361058e36600461252d565b610f6e565b34801561059f57600080fd5b5061035d6105ae36600461206b565b61101e565b3480156105bf57600080fd5b506103086105ce36600461206b565b611032565b61035d6105e1366004612573565b611049565b3480156105f257600080fd5b5061035d610601366004612099565b611156565b34801561061257600080fd5b50610308610621366004612573565b61117b565b34801561063257600080fd5b5061035d6106413660046124cf565b6111fc565b34801561065257600080fd5b50610308600080516020612ed883398151915281565b34801561067457600080fd5b5061035d6106833660046120c9565b611211565b34801561069457600080fd5b5061035d6106a336600461206b565b61123f565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f73660046124f1565b611298565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f826112d5565b92915050565b6000828152600260205260409020600101546107608161130a565b61076a8383611314565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611336565b5050565b600080516020612ed883398151915261080a8161130a565b610812611358565b50565b60006108208161130a565b6107ee826113aa565b610831611401565b610839611449565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610f6e915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac823461264d565b905060006108ef86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061129892505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190612660565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126a6565b60405180910390a282156109c3576109c333846114a2565b6109cb611507565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612ed88339815191528b61151d565b610aca60008c61151d565b610ad3836113aa565b610adc86611527565b610ae6878961155e565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae8161130a565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc6126da565b9050602002013581526020019081526020016000206000888885818110610c2557610c256126da565b9050602002016020810190610c3a91906120c9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac9594939291906126f0565b60405180910390a250505050505050565b600080516020612ed8833981519152610cd58161130a565b6108126115e8565b610ce5611401565b610ced611449565b6000610cf888611298565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d6f9190810190612868565b602090810151606001516000848152603f835260408082206001600160a01b038d168352909352919091205490915060ff16811580610dac575080155b15610dd25789898383604051631fc5717160e01b81526004016107db9493929190612976565b600080610ddf8c8b611625565b91509150610df48c8c8c8c8c8c8c898961167d565b5050505050610e0260018055565b50505050505050565b6000828152600360205260408120610e2390836117a7565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e62836117b3565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610e9b9085906004016129b0565b602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906129c3565b1592915050565b6000610eee82610e55565b801561073f5750603a546001600160a01b03166396e494e8610f0f84611298565b6040518263ffffffff1660e01b8152600401610f2d91815260200190565b602060405180830381865afa158015610f4a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129c3565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fa990899089906004016129e0565b608060405180830381865afa158015610fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fea9190612a3b565b80518251929450909250610ffd91612a70565b9350806020015182602001516110139190612a70565b925050509250929050565b60006110298161130a565b6107ee82611527565b600081815260036020526040812061073f906118a1565b611051611401565b611059611449565b600061106489611298565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d69190810190612868565b6020015160600151156110fe57886040516331597a5760e21b81526004016107db91906129b0565b60006111108a8a8a8a8a8a8a8a61117b565b905061111d8a89836118ab565b60008061112a8c8b611625565b9150915061113f8c8c8c8b8b8b8b898961167d565b5050505061114c60018055565b5050505050505050565b6000828152600260205260409020600101546111718161130a565b61076a8383611336565b6000821580159061119357506001600160a01b038516155b156111b1576040516334fd817160e21b815260040160405180910390fd5b6111ba89611298565b888888888888886040516020016111d8989796959493929190612b14565b60405160208183030381529060405280519060200120905098975050505050505050565b60006112078161130a565b61076a838361155e565b600061121c8161130a565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b611247611401565b6037546000828152603e6020526040902054429161126491612a70565b1061128557604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b6108128133611985565b61131e82826119b8565b600082815260036020526040902061076a9082611a3e565b6113408282611a53565b600082815260036020526040902061076a9082611aba565b611360611acf565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114475760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b60026001540361149b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114ae8383611b18565b90508061076a576114c7836001600160a01b0316611b8e565b6114d083611ba4565b6040516020016114e1929190612b74565b60408051601f198184030181529082905262461bcd60e51b82526107db916004016129b0565b603954611447906001600160a01b0316476114a2565b6107ee8282611314565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c906020016113f6565b4281111561157f57604051630b4319e560e21b815260040160405180910390fd5b81811161159f576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b6115f0611401565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861138d3390565b6000806116328484610f6e565b9092509050348111156116585760405163044044a560e21b815260040160405180910390fd5b3481810390821461166d5761166d33826114a2565b50611676611507565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b81526004016116e9959493929190612bf2565b60408051808303816000875af1158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b9190612c3d565b909250905085156117425761174288828989611bbb565b8415611752576117528b8b611c39565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117929493929190612c6b565b60405180910390a35050505050505050505050565b6000610e238383611cd0565b600080600080845190505b808310156118995760008584815181106117da576117da6126da565b01602001516001600160f81b0319169050600160ff1b8110156118025760018401935061188d565b600760fd1b6001600160f81b0319821610156118235760028401935061188d565b600f60fc1b6001600160f81b0319821610156118445760038401935061188d565b601f60fb1b6001600160f81b0319821610156118655760048401935061188d565b603f60fa1b6001600160f81b0319821610156118865760058401935061188d565b6006840193505b506001909101906117be565b509392505050565b600061073f825490565b603854826001600160401b031610156118e2576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6118eb83610ee3565b61190a57826040516308eee0fd60e31b81526004016107db91906129b0565b6000818152603e6020526040812054611923904261264d565b905060365481101561194b57604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119715760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e60205260408120555050565b61198f8282610e2a565b6107ee5761199c81611b8e565b6119a7836020611cfa565b6040516020016114e1929190612ca3565b6119c28282610e2a565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff191660011790556119fa3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e23836001600160a01b038416611e95565b611a5d8282610e2a565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e23836001600160a01b038416611ee4565b60005460ff166114475760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b429190612d18565b60006040518083038185875af1925050503d8060008114611b7f576040519150601f19603f3d011682016040523d82523d6000602084013e611b84565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611cfa565b606061073f82611bb384611fd7565b600101611cfa565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611beb90869086908690600401612d34565b6000604051808303816000875af1158015611c0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c329190810190612d57565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c61908690602001612e2e565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611c8d929190612e56565b6020604051808303816000875af1158015611cac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612e7a565b6000826000018281548110611ce757611ce76126da565b9060005260206000200154905092915050565b60606000611d09836002612e93565b611d14906002612a70565b6001600160401b03811115611d2b57611d2b612307565b6040519080825280601f01601f191660200182016040528015611d55576020820181803683370190505b509050600360fc1b81600081518110611d7057611d706126da565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611d9f57611d9f6126da565b60200101906001600160f81b031916908160001a9053506000611dc3846002612e93565b611dce906001612a70565b90505b6001811115611e46576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e0257611e026126da565b1a60f81b828281518110611e1857611e186126da565b60200101906001600160f81b031916908160001a90535060049490941c93611e3f81612eaa565b9050611dd1565b508315610e235760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611edc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015611fcd576000611f0860018361264d565b8554909150600090611f1c9060019061264d565b9050818114611f81576000866000018281548110611f3c57611f3c6126da565b9060005260206000200154905080876000018481548110611f5f57611f5f6126da565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611f9257611f92612ec1565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c15611fef5760809290921c916010015b604083901c156120045760409290921c916008015b602083901c156120195760209290921c916004015b601083901c1561202e5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561205357600080fd5b81356001600160e01b031981168114610e2357600080fd5b60006020828403121561207d57600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120ac57600080fd5b8235915060208301356120be81612084565b809150509250929050565b6000602082840312156120db57600080fd5b8135610e2381612084565b6001600160401b038116811461081257600080fd5b60008060006040848603121561211057600080fd5b83356001600160401b038082111561212757600080fd5b818601915086601f83011261213b57600080fd5b81358181111561214a57600080fd5b87602082850101111561215c57600080fd5b60209283019550935050840135612172816120e6565b809150509250925092565b6000806000806000806000806000806101408b8d03121561219d57600080fd5b8a356121a881612084565b995060208b01356121b881612084565b985060408b01356121c881612084565b975060608b0135965060808b0135955060a08b0135945060c08b01356121ed81612084565b935060e08b01356121fd81612084565b92506101008b013561220e81612084565b91506101208b013561221f81612084565b809150509295989b9194979a5092959850565b60008083601f84011261224457600080fd5b5081356001600160401b0381111561225b57600080fd5b6020830191508360208260051b850101111561167657600080fd5b801515811461081257600080fd5b60008060008060006060868803121561229c57600080fd5b85356001600160401b03808211156122b357600080fd5b6122bf89838a01612232565b909750955060208801359150808211156122d857600080fd5b506122e588828901612232565b90945092505060408601356122f981612276565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561233f5761233f612307565b60405290565b604051606081016001600160401b038111828210171561233f5761233f612307565b604051601f8201601f191681016001600160401b038111828210171561238f5761238f612307565b604052919050565b60006001600160401b038211156123b0576123b0612307565b50601f01601f191660200190565b600082601f8301126123cf57600080fd5b81356123e26123dd82612397565b612367565b8181528460208386010111156123f757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561242f57600080fd5b87356001600160401b038082111561244657600080fd5b6124528b838c016123be565b985060208a0135915061246482612084565b909650604089013590612476826120e6565b90955060608901359061248882612084565b9094506080890135908082111561249e57600080fd5b506124ab8a828b01612232565b90945092505060a08801356124bf81612276565b8091505092959891949750929550565b600080604083850312156124e257600080fd5b50508035926020909101359150565b60006020828403121561250357600080fd5b81356001600160401b0381111561251957600080fd5b612525848285016123be565b949350505050565b6000806040838503121561254057600080fd5b82356001600160401b0381111561255657600080fd5b612562858286016123be565b92505060208301356120be816120e6565b60008060008060008060008060e0898b03121561258f57600080fd5b88356001600160401b03808211156125a657600080fd5b6125b28c838d016123be565b995060208b013591506125c482612084565b90975060408a0135906125d6826120e6565b90965060608a0135955060808a0135906125ef82612084565b90945060a08a0135908082111561260557600080fd5b506126128b828c01612232565b90945092505060c089013561262681612276565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612637565b60006020828403121561267257600080fd5b8151610e23816120e6565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126ba60608301868861267d565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561271057600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b8783101561276d57833561275081612084565b6001600160a01b031681529281019260019290920191810161273d565b8615156040870152935061278092505050565b9695505050505050565b60005b838110156127a557818101518382015260200161278d565b50506000910152565b60006127bc6123dd84612397565b90508281528383830111156127d057600080fd5b610e2383602083018461278a565b6000608082840312156127f057600080fd5b604051608081018181106001600160401b038211171561281257612812612307565b8060405250809150825161282581612084565b8152602083015161283581612084565b60208201526040830151612848816120e6565b6040820152606083015161285b81612276565b6060919091015292915050565b6000602080838503121561287b57600080fd5b82516001600160401b038082111561289257600080fd5b9084019060a082870312156128a657600080fd5b6128ae61231d565b8251828111156128bd57600080fd5b8301606081890312156128cf57600080fd5b6128d7612345565b815160ff811681146128e857600080fd5b8152818601518682015260408201518481111561290457600080fd5b82019350601f8401891361291757600080fd5b6129258985518887016127ae565b6040820152825250612939878486016127de565b848201528094505050505092915050565b6000815180845261296281602086016020860161278a565b601f01601f19169290920160200192915050565b608081526000612989608083018761294a565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b602081526000610e23602083018461294a565b6000602082840312156129d557600080fd5b8151610e2381612276565b6040815260006129f3604083018561294a565b90506001600160401b03831660208301529392505050565b600060408284031215612a1d57600080fd5b612a2561231d565b9050815181526020820151602082015292915050565b60008060808385031215612a4e57600080fd5b612a588484612a0b565b9150612a678460408501612a0b565b90509250929050565b8082018082111561073f5761073f612637565b81835260006020808501808196508560051b810191508460005b87811015612b075782840389528135601e19883603018112612abe57600080fd5b870185810190356001600160401b03811115612ad957600080fd5b803603821315612ae857600080fd5b612af386828461267d565b9a87019a9550505090840190600101612a9d565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b5d9083018587612a83565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bbf81602a85016020880161278a565b660103b30b63ab2960cd1b602a918401918201528351612be681603184016020880161278a565b01603101949350505050565b85815260a060208201526000612c0b60a083018761294a565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c5057600080fd5b8251612c5b816120e6565b6020939093015192949293505050565b608081526000612c7e608083018761294a565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612cdb81601785016020880161278a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d0c81602884016020880161278a565b01602801949350505050565b60008251612d2a81846020870161278a565b9190910192915050565b838152604060208201526000612d4e604083018486612a83565b95945050505050565b60006020808385031215612d6a57600080fd5b82516001600160401b0380821115612d8157600080fd5b818501915085601f830112612d9557600080fd5b815181811115612da757612da7612307565b8060051b612db6858201612367565b9182528381018501918581019089841115612dd057600080fd5b86860192505b83831015612e2157825185811115612dee5760008081fd5b8601603f81018b13612e005760008081fd5b612e118b89830151604084016127ae565b8352509186019190860190612dd6565b9998505050505050505050565b60008251612e4081846020870161278a565b63173937b760e11b920191825250600401919050565b6001600160a01b03831681526040602082018190526000906125259083018461294a565b600060208284031215612e8c57600080fd5b5051919050565b808202811582820484141761073f5761073f612637565b600081612eb957612eb9612637565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212206a3d52d10991a468c57c6615bb62fcc62fde33eb734d4cc15addc19f2f75fb7b64736f6c63430008150033", + "nonce": "0x2c8eb" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "function": null, + "arguments": [ + "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0x64c65705000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000bc07dfda8f91aae03141b98278cb2321e36ec2f300000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab50000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x12e8d0", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000942b2dc201bacf99fec1f877bdd30c394325f3cc000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd70000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000014464c65705000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000bc07dfda8f91aae03141b98278cb2321e36ec2f300000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab50000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf71600000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8ec" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfcafa09725cd7e3cb2cf509b49bceba0e18fa25a3748c222b6ffa84a66650ccb", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x2154a", + "value": "0x0", + "data": "0x2f2ff15d7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "nonce": "0x2c8ed" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x6813cad5e382b91b0d75dd84fd880cdaa8a376843bcf2b4ec48897509c423361", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x26639", + "value": "0x0", + "data": "0x2f2ff15d87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "nonce": "0x2c8ee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdfebf6d29b4938b30b806e3b4ce35efceb7375b00a497723a8dc89d1893c5abb", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x2154a", + "value": "0x0", + "data": "0x2f2ff15d7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa799", + "nonce": "0x2c8ef" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x56bc0", + "value": "0x0", + "data": "0x0570891f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000000000000000000000000003726f6e0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8f0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x56c02", + "value": "0x0", + "data": "0x0570891f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000077265766572736500000000000000000000000000000000000000000000000000", + "nonce": "0x2c8f1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x62d55", + "value": "0x0", + "data": "0x0570891fa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d3400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000046164647200000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8f2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x98814fb702fc8202e3ca381c3ef0b2d33fdef857499e7c8ef7d4b2ced938c00b", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x11021", + "value": "0x0", + "data": "0xa22cb465000000000000000000000000b962edded164f55d136e491a3022246815e1b5a80000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2c8f3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xc69718e4b0f311aa76c1dcccf3a4b0c4b090ff8462155fa121e32b8eda1ba8c1", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x11021", + "value": "0x0", + "data": "0xa22cb465000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa7990000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2c8f4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb5da04ebceb3a3ca75a005e56d803fe8c716d5ae28b040572f8f30b63127bc2b", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x10cfa", + "value": "0x0", + "data": "0x095ea7b30000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf71691d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2", + "nonce": "0x2c8f5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf60851be682c3c0e371b74cad3434c93e214fa5cb91854f27b498834ee1d5901", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x0cc07f120dffdf507a6e983c54bcb402fc6bf716", + "gas": "0x10e42", + "value": "0x0", + "data": "0xc66485b2000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6", + "nonce": "0x2c8f6" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xbc07dfda8f91aae03141b98278cb2321e36ec2f3", + "gas": "0x1e6f019", + "value": "0x0", + "data": "0x245ed6540000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003f004f09f96950000000000000000000000000000000000000000000000000000000d32206769726c73203120637570000000000000000000000000000000000000043267316300000000000000000000000000000000000000000000000000000004347235650000000000000000000000000000000000000000000000000000000435683174000000000000000000000000000000000000000000000000000000043568697400000000000000000000000000000000000000000000000000000005615f735f73000000000000000000000000000000000000000000000000000003613535000000000000000000000000000000000000000000000000000000000861626f7274696f6e00000000000000000000000000000000000000000000000e6163726f746f6d6f7068696c6961000000000000000000000000000000000012616c6162616d6120686f7420706f636b65740000000000000000000000000010616c61736b616e20706970656c696e6500000000000000000000000000000004616e616c00000000000000000000000000000000000000000000000000000009616e696c696e6775730000000000000000000000000000000000000000000004616e757300000000000000000000000000000000000000000000000000000007617065736869740000000000000000000000000000000000000000000000000461723565000000000000000000000000000000000000000000000000000000056172727365000000000000000000000000000000000000000000000000000004617273650000000000000000000000000000000000000000000000000000000861727365686f6c65000000000000000000000000000000000000000000000003617373000000000000000000000000000000000000000000000000000000000a6173732d6675636b6572000000000000000000000000000000000000000000076173732d6861740000000000000000000000000000000000000000000000000a6173732d70697261746500000000000000000000000000000000000000000006617373626167000000000000000000000000000000000000000000000000000961737362616e646974000000000000000000000000000000000000000000000961737362616e67657200000000000000000000000000000000000000000000076173736269746500000000000000000000000000000000000000000000000008617373636c6f776e000000000000000000000000000000000000000000000007617373636f636b0000000000000000000000000000000000000000000000000a617373637261636b657200000000000000000000000000000000000000000005617373657300000000000000000000000000000000000000000000000000000761737366616365000000000000000000000000000000000000000000000000096173736675636b6572000000000000000000000000000000000000000000000861737366756b6b61000000000000000000000000000000000000000000000009617373676f626c696e000000000000000000000000000000000000000000000661737368617400000000000000000000000000000000000000000000000000076173736865616400000000000000000000000000000000000000000000000007617373686f6c6500000000000000000000000000000000000000000000000008617373686f6c6573000000000000000000000000000000000000000000000009617373686f7070657200000000000000000000000000000000000000000000096173736a61636b657200000000000000000000000000000000000000000000076173736c69636b000000000000000000000000000000000000000000000000096173736c69636b657200000000000000000000000000000000000000000000096173736d6f6e6b657900000000000000000000000000000000000000000000086173736d756e636800000000000000000000000000000000000000000000000a6173736d756e6368657200000000000000000000000000000000000000000009617373706972617465000000000000000000000000000000000000000000000861737373686f6c650000000000000000000000000000000000000000000000096173737375636b65720000000000000000000000000000000000000000000006617373776164000000000000000000000000000000000000000000000000000861737377686f6c65000000000000000000000000000000000000000000000007617373776970650000000000000000000000000000000000000000000000000b6175746f2065726f74696300000000000000000000000000000000000000000a6175746f65726f746963000000000000000000000000000000000000000000056221746368000000000000000000000000000000000000000000000000000005623030627300000000000000000000000000000000000000000000000000000562313763680000000000000000000000000000000000000000000000000000056231746368000000000000000000000000000000000000000000000000000008626162656c616e6400000000000000000000000000000000000000000000000b626162792062617474657200000000000000000000000000000000000000000a62616279206a756963650000000000000000000000000000000000000000000862616c6c2067616700000000000000000000000000000000000000000000000a62616c6c2067726176790000000000000000000000000000000000000000000c62616c6c206b69636b696e67000000000000000000000000000000000000000c62616c6c206c69636b696e67000000000000000000000000000000000000000962616c6c207361636b000000000000000000000000000000000000000000000c62616c6c207375636b696e67000000000000000000000000000000000000000762616c6c6261670000000000000000000000000000000000000000000000000a62616c6c6c69636b65720000000000000000000000000000000000000000000562616c6c7300000000000000000000000000000000000000000000000000000862616c6c7361636b00000000000000000000000000000000000000000000000662616d706f74000000000000000000000000000000000000000000000000000862616e6762726f73000000000000000000000000000000000000000000000008626172656261636b00000000000000000000000000000000000000000000000c626172656c79206c6567616c000000000000000000000000000000000000000b626172656c796c6567616c000000000000000000000000000000000000000009626172656e616b656400000000000000000000000000000000000000000000076261737461726400000000000000000000000000000000000000000000000008626173746172646f00000000000000000000000000000000000000000000000962617374696e61646f000000000000000000000000000000000000000000000362627700000000000000000000000000000000000000000000000000000000046264736d000000000000000000000000000000000000000000000000000000066265616e657200000000000000000000000000000000000000000000000000076265616e65727300000000000000000000000000000000000000000000000008626561737469616c00000000000000000000000000000000000000000000000b626561737469616c69747900000000000000000000000000000000000000000a6265617374696c6974790000000000000000000000000000000000000000000c62656174796f75726d656174000000000000000000000000000000000000000e62656176657220636c656176657200000000000000000000000000000000000b626561766572206c69707300000000000000000000000000000000000000000762656c6c656e64000000000000000000000000000000000000000000000000076265737469616c0000000000000000000000000000000000000000000000000a6265737469616c6974790000000000000000000000000000000000000000000562692b6368000000000000000000000000000000000000000000000000000006626961746368000000000000000000000000000000000000000000000000000962696720626c61636b000000000000000000000000000000000000000000000b626967206272656173747300000000000000000000000000000000000000000c626967206b6e6f636b6572730000000000000000000000000000000000000008626967207469747300000000000000000000000000000000000000000000000662696d626f730000000000000000000000000000000000000000000000000008626972646c6f636b000000000000000000000000000000000000000000000008626973657875616c00000000000000000000000000000000000000000000000562697463680000000000000000000000000000000000000000000000000000076269746368657200000000000000000000000000000000000000000000000008626974636865727300000000000000000000000000000000000000000000000762697463686573000000000000000000000000000000000000000000000000076269746368696e000000000000000000000000000000000000000000000000086269746368696e6700000000000000000000000000000000000000000000000a626c61636b20636f636b0000000000000000000000000000000000000000000d626c6f6e646520616374696f6e00000000000000000000000000000000000017626c6f6e6465206f6e20626c6f6e646520616374696f6e000000000000000006626c6f6f64790000000000000000000000000000000000000000000000000008626c6f77206a6f6200000000000000000000000000000000000000000000000e626c6f7720796f7572206c6f6164000000000000000000000000000000000007626c6f776a6f6200000000000000000000000000000000000000000000000008626c6f776a6f627300000000000000000000000000000000000000000000000b626c756520776166666c65000000000000000000000000000000000000000008626c756d706b696e000000000000000000000000000000000000000000000007626f696f6c617300000000000000000000000000000000000000000000000007626f6c6c6f636b00000000000000000000000000000000000000000000000008626f6c6c6f636b73000000000000000000000000000000000000000000000006626f6c6c6f6b0000000000000000000000000000000000000000000000000006626f6c6c6f780000000000000000000000000000000000000000000000000007626f6e6461676500000000000000000000000000000000000000000000000005626f6e6572000000000000000000000000000000000000000000000000000004626f6f6200000000000000000000000000000000000000000000000000000006626f6f6269650000000000000000000000000000000000000000000000000007626f6f6269657300000000000000000000000000000000000000000000000005626f6f6273000000000000000000000000000000000000000000000000000006626f6f6765720000000000000000000000000000000000000000000000000006626f6f6f62730000000000000000000000000000000000000000000000000007626f6f6f6f627300000000000000000000000000000000000000000000000008626f6f6f6f6f627300000000000000000000000000000000000000000000000a626f6f6f6f6f6f6f627300000000000000000000000000000000000000000005626f6f747900000000000000000000000000000000000000000000000000000a626f6f74792063616c6c000000000000000000000000000000000000000000066272656173740000000000000000000000000000000000000000000000000007627265617374730000000000000000000000000000000000000000000000000762726f7468656c0000000000000000000000000000000000000000000000000d62726f776e2073686f776572730000000000000000000000000000000000000f6272756e6574746520616374696f6e000000000000000000000000000000000662756365746100000000000000000000000000000000000000000000000000066275646468610000000000000000000000000000000000000000000000000006627567676572000000000000000000000000000000000000000000000000000762756b6b616b650000000000000000000000000000000000000000000000000862756c6c64796b6500000000000000000000000000000000000000000000000b62756c6c6574207669626500000000000000000000000000000000000000000862756c6c7368697400000000000000000000000000000000000000000000000362756d000000000000000000000000000000000000000000000000000000000962756e6720686f6c65000000000000000000000000000000000000000000000862756e67686f6c6500000000000000000000000000000000000000000000000c62756e6e79206675636b657200000000000000000000000000000000000000056275737479000000000000000000000000000000000000000000000000000004627574740000000000000000000000000000000000000000000000000000000b627574742d70697261746500000000000000000000000000000000000000000a62757474636865656b730000000000000000000000000000000000000000000862757474686f6c65000000000000000000000000000000000000000000000009627574746d756e6368000000000000000000000000000000000000000000000862757474706c75670000000000000000000000000000000000000000000000046330636b0000000000000000000000000000000000000000000000000000000a6330636b7375636b65720000000000000000000000000000000000000000000963616d656c20746f65000000000000000000000000000000000000000000000863616d656c746f6500000000000000000000000000000000000000000000000763616d6769726c0000000000000000000000000000000000000000000000000763616d736c75740000000000000000000000000000000000000000000000000863616d77686f726500000000000000000000000000000000000000000000000663616e636572000000000000000000000000000000000000000000000000000e636172706574206d756e6368657200000000000000000000000000000000000d6361727065746d756e63686572000000000000000000000000000000000000086361737472617465000000000000000000000000000000000000000000000008636174686f6c69630000000000000000000000000000000000000000000000046361776b000000000000000000000000000000000000000000000000000000056368696e630000000000000000000000000000000000000000000000000000056368696e6b00000000000000000000000000000000000000000000000000000563686f616400000000000000000000000000000000000000000000000000001263686f636f6c61746520726f736562756473000000000000000000000000000563686f6465000000000000000000000000000000000000000000000000000004636970610000000000000000000000000000000000000000000000000000000a636972636c656a65726b00000000000000000000000000000000000000000004636c317400000000000000000000000000000000000000000000000000000011636c6576656c616e6420737465616d6572000000000000000000000000000004636c697400000000000000000000000000000000000000000000000000000008636c697466616365000000000000000000000000000000000000000000000008636c69746f726973000000000000000000000000000000000000000000000005636c69747300000000000000000000000000000000000000000000000000000d636c6f76657220636c616d70730000000000000000000000000000000000000b636c75737465726675636b000000000000000000000000000000000000000004636e757400000000000000000000000000000000000000000000000000000007636f6361696e6500000000000000000000000000000000000000000000000004636f636b0000000000000000000000000000000000000000000000000000000b636f636b2d7375636b6572000000000000000000000000000000000000000008636f636b62697465000000000000000000000000000000000000000000000009636f636b626c6f636b000000000000000000000000000000000000000000000a636f636b62757267657200000000000000000000000000000000000000000008636f636b66616365000000000000000000000000000000000000000000000008636f636b6865616400000000000000000000000000000000000000000000000a636f636b6a6f636b65790000000000000000000000000000000000000000000a636f636b6b6e6f6b65720000000000000000000000000000000000000000000a636f636b6c69636b65720000000000000000000000000000000000000000000a636f636b6d61737465720000000000000000000000000000000000000000000b636f636b6d6f6e676c657200000000000000000000000000000000000000000c636f636b6d6f6e677275656c000000000000000000000000000000000000000a636f636b6d6f6e6b657900000000000000000000000000000000000000000009636f636b6d756e6368000000000000000000000000000000000000000000000b636f636b6d756e63686572000000000000000000000000000000000000000008636f636b6e6f736500000000000000000000000000000000000000000000000a636f636b6e756767657400000000000000000000000000000000000000000005636f636b73000000000000000000000000000000000000000000000000000008636f636b73686974000000000000000000000000000000000000000000000009636f636b736d697468000000000000000000000000000000000000000000000a636f636b736d6f6b657200000000000000000000000000000000000000000008636f636b7375636b00000000000000000000000000000000000000000000000a636f636b7375636b65640000000000000000000000000000000000000000000a636f636b7375636b65720000000000000000000000000000000000000000000b636f636b7375636b696e67000000000000000000000000000000000000000009636f636b7375636b730000000000000000000000000000000000000000000008636f636b73756b61000000000000000000000000000000000000000000000009636f636b73756b6b610000000000000000000000000000000000000000000003636f6b000000000000000000000000000000000000000000000000000000000a636f6b6d756e6368657200000000000000000000000000000000000000000008636f6b7375636b61000000000000000000000000000000000000000000000006636f6e646f6d0000000000000000000000000000000000000000000000000007636f6f6368696500000000000000000000000000000000000000000000000006636f6f6368790000000000000000000000000000000000000000000000000004636f6f6e00000000000000000000000000000000000000000000000000000005636f6f6e73000000000000000000000000000000000000000000000000000006636f6f746572000000000000000000000000000000000000000000000000000b636f70726f6c61676e696100000000000000000000000000000000000000000b636f70726f7068696c6961000000000000000000000000000000000000000008636f70756c617465000000000000000000000000000000000000000000000008636f726e686f6c65000000000000000000000000000000000000000000000003636f7800000000000000000000000000000000000000000000000000000000046372617000000000000000000000000000000000000000000000000000000008637265616d70696500000000000000000000000000000000000000000000000663726f746368000000000000000000000000000000000000000000000000000363756d000000000000000000000000000000000000000000000000000000000963756d627562626c65000000000000000000000000000000000000000000000b63756d64756d707374657200000000000000000000000000000000000000000a63756d67757a7a6c65720000000000000000000000000000000000000000000963756d6a6f636b6579000000000000000000000000000000000000000000000663756d6d6572000000000000000000000000000000000000000000000000000763756d6d696e670000000000000000000000000000000000000000000000000463756d730000000000000000000000000000000000000000000000000000000763756d73686f740000000000000000000000000000000000000000000000000763756d736c75740000000000000000000000000000000000000000000000000763756d746172740000000000000000000000000000000000000000000000000a63756e696c696e6775730000000000000000000000000000000000000000000b63756e696c6c696e67757300000000000000000000000000000000000000000663756e6e6965000000000000000000000000000000000000000000000000000b63756e6e696c696e67757300000000000000000000000000000000000000000463756e740000000000000000000000000000000000000000000000000000000863756e746661636500000000000000000000000000000000000000000000000863756e74686f6c6500000000000000000000000000000000000000000000000863756e746c69636b00000000000000000000000000000000000000000000000a63756e746c69636b65720000000000000000000000000000000000000000000b63756e746c69636b696e6700000000000000000000000000000000000000000763756e747261670000000000000000000000000000000000000000000000000563756e74730000000000000000000000000000000000000000000000000000066379616c69730000000000000000000000000000000000000000000000000008637962657266756300000000000000000000000000000000000000000000000963796265726675636b000000000000000000000000000000000000000000000b63796265726675636b656400000000000000000000000000000000000000000b63796265726675636b657200000000000000000000000000000000000000000c63796265726675636b657273000000000000000000000000000000000000000c63796265726675636b696e67000000000000000000000000000000000000000863796265727365780000000000000000000000000000000000000000000000046431636b0000000000000000000000000000000000000000000000000000000664616d6d6974000000000000000000000000000000000000000000000000000464616d6e000000000000000000000000000000000000000000000000000000066461726b696500000000000000000000000000000000000000000000000000096461746520726170650000000000000000000000000000000000000000000008646174657261706500000000000000000000000000000000000000000000000b64656570207468726f617400000000000000000000000000000000000000000a646565707468726f61740000000000000000000000000000000000000000000c64656e64726f7068696c696100000000000000000000000000000000000000046469636b000000000000000000000000000000000000000000000000000000076469636b6261670000000000000000000000000000000000000000000000000a6469636b626561746572000000000000000000000000000000000000000000086469636b666163650000000000000000000000000000000000000000000000086469636b686561640000000000000000000000000000000000000000000000086469636b686f6c650000000000000000000000000000000000000000000000096469636b6a7569636500000000000000000000000000000000000000000000086469636b6d696c6b00000000000000000000000000000000000000000000000a6469636b6d6f6e676572000000000000000000000000000000000000000000086469636b736c617000000000000000000000000000000000000000000000000a6469636b7375636b6572000000000000000000000000000000000000000000076469636b7761640000000000000000000000000000000000000000000000000a6469636b77656173656c000000000000000000000000000000000000000000086469636b776565640000000000000000000000000000000000000000000000076469636b776f640000000000000000000000000000000000000000000000000464696b650000000000000000000000000000000000000000000000000000000564696c646f00000000000000000000000000000000000000000000000000000664696c646f73000000000000000000000000000000000000000000000000000d64696e676c65626572726965730000000000000000000000000000000000000b64696e676c65626572727900000000000000000000000000000000000000000464696e6b0000000000000000000000000000000000000000000000000000000564696e6b730000000000000000000000000000000000000000000000000000076469707368697400000000000000000000000000000000000000000000000005646972736100000000000000000000000000000000000000000000000000000d64697274792070696c6c6f77730000000000000000000000000000000000000d64697274792073616e6368657a00000000000000000000000000000000000004646c636b00000000000000000000000000000000000000000000000000000009646f67207374796c65000000000000000000000000000000000000000000000a646f672d6675636b65720000000000000000000000000000000000000000000c646f67676965207374796c65000000000000000000000000000000000000000b646f676769657374796c65000000000000000000000000000000000000000006646f6767696e0000000000000000000000000000000000000000000000000007646f6767696e670000000000000000000000000000000000000000000000000b646f676779207374796c6500000000000000000000000000000000000000000a646f6767797374796c6500000000000000000000000000000000000000000007646f6c636574740000000000000000000000000000000000000000000000000a646f6d696e6174696f6e0000000000000000000000000000000000000000000a646f6d696e617472697800000000000000000000000000000000000000000006646f6d6d6573000000000000000000000000000000000000000000000000000c646f6e6b65792070756e6368000000000000000000000000000000000000000c646f6e6b65797269626265720000000000000000000000000000000000000008646f6f6368626167000000000000000000000000000000000000000000000006646f6f6b69650000000000000000000000000000000000000000000000000005646f6f736800000000000000000000000000000000000000000000000000000b646f75626c6520646f6e67000000000000000000000000000000000000000012646f75626c652070656e6574726174696f6e0000000000000000000000000006646f756368650000000000000000000000000000000000000000000000000009646f756368656261670000000000000000000000000000000000000000000009647020616374696f6e00000000000000000000000000000000000000000000086472792068756d70000000000000000000000000000000000000000000000005647563686500000000000000000000000000000000000000000000000000000764756d626173730000000000000000000000000000000000000000000000000864756d627368697400000000000000000000000000000000000000000000000764756d7368697400000000000000000000000000000000000000000000000004647664610000000000000000000000000000000000000000000000000000000464796b650000000000000000000000000000000000000000000000000000000a656174206d7920617373000000000000000000000000000000000000000000056563636869000000000000000000000000000000000000000000000000000009656a6163756c617465000000000000000000000000000000000000000000000a656a6163756c617465640000000000000000000000000000000000000000000a656a6163756c617465730000000000000000000000000000000000000000000b656a6163756c6174696e6700000000000000000000000000000000000000000c656a6163756c6174696e6773000000000000000000000000000000000000000b656a6163756c6174696f6e000000000000000000000000000000000000000009656a616b756c61746500000000000000000000000000000000000000000000086572656374696f6e00000000000000000000000000000000000000000000000665726f746963000000000000000000000000000000000000000000000000000765726f7469736d000000000000000000000000000000000000000000000000066573636f7274000000000000000000000000000000000000000000000000000665756e756368000000000000000000000000000000000000000000000000000965786372656d656e7400000000000000000000000000000000000000000000076620752063206b0000000000000000000000000000000000000000000000000b6620752063206b20652072000000000000000000000000000000000000000007665f755f635f6b0000000000000000000000000000000000000000000000000566346e6e7900000000000000000000000000000000000000000000000000000366616700000000000000000000000000000000000000000000000000000000066661676261670000000000000000000000000000000000000000000000000004666167670000000000000000000000000000000000000000000000000000000766616767696e670000000000000000000000000000000000000000000000000666616767697400000000000000000000000000000000000000000000000000076661676769747400000000000000000000000000000000000000000000000006666167676f74000000000000000000000000000000000000000000000000000566616767730000000000000000000000000000000000000000000000000000056661676f740000000000000000000000000000000000000000000000000000066661676f747300000000000000000000000000000000000000000000000000046661677300000000000000000000000000000000000000000000000000000007666167746172640000000000000000000000000000000000000000000000000566616e6e7900000000000000000000000000000000000000000000000000000a66616e6e79666c6170730000000000000000000000000000000000000000000b66616e6e796675636b657200000000000000000000000000000000000000000566616e79790000000000000000000000000000000000000000000000000000046661727400000000000000000000000000000000000000000000000000000006666172746564000000000000000000000000000000000000000000000000000766617274696e6700000000000000000000000000000000000000000000000005666172747900000000000000000000000000000000000000000000000000000666617461737300000000000000000000000000000000000000000000000000046663756b000000000000000000000000000000000000000000000000000000066663756b657200000000000000000000000000000000000000000000000000076663756b696e6700000000000000000000000000000000000000000000000005666563616c00000000000000000000000000000000000000000000000000000566656365730000000000000000000000000000000000000000000000000000046665636b000000000000000000000000000000000000000000000000000000066665636b6572000000000000000000000000000000000000000000000000000766656c6174696f0000000000000000000000000000000000000000000000000566656c636800000000000000000000000000000000000000000000000000000866656c6368696e6700000000000000000000000000000000000000000000000766656c6c6174650000000000000000000000000000000000000000000000000866656c6c6174696f00000000000000000000000000000000000000000000000666656c746368000000000000000000000000000000000000000000000000001066656d616c6520737175697274696e670000000000000000000000000000000666656d646f6d000000000000000000000000000000000000000000000000000766696767696e670000000000000000000000000000000000000000000000000a66696e67657262616e670000000000000000000000000000000000000000000a66696e6765726675636b0000000000000000000000000000000000000000000c66696e6765726675636b6564000000000000000000000000000000000000000c66696e6765726675636b6572000000000000000000000000000000000000000d66696e6765726675636b6572730000000000000000000000000000000000000d66696e6765726675636b696e670000000000000000000000000000000000000b66696e6765726675636b7300000000000000000000000000000000000000000966696e676572696e670000000000000000000000000000000000000000000008666973746675636b00000000000000000000000000000000000000000000000a666973746675636b65640000000000000000000000000000000000000000000a666973746675636b65720000000000000000000000000000000000000000000b666973746675636b65727300000000000000000000000000000000000000000b666973746675636b696e6700000000000000000000000000000000000000000c666973746675636b696e67730000000000000000000000000000000000000009666973746675636b73000000000000000000000000000000000000000000000766697374696e6700000000000000000000000000000000000000000000000006666c616d65720000000000000000000000000000000000000000000000000006666c616e67650000000000000000000000000000000000000000000000000004666f6f6b00000000000000000000000000000000000000000000000000000006666f6f6b6572000000000000000000000000000000000000000000000000000b666f6f7420666574697368000000000000000000000000000000000000000007666f6f746a6f620000000000000000000000000000000000000000000000000a666f6f746c69636b65720000000000000000000000000000000000000000000866726f7474696e670000000000000000000000000000000000000000000000046675636b0000000000000000000000000000000000000000000000000000000c6675636b20627574746f6e7300000000000000000000000000000000000000056675636b610000000000000000000000000000000000000000000000000000066675636b656400000000000000000000000000000000000000000000000000066675636b657200000000000000000000000000000000000000000000000000076675636b657273000000000000000000000000000000000000000000000000086675636b686561640000000000000000000000000000000000000000000000096675636b686561647300000000000000000000000000000000000000000000066675636b696e00000000000000000000000000000000000000000000000000076675636b696e67000000000000000000000000000000000000000000000000086675636b696e67730000000000000000000000000000000000000000000000176675636b696e67736869746d6f746865726675636b65720000000000000000066675636b6d6500000000000000000000000000000000000000000000000000056675636b730000000000000000000000000000000000000000000000000000096675636b746172647300000000000000000000000000000000000000000000086675636b776869740000000000000000000000000000000000000000000000076675636b7769740000000000000000000000000000000000000000000000000c6675646765207061636b6572000000000000000000000000000000000000000b66756467657061636b657200000000000000000000000000000000000000000366756b000000000000000000000000000000000000000000000000000000000566756b657200000000000000000000000000000000000000000000000000000666756b6b6572000000000000000000000000000000000000000000000000000666756b6b696e000000000000000000000000000000000000000000000000000466756b730000000000000000000000000000000000000000000000000000000766756b776869740000000000000000000000000000000000000000000000000666756b7769740000000000000000000000000000000000000000000000000008667574616e61726900000000000000000000000000000000000000000000000366757800000000000000000000000000000000000000000000000000000000056675783072000000000000000000000000000000000000000000000000000006672d73706f74000000000000000000000000000000000000000000000000000967616e672062616e67000000000000000000000000000000000000000000000867616e6762616e6700000000000000000000000000000000000000000000000a67616e6762616e6765640000000000000000000000000000000000000000000967616e6762616e67730000000000000000000000000000000000000000000003676179000000000000000000000000000000000000000000000000000000000767617920736578000000000000000000000000000000000000000000000000066761796173730000000000000000000000000000000000000000000000000006676179626f620000000000000000000000000000000000000000000000000005676179646f0000000000000000000000000000000000000000000000000000076761796c6f72640000000000000000000000000000000000000000000000000667617973657800000000000000000000000000000000000000000000000000076761797461726400000000000000000000000000000000000000000000000006676179776164000000000000000000000000000000000000000000000000000767656e6974616c0000000000000000000000000000000000000000000000000867656e6974616c7300000000000000000000000000000000000000000000000a6769616e7420636f636b000000000000000000000000000000000000000000066769676f6c6f00000000000000000000000000000000000000000000000000076769726c206f6e0000000000000000000000000000000000000000000000000b6769726c206f6e20746f7000000000000000000000000000000000000000000f6769726c7320676f6e652077696c640000000000000000000000000000000006676f617463780000000000000000000000000000000000000000000000000006676f617473650000000000000000000000000000000000000000000000000008676f642064616d6e000000000000000000000000000000000000000000000007676f642d64616d0000000000000000000000000000000000000000000000000a676f642d64616d6e656400000000000000000000000000000000000000000007676f6464616d6e00000000000000000000000000000000000000000000000009676f6464616d6e65640000000000000000000000000000000000000000000006676f6b6b756e000000000000000000000000000000000000000000000000000d676f6c64656e2073686f77657200000000000000000000000000000000000009676f6e6f72726865610000000000000000000000000000000000000000000008676f6f206769726c000000000000000000000000000000000000000000000005676f6f6368000000000000000000000000000000000000000000000000000008676f6f64706f6f70000000000000000000000000000000000000000000000004676f6f6b00000000000000000000000000000000000000000000000000000008676f72656761736d0000000000000000000000000000000000000000000000066772696e676f000000000000000000000000000000000000000000000000000567726f706500000000000000000000000000000000000000000000000000000967726f7570207365780000000000000000000000000000000000000000000005677569646f0000000000000000000000000000000000000000000000000000046775726f0000000000000000000000000000000000000000000000000000000868616e64206a6f6200000000000000000000000000000000000000000000000768616e646a6f62000000000000000000000000000000000000000000000000096861726420636f7265000000000000000000000000000000000000000000000868617264636f726500000000000000000000000000000000000000000000000b68617264636f7265736578000000000000000000000000000000000000000004686565620000000000000000000000000000000000000000000000000000000468656c6c0000000000000000000000000000000000000000000000000000000668656e74616900000000000000000000000000000000000000000000000000066865727065730000000000000000000000000000000000000000000000000005686573686500000000000000000000000000000000000000000000000000000c68657465726f73657875616c00000000000000000000000000000000000000066869746c65720000000000000000000000000000000000000000000000000002686f000000000000000000000000000000000000000000000000000000000004686f617200000000000000000000000000000000000000000000000000000005686f617265000000000000000000000000000000000000000000000000000003686f650000000000000000000000000000000000000000000000000000000004686f657200000000000000000000000000000000000000000000000000000004686f6d6f0000000000000000000000000000000000000000000000000000000a686f6d6f65726f7469630000000000000000000000000000000000000000000a686f6d6f73657875616c00000000000000000000000000000000000000000006686f6e6b65790000000000000000000000000000000000000000000000000005686f6e6b79000000000000000000000000000000000000000000000000000006686f6f6b65720000000000000000000000000000000000000000000000000004686f726500000000000000000000000000000000000000000000000000000008686f726e69657374000000000000000000000000000000000000000000000005686f726e79000000000000000000000000000000000000000000000000000007686f73656a6f6200000000000000000000000000000000000000000000000008686f74206361726c000000000000000000000000000000000000000000000009686f7420636869636b0000000000000000000000000000000000000000000006686f74736578000000000000000000000000000000000000000000000000000b686f7720746f206b696c6c00000000000000000000000000000000000000000d686f7720746f206d757264657200000000000000000000000000000000000008687567652066617400000000000000000000000000000000000000000000000768756d70696e67000000000000000000000000000000000000000000000000056964696f74000000000000000000000000000000000000000000000000000006696e63657374000000000000000000000000000000000000000000000000000b696e746572636f7572736500000000000000000000000000000000000000000b696e74657272616369616c0000000000000000000000000000000000000000086a61636b206f66660000000000000000000000000000000000000000000000086a61636b2d6f66660000000000000000000000000000000000000000000000076a61636b617373000000000000000000000000000000000000000000000000076a61636b6f6666000000000000000000000000000000000000000000000000096a61696c206261697400000000000000000000000000000000000000000000086a61696c626169740000000000000000000000000000000000000000000000036a6170000000000000000000000000000000000000000000000000000000000b6a656c6c7920646f6e75740000000000000000000000000000000000000000086a65726b206f66660000000000000000000000000000000000000000000000086a65726b2d6f66660000000000000000000000000000000000000000000000076a65726b6f6666000000000000000000000000000000000000000000000000056a657375730000000000000000000000000000000000000000000000000000066a657769736800000000000000000000000000000000000000000000000000076a696761626f6f000000000000000000000000000000000000000000000000086a69676761626f6f0000000000000000000000000000000000000000000000096a6967676572626f6f00000000000000000000000000000000000000000000046a69736d000000000000000000000000000000000000000000000000000000036a697a00000000000000000000000000000000000000000000000000000000046a697a6d000000000000000000000000000000000000000000000000000000046a697a7a000000000000000000000000000000000000000000000000000000056a756767730000000000000000000000000000000000000000000000000000046b61776b000000000000000000000000000000000000000000000000000000046b696b65000000000000000000000000000000000000000000000000000000076b696e62616b75000000000000000000000000000000000000000000000000086b696e6b737465720000000000000000000000000000000000000000000000056b696e6b790000000000000000000000000000000000000000000000000000056b69756e740000000000000000000000000000000000000000000000000000046b6e6f62000000000000000000000000000000000000000000000000000000086b6e6f6262696e670000000000000000000000000000000000000000000000076b6e6f62656164000000000000000000000000000000000000000000000000066b6e6f62656400000000000000000000000000000000000000000000000000076b6e6f62656e64000000000000000000000000000000000000000000000000086b6e6f62686561640000000000000000000000000000000000000000000000096b6e6f626a6f636b7900000000000000000000000000000000000000000000096b6e6f626a6f6b657900000000000000000000000000000000000000000000046b6f636b000000000000000000000000000000000000000000000000000000066b6f6e64756d00000000000000000000000000000000000000000000000000076b6f6e64756d73000000000000000000000000000000000000000000000000056b6f6f63680000000000000000000000000000000000000000000000000000066b6f6f74636800000000000000000000000000000000000000000000000000036b756d00000000000000000000000000000000000000000000000000000000056b756d65720000000000000000000000000000000000000000000000000000066b756d6d657200000000000000000000000000000000000000000000000000076b756d6d696e67000000000000000000000000000000000000000000000000046b756d730000000000000000000000000000000000000000000000000000000a6b756e696c696e677573000000000000000000000000000000000000000000046b756e74000000000000000000000000000000000000000000000000000000046b796b65000000000000000000000000000000000000000000000000000000066c33692b636800000000000000000000000000000000000000000000000000066c336974636800000000000000000000000000000000000000000000000000056c616269610000000000000000000000000000000000000000000000000000116c65617468657220726573747261696e740000000000000000000000000000176c656174686572207374726169676874206a61636b657400000000000000000b6c656d6f6e2070617274790000000000000000000000000000000000000000076c65736269616e000000000000000000000000000000000000000000000000056c6573626f0000000000000000000000000000000000000000000000000000066c657a7a696500000000000000000000000000000000000000000000000000066c696269646f00000000000000000000000000000000000000000000000000056c6d66616f0000000000000000000000000000000000000000000000000000066c6f6c697461000000000000000000000000000000000000000000000000000a6c6f76656d616b696e67000000000000000000000000000000000000000000046c757374000000000000000000000000000000000000000000000000000000076c757374696e67000000000000000000000000000000000000000000000000046d306630000000000000000000000000000000000000000000000000000000046d30666f0000000000000000000000000000000000000000000000000000000a6d343574657262617465000000000000000000000000000000000000000000086d6135746572623800000000000000000000000000000000000000000000000a6d6135746572626174650000000000000000000000000000000000000000000c6d616b65206d6520636f6d65000000000000000000000000000000000000000e6d616c6520737175697274696e670000000000000000000000000000000000096d6172696a75616e6100000000000000000000000000000000000000000000096d61736f6368697374000000000000000000000000000000000000000000000b6d61737465722d626174650000000000000000000000000000000000000000086d6173746572623800000000000000000000000000000000000000000000000a6d61737465726261742a0000000000000000000000000000000000000000000a6d6173746572626174330000000000000000000000000000000000000000000a6d6173746572626174650000000000000000000000000000000000000000000c6d6173746572626174696f6e000000000000000000000000000000000000000d6d6173746572626174696f6e730000000000000000000000000000000000000a6d6173747572626174650000000000000000000000000000000000000000000a6d6561746265617465720000000000000000000000000000000000000000000e6d656e61676520612074726f69730000000000000000000000000000000000046d696c66000000000000000000000000000000000000000000000000000000056d696e67650000000000000000000000000000000000000000000000000000136d697373696f6e61727920706f736974696f6e000000000000000000000000056d6f2d666f0000000000000000000000000000000000000000000000000000046d6f6630000000000000000000000000000000000000000000000000000000046d6f666f000000000000000000000000000000000000000000000000000000086d6f6c65737465720000000000000000000000000000000000000000000000096d6f6e676f6c6f696400000000000000000000000000000000000000000000066d6f726d6f6e00000000000000000000000000000000000000000000000000056d6f726f6e0000000000000000000000000000000000000000000000000000096d6f7468616675636b000000000000000000000000000000000000000000000a6d6f7468616675636b610000000000000000000000000000000000000000000b6d6f7468616675636b617300000000000000000000000000000000000000000b6d6f7468616675636b617a00000000000000000000000000000000000000000b6d6f7468616675636b656400000000000000000000000000000000000000000b6d6f7468616675636b657200000000000000000000000000000000000000000c6d6f7468616675636b657273000000000000000000000000000000000000000b6d6f7468616675636b696e00000000000000000000000000000000000000000c6d6f7468616675636b696e67000000000000000000000000000000000000000d6d6f7468616675636b696e67730000000000000000000000000000000000000a6d6f7468616675636b730000000000000000000000000000000000000000000d6d6f74686572206675636b65720000000000000000000000000000000000000a6d6f746865726675636b0000000000000000000000000000000000000000000c6d6f746865726675636b6564000000000000000000000000000000000000000c6d6f746865726675636b6572000000000000000000000000000000000000000d6d6f746865726675636b6572730000000000000000000000000000000000000c6d6f746865726675636b696e000000000000000000000000000000000000000d6d6f746865726675636b696e670000000000000000000000000000000000000e6d6f746865726675636b696e677300000000000000000000000000000000000c6d6f746865726675636b6b61000000000000000000000000000000000000000b6d6f746865726675636b7300000000000000000000000000000000000000000e6d6f756e64206f662076656e75730000000000000000000000000000000000086d722068616e64730000000000000000000000000000000000000000000000046d7566660000000000000000000000000000000000000000000000000000000a6d756666206469766572000000000000000000000000000000000000000000096d7566666469766572000000000000000000000000000000000000000000000a6d756666646976696e67000000000000000000000000000000000000000000066d75736c696d00000000000000000000000000000000000000000000000000056d7574686100000000000000000000000000000000000000000000000000000b6d757468616665636b657200000000000000000000000000000000000000000c6d757468616675636b6b657200000000000000000000000000000000000000066d7574686572000000000000000000000000000000000000000000000000000c6d75746865726675636b657200000000000000000000000000000000000000056e316767610000000000000000000000000000000000000000000000000000066e316767657200000000000000000000000000000000000000000000000000066e616d626c6100000000000000000000000000000000000000000000000000076e617761736869000000000000000000000000000000000000000000000000046e617a69000000000000000000000000000000000000000000000000000000056e6567726f0000000000000000000000000000000000000000000000000000076e656f6e617a69000000000000000000000000000000000000000000000000076e6967206e6f67000000000000000000000000000000000000000000000000066e696767337200000000000000000000000000000000000000000000000000066e696767346800000000000000000000000000000000000000000000000000056e696767610000000000000000000000000000000000000000000000000000066e696767616800000000000000000000000000000000000000000000000000066e696767617300000000000000000000000000000000000000000000000000066e696767617a00000000000000000000000000000000000000000000000000066e696767657200000000000000000000000000000000000000000000000000076e696767657273000000000000000000000000000000000000000000000000066e69676c6574000000000000000000000000000000000000000000000000000b6e696d70686f6d616e69610000000000000000000000000000000000000000066e6970706c6500000000000000000000000000000000000000000000000000076e6970706c6573000000000000000000000000000000000000000000000000036e6f6200000000000000000000000000000000000000000000000000000000096e6f62206a6f6b657900000000000000000000000000000000000000000000076e6f6268656164000000000000000000000000000000000000000000000000086e6f626a6f636b790000000000000000000000000000000000000000000000086e6f626a6f6b657900000000000000000000000000000000000000000000000b6e73667720696d616765730000000000000000000000000000000000000000046e756465000000000000000000000000000000000000000000000000000000066e756469747900000000000000000000000000000000000000000000000000086e756d626e7574730000000000000000000000000000000000000000000000076e75747361636b000000000000000000000000000000000000000000000000066e796d70686f000000000000000000000000000000000000000000000000000b6e796d70686f6d616e69610000000000000000000000000000000000000000096f63746f707573737900000000000000000000000000000000000000000000086f6d6f72617368690000000000000000000000000000000000000000000000116f6e65206375702074776f206769726c7300000000000000000000000000000f6f6e6520677579206f6e65206a617200000000000000000000000000000000076f72676173696d000000000000000000000000000000000000000000000000086f72676173696d730000000000000000000000000000000000000000000000066f726761736d00000000000000000000000000000000000000000000000000076f726761736d73000000000000000000000000000000000000000000000000046f726779000000000000000000000000000000000000000000000000000000047030726e0000000000000000000000000000000000000000000000000000000a706165646f7068696c650000000000000000000000000000000000000000000470616b690000000000000000000000000000000000000000000000000000000770616e6f6f63680000000000000000000000000000000000000000000000000770616e746965730000000000000000000000000000000000000000000000000570616e74790000000000000000000000000000000000000000000000000000047061776e000000000000000000000000000000000000000000000000000000067065636b6572000000000000000000000000000000000000000000000000000a7065636b657268656164000000000000000000000000000000000000000000087065646f626561720000000000000000000000000000000000000000000000097065646f7068696c650000000000000000000000000000000000000000000007706565686f6c650000000000000000000000000000000000000000000000000770656767696e670000000000000000000000000000000000000000000000000570656e697300000000000000000000000000000000000000000000000000000b70656e69736675636b657200000000000000000000000000000000000000000970686f6e6520736578000000000000000000000000000000000000000000000870686f6e65736578000000000000000000000000000000000000000000000005706875636b0000000000000000000000000000000000000000000000000000047068756b000000000000000000000000000000000000000000000000000000067068756b656400000000000000000000000000000000000000000000000000077068756b696e67000000000000000000000000000000000000000000000000077068756b6b6564000000000000000000000000000000000000000000000000087068756b6b696e670000000000000000000000000000000000000000000000057068756b73000000000000000000000000000000000000000000000000000004706875710000000000000000000000000000000000000000000000000000000d7069656365206f662073686974000000000000000000000000000000000000097069676675636b6572000000000000000000000000000000000000000000000670696d706973000000000000000000000000000000000000000000000000000370697300000000000000000000000000000000000000000000000000000000057069736573000000000000000000000000000000000000000000000000000005706973696e000000000000000000000000000000000000000000000000000006706973696e6700000000000000000000000000000000000000000000000000057069736f6600000000000000000000000000000000000000000000000000000470697373000000000000000000000000000000000000000000000000000000087069737320706967000000000000000000000000000000000000000000000006706973736564000000000000000000000000000000000000000000000000000670697373657200000000000000000000000000000000000000000000000000077069737365727300000000000000000000000000000000000000000000000006706973736573000000000000000000000000000000000000000000000000000870697373666c617000000000000000000000000000000000000000000000000970697373666c617073000000000000000000000000000000000000000000000670697373696e000000000000000000000000000000000000000000000000000770697373696e6700000000000000000000000000000000000000000000000007706973736f6666000000000000000000000000000000000000000000000000077069737370696700000000000000000000000000000000000000000000000007706c6179626f790000000000000000000000000000000000000000000000000e706c65617375726520636865737400000000000000000000000000000000000b706f6c6520736d6f6b657200000000000000000000000000000000000000000a706f6c65736d6f6b657200000000000000000000000000000000000000000007706f6c6c6f636b00000000000000000000000000000000000000000000000008706f6e79706c6179000000000000000000000000000000000000000000000003706f6f0000000000000000000000000000000000000000000000000000000004706f6f6600000000000000000000000000000000000000000000000000000004706f6f6e00000000000000000000000000000000000000000000000000000007706f6f6e616e6900000000000000000000000000000000000000000000000007706f6f6e616e7900000000000000000000000000000000000000000000000008706f6f6e74616e67000000000000000000000000000000000000000000000004706f6f700000000000000000000000000000000000000000000000000000000a706f6f7020636875746500000000000000000000000000000000000000000009706f6f7063687574650000000000000000000000000000000000000000000004706f726e00000000000000000000000000000000000000000000000000000005706f726e6f00000000000000000000000000000000000000000000000000000b706f726e6f677261706879000000000000000000000000000000000000000006706f726e6f730000000000000000000000000000000000000000000000000005707269636b000000000000000000000000000000000000000000000000000006707269636b7300000000000000000000000000000000000000000000000000167072696e636520616c62657274207069657263696e670000000000000000000470726f6e0000000000000000000000000000000000000000000000000000000a70726f7374697475746500000000000000000000000000000000000000000004707468630000000000000000000000000000000000000000000000000000000470756265000000000000000000000000000000000000000000000000000000057075626573000000000000000000000000000000000000000000000000000005707562696300000000000000000000000000000000000000000000000000000770756e616e6e790000000000000000000000000000000000000000000000000670756e616e79000000000000000000000000000000000000000000000000000570756e74610000000000000000000000000000000000000000000000000000067075736965730000000000000000000000000000000000000000000000000005707573736500000000000000000000000000000000000000000000000000000570757373690000000000000000000000000000000000000000000000000000077075737369657300000000000000000000000000000000000000000000000005707573737900000000000000000000000000000000000000000000000000000c70757373796c69636b696e670000000000000000000000000000000000000006707573737973000000000000000000000000000000000000000000000000000470757379000000000000000000000000000000000000000000000000000000047075746f0000000000000000000000000000000000000000000000000000000571756561660000000000000000000000000000000000000000000000000000057175656566000000000000000000000000000000000000000000000000000005717565657200000000000000000000000000000000000000000000000000000971756565726261697400000000000000000000000000000000000000000000097175656572686f6c6500000000000000000000000000000000000000000000047175696d000000000000000000000000000000000000000000000000000000067261636973740000000000000000000000000000000000000000000000000007726167686561640000000000000000000000000000000000000000000000000c726167696e6720626f6e657200000000000000000000000000000000000000047261706500000000000000000000000000000000000000000000000000000006726170696e670000000000000000000000000000000000000000000000000006726170697374000000000000000000000000000000000000000000000000000672656374756d000000000000000000000000000000000000000000000000000572656e6f62000000000000000000000000000000000000000000000000000006726574617264000000000000000000000000000000000000000000000000000f7265766572736520636f776769726c000000000000000000000000000000000672696d6a6177000000000000000000000000000000000000000000000000000672696d6a6f62000000000000000000000000000000000000000000000000000772696d6d696e6700000000000000000000000000000000000000000000000009726f73792070616c6d000000000000000000000000000000000000000000001b726f73792070616c6d20616e64206865722035207369737465727300000000057275736b6900000000000000000000000000000000000000000000000000000e72757374792074726f6d626f6e650000000000000000000000000000000000057320686974000000000000000000000000000000000000000000000000000007735f685f695f7400000000000000000000000000000000000000000000000006732e6f2e622e000000000000000000000000000000000000000000000000000373266d000000000000000000000000000000000000000000000000000000000673616469736d0000000000000000000000000000000000000000000000000006736164697374000000000000000000000000000000000000000000000000000873616e746f72756d00000000000000000000000000000000000000000000000473636174000000000000000000000000000000000000000000000000000000077363686c6f6e670000000000000000000000000000000000000000000000000a73636973736f72696e67000000000000000000000000000000000000000000087363726577696e670000000000000000000000000000000000000000000000067363726f617400000000000000000000000000000000000000000000000000067363726f746500000000000000000000000000000000000000000000000000077363726f74756d000000000000000000000000000000000000000000000000077363756d6261670000000000000000000000000000000000000000000000000573656d656e00000000000000000000000000000000000000000000000000000373657800000000000000000000000000000000000000000000000000000000047365786f0000000000000000000000000000000000000000000000000000000473657879000000000000000000000000000000000000000000000000000000047368212b0000000000000000000000000000000000000000000000000000000473682174000000000000000000000000000000000000000000000000000000047368317400000000000000000000000000000000000000000000000000000004736861670000000000000000000000000000000000000000000000000000000773686167676572000000000000000000000000000000000000000000000000077368616767696e000000000000000000000000000000000000000000000000087368616767696e6700000000000000000000000000000000000000000000000d736861766564206265617665720000000000000000000000000000000000000c73686176656420707573737900000000000000000000000000000000000000077368656d616c65000000000000000000000000000000000000000000000000047368692b0000000000000000000000000000000000000000000000000000000773686962617269000000000000000000000000000000000000000000000000047368697400000000000000000000000000000000000000000000000000000008736869742d617373000000000000000000000000000000000000000000000008736869742d62616700000000000000000000000000000000000000000000000b736869742d62616767657200000000000000000000000000000000000000000a736869742d627261696e0000000000000000000000000000000000000000000b736869742d627265617468000000000000000000000000000000000000000009736869742d63756e740000000000000000000000000000000000000000000009736869742d6469636b000000000000000000000000000000000000000000000b736869742d656174696e67000000000000000000000000000000000000000009736869742d66616365000000000000000000000000000000000000000000000a736869742d666163656400000000000000000000000000000000000000000008736869742d666974000000000000000000000000000000000000000000000009736869742d686561640000000000000000000000000000000000000000000009736869742d6865656c0000000000000000000000000000000000000000000009736869742d686f6c65000000000000000000000000000000000000000000000a736869742d686f75736500000000000000000000000000000000000000000009736869742d6c6f61640000000000000000000000000000000000000000000008736869742d706f7400000000000000000000000000000000000000000000000c736869742d73706974746572000000000000000000000000000000000000000a736869742d737461696e000000000000000000000000000000000000000000077368697461737300000000000000000000000000000000000000000000000007736869746261670000000000000000000000000000000000000000000000000a736869746261676765720000000000000000000000000000000000000000000973686974626c696d70000000000000000000000000000000000000000000000973686974627261696e000000000000000000000000000000000000000000000a73686974627265617468000000000000000000000000000000000000000000087368697463756e74000000000000000000000000000000000000000000000008736869746469636b000000000000000000000000000000000000000000000005736869746500000000000000000000000000000000000000000000000000000a73686974656174696e670000000000000000000000000000000000000000000673686974656400000000000000000000000000000000000000000000000000067368697465790000000000000000000000000000000000000000000000000008736869746661636500000000000000000000000000000000000000000000000973686974666163656400000000000000000000000000000000000000000000077368697466697400000000000000000000000000000000000000000000000008736869746675636b0000000000000000000000000000000000000000000000087368697466756c6c0000000000000000000000000000000000000000000000087368697468656164000000000000000000000000000000000000000000000008736869746865656c00000000000000000000000000000000000000000000000873686974686f6c6500000000000000000000000000000000000000000000000973686974686f757365000000000000000000000000000000000000000000000773686974696e670000000000000000000000000000000000000000000000000873686974696e6773000000000000000000000000000000000000000000000008736869746c6f616400000000000000000000000000000000000000000000000773686974706f7400000000000000000000000000000000000000000000000005736869747300000000000000000000000000000000000000000000000000000b736869747370697474657200000000000000000000000000000000000000000973686974737461696e000000000000000000000000000000000000000000000773686974746564000000000000000000000000000000000000000000000000077368697474657200000000000000000000000000000000000000000000000008736869747465727300000000000000000000000000000000000000000000000973686974746965737400000000000000000000000000000000000000000000087368697474696e670000000000000000000000000000000000000000000000097368697474696e67730000000000000000000000000000000000000000000006736869747479000000000000000000000000000000000000000000000000000573686974790000000000000000000000000000000000000000000000000000047368697a000000000000000000000000000000000000000000000000000000077368697a6e69740000000000000000000000000000000000000000000000000573686f7461000000000000000000000000000000000000000000000000000009736872696d70696e670000000000000000000000000000000000000000000005736b616e6b000000000000000000000000000000000000000000000000000005736b656574000000000000000000000000000000000000000000000000000008736c616e74657965000000000000000000000000000000000000000000000004736c757400000000000000000000000000000000000000000000000000000007736c757462616700000000000000000000000000000000000000000000000005736c757473000000000000000000000000000000000000000000000000000004736d656700000000000000000000000000000000000000000000000000000006736d65676d610000000000000000000000000000000000000000000000000004736d757400000000000000000000000000000000000000000000000000000006736e61746368000000000000000000000000000000000000000000000000000b736e6f7762616c6c696e67000000000000000000000000000000000000000008736f646f6d697a65000000000000000000000000000000000000000000000006736f646f6d79000000000000000000000000000000000000000000000000000e736f6e2d6f662d612d62697463680000000000000000000000000000000000047370616300000000000000000000000000000000000000000000000000000005737065726d0000000000000000000000000000000000000000000000000000047370696300000000000000000000000000000000000000000000000000000005737069636b00000000000000000000000000000000000000000000000000000773706c6f6f67650000000000000000000000000000000000000000000000000d73706c6f6f6765206d6f6f73650000000000000000000000000000000000000673706f6f6765000000000000000000000000000000000000000000000000000b737072656164206c6567730000000000000000000000000000000000000000057370756e6b0000000000000000000000000000000000000000000000000000087374726170206f6e00000000000000000000000000000000000000000000000773747261706f6e0000000000000000000000000000000000000000000000000973747261707061646f000000000000000000000000000000000000000000000a737472697020636c756200000000000000000000000000000000000000000006737475706964000000000000000000000000000000000000000000000000000b7374796c6520646f6767790000000000000000000000000000000000000000047375636b000000000000000000000000000000000000000000000000000000057375636b73000000000000000000000000000000000000000000000000000007737569636964650000000000000000000000000000000000000000000000000d73756963696465206769726c730000000000000000000000000000000000000c73756c74727920776f6d656e00000000000000000000000000000000000000087377617374696b610000000000000000000000000000000000000000000000077377696e6765720000000000000000000000000000000000000000000000000873797068696c69730000000000000000000000000000000000000000000000077431747431653500000000000000000000000000000000000000000000000007743174746965730000000000000000000000000000000000000000000000000c7461696e746564206c6f7665000000000000000000000000000000000000000474617264000000000000000000000000000000000000000000000000000000087461737465206d7900000000000000000000000000000000000000000000000b7465612062616767696e6700000000000000000000000000000000000000000574656574730000000000000000000000000000000000000000000000000000047465657a00000000000000000000000000000000000000000000000000000008746573746963616c0000000000000000000000000000000000000000000000087465737469636c650000000000000000000000000000000000000000000000097465737469636c657300000000000000000000000000000000000000000000097468726565736f6d6500000000000000000000000000000000000000000000097468726f6174696e67000000000000000000000000000000000000000000000b7468756e64657263756e74000000000000000000000000000000000000000007746965642075700000000000000000000000000000000000000000000000000b746967687420776869746500000000000000000000000000000000000000000374697400000000000000000000000000000000000000000000000000000000077469746675636b0000000000000000000000000000000000000000000000000474697473000000000000000000000000000000000000000000000000000000047469747400000000000000000000000000000000000000000000000000000007746974746965350000000000000000000000000000000000000000000000000c7469747469656675636b657200000000000000000000000000000000000000077469747469657300000000000000000000000000000000000000000000000005746974747900000000000000000000000000000000000000000000000000000974697474796675636b0000000000000000000000000000000000000000000009746974747977616e6b000000000000000000000000000000000000000000000774697477616e6b0000000000000000000000000000000000000000000000000b746f6e67756520696e2061000000000000000000000000000000000000000007746f706c65737300000000000000000000000000000000000000000000000006746f737365720000000000000000000000000000000000000000000000000009746f77656c6865616400000000000000000000000000000000000000000000067472616e6e79000000000000000000000000000000000000000000000000000974726962616469736d0000000000000000000000000000000000000000000008747562206769726c0000000000000000000000000000000000000000000000077475626769726c0000000000000000000000000000000000000000000000000474757264000000000000000000000000000000000000000000000000000000057475736879000000000000000000000000000000000000000000000000000004747734740000000000000000000000000000000000000000000000000000000474776174000000000000000000000000000000000000000000000000000000087477617468656164000000000000000000000000000000000000000000000008747761746c69707300000000000000000000000000000000000000000000000674776174747900000000000000000000000000000000000000000000000000057477696e6b0000000000000000000000000000000000000000000000000000077477696e6b69650000000000000000000000000000000000000000000000001174776f206769726c73206f6e65206375700000000000000000000000000000057477756e740000000000000000000000000000000000000000000000000000077477756e7465720000000000000000000000000000000000000000000000000a756e6472657373696e67000000000000000000000000000000000000000000077570736b6972740000000000000000000000000000000000000000000000000c7572657468726120706c6179000000000000000000000000000000000000000975726f7068696c696100000000000000000000000000000000000000000000067631346772610000000000000000000000000000000000000000000000000005763167726100000000000000000000000000000000000000000000000000000676612d6a2d6a00000000000000000000000000000000000000000000000000037661670000000000000000000000000000000000000000000000000000000006766167696e61000000000000000000000000000000000000000000000000000b76656e7573206d6f756e6400000000000000000000000000000000000000000676696167726100000000000000000000000000000000000000000000000000087669627261746f7200000000000000000000000000000000000000000000000b76696f6c65742077616e64000000000000000000000000000000000000000007766a61796a61790000000000000000000000000000000000000000000000000c766f726172657068696c69610000000000000000000000000000000000000006766f79657572000000000000000000000000000000000000000000000000000576756c7661000000000000000000000000000000000000000000000000000005773030736500000000000000000000000000000000000000000000000000000477616e670000000000000000000000000000000000000000000000000000000477616e6b0000000000000000000000000000000000000000000000000000000677616e6b6572000000000000000000000000000000000000000000000000000577616e6b79000000000000000000000000000000000000000000000000000004776565640000000000000000000000000000000000000000000000000000000977657420647265616d00000000000000000000000000000000000000000000077765746261636b0000000000000000000000000000000000000000000000000b776869746520706f77657200000000000000000000000000000000000000000577686f617200000000000000000000000000000000000000000000000000000577686f726500000000000000000000000000000000000000000000000000000777696c6c6965730000000000000000000000000000000000000000000000000577696c6c7900000000000000000000000000000000000000000000000000000c7772617070696e67206d656e00000000000000000000000000000000000000117772696e6b6c656420737461726669736800000000000000000000000000000678726174656400000000000000000000000000000000000000000000000000027878000000000000000000000000000000000000000000000000000000000003787878000000000000000000000000000000000000000000000000000000000479616f690000000000000000000000000000000000000000000000000000000e79656c6c6f772073686f7765727300000000000000000000000000000000000579696666790000000000000000000000000000000000000000000000000000097a6f6f7068696c696100000000000000000000000000000000000000000000", + "nonce": "0x2c8f7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x553cace89d412b26cc92e89120c8c23086f3c5c9ff96f8b67c64ad0ac93535ac", + "transactionIndex": "0x0", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x39aa32", + "gasUsed": "0x39aa32", + "contractAddress": "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "logs": [ + { + "address": "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x553cace89d412b26cc92e89120c8c23086f3c5c9ff96f8b67c64ad0ac93535ac", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000008000000000000000000000000000000000000400000400000000000000000000000000000000000000000010000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x4c0a95", + "gasUsed": "0x126063", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000713139b9f92d4f2bc54832a47200b7b8c6718158" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x2", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x4", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b108038", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x5", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xf765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6d657461646174612d726e732e736b796d617669732e6f6e652f736169676f6e2f0000000000000000000000000000000000000000000000", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x6", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000076a700", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x7", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x8", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x9", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0xa", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0xb", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0xc", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x000008040000004000000000000004004000000000000000000000000000000080000000000000000000000020000000000000080000000000000000000400040000000000000000000000090090020000000000000c0000000004000000000200000000020000004000000000000800000000800000000000000010000000000000001000000000000000000000008000000000000080100000080000800000000000000000000000000000000400080000000000000000001000000020000000000022000000000400000000040000040000000400080100002000000060000000004000000000000000000400000000008400000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x2273c7150d065f5a4783077c76d3937b84af0d9844ea0f04c7783a3b4aaa9d58", + "transactionIndex": "0x2", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x6c2b21", + "gasUsed": "0x20208c", + "contractAddress": "0xCcD3837278C083027DeF4537b3e66343D940377F", + "logs": [ + { + "address": "0xCcD3837278C083027DeF4537b3e66343D940377F", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2273c7150d065f5a4783077c76d3937b84af0d9844ea0f04c7783a3b4aaa9d58", + "transactionIndex": "0x2", + "logIndex": "0xd", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x796204", + "gasUsed": "0xd36e3", + "contractAddress": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "logs": [ + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000ccd3837278c083027def4537b3e66343d940377f" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0xe", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0xf", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab7067182342" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000003e8", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x10", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x11", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x12", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x13", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x14", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000000000000000000000000400000000000000000000000000000000200000000000000000000002000000000000008000000000000000000000000000000800000000000000000000002000002010000080000000000000000000000000000020000000000000000000800000002800000000000000000000000000000008000000000000000000000000000000000010080000000000100800000000000000004000000000000000400080000000000008000001400000000000000000020000000000000000000040000000000000400000100000000000020000000000000000201000000000000000000000000000000000000000100000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x8be57891432f175fa98311e1e197921abe10650d036cdb3432ce1762287ec002", + "transactionIndex": "0x4", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x90b2f2", + "gasUsed": "0x1750ee", + "contractAddress": "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "logs": [ + { + "address": "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x8be57891432f175fa98311e1e197921abe10650d036cdb3432ce1762287ec002", + "transactionIndex": "0x4", + "logIndex": "0x15", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x9bebd6", + "gasUsed": "0xb38e4", + "contractAddress": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "logs": [ + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000af4a77bc41320bedf62d33ad278d76731eaabcf4" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x16", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x17", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0xaabf778cd749a472313a9476aa3b29565e69697c48eb0f82b52fc9f071fd3c95", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x18", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x19", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x1a", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000000000000400000000000400000000000000000000000000000000000000000000000000000002000000000000000000000000200000000000000000000000000000000000000000402000000000000080000000000000000000000000000020000000000000000010800000000800000000000000000200000000000000000000000000000400000000000000000000080000000000000800000000000000000000000000000000400080000000000000100001000000000000000000020000001000000000000040000000000000400000500000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x75907324b5eaccf7026a2c425bdcd52383335de33068c0124a53d0ab46ccfee1", + "transactionIndex": "0x6", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0xc23034", + "gasUsed": "0x26445e", + "contractAddress": "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "logs": [ + { + "address": "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x75907324b5eaccf7026a2c425bdcd52383335de33068c0124a53d0ab46ccfee1", + "transactionIndex": "0x6", + "logIndex": "0x1b", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0xd1d948", + "gasUsed": "0xfa914", + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "logs": [ + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000007ac1624287b0959d664cced3a01a51a440353b42" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x1c", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x1d", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x1e", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000005" + ], + "data": "0x00000000000000000000000000000000000000000000000000000024ea4122ae", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x1f", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000004" + ], + "data": "0x000000000000000000000000000000000000000000000000000002e24d16b5a8", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x20", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000003" + ], + "data": "0x000000000000000000000000000000000000000000000000000008a6e74420f9", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x21", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000005" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x22", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf073", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x00000000000000000000000000000000000000000000000000000000000005dc" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x23", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0xa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc64", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000076a700", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x24", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729", + "0x4cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x25", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x26", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x27", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x200800040000004040000000000000204000000000000000a0000000000000000200000000000008008000012000000000000000020000000080000000000000000010000000000000000000000002040002000000083000000000000000a0000800100002000000100000000000080000000080000000000200000000000000000000400000000000000000c000001000000800000080000000000000804000050000000000000020000000000400080400000000808000003200000000400000000020000000000000000000050000000000008400000100000000000020000000000000000001000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "transactionIndex": "0x8", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0xe3e2ee", + "gasUsed": "0x1209a6", + "contractAddress": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "logs": [ + { + "address": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "transactionIndex": "0x8", + "logIndex": "0x28", + "removed": false + }, + { + "address": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "transactionIndex": "0x8", + "logIndex": "0x29", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000010000000000000000000000000000000000000000000001000000080000000000000000000000000000020000000000000200000800000000000000000000000000000000400000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400080000000000080000000000000000000000000000000000000000000000040000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0xedcd32", + "gasUsed": "0x9ea44", + "contractAddress": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "logs": [ + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000049e2f4aa6edd7453a4d9c91cc8fb02fcba68d7ea" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "logIndex": "0x2a", + "removed": false + }, + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "logIndex": "0x2b", + "removed": false + }, + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "logIndex": "0x2c", + "removed": false + }, + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "logIndex": "0x2d", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400080000000000200800000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000000002000001000000080000000000000000000000000000020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000800000000001000000000000000000000400080000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000100000000000000008000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x68422a6b0ad97b5b1e0b22f5615edc36f1f9162aba8064402b52e15e445c2db3", + "transactionIndex": "0xa", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x113ad8e", + "gasUsed": "0x25e05c", + "contractAddress": "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "logs": [ + { + "address": "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x68422a6b0ad97b5b1e0b22f5615edc36f1f9162aba8064402b52e15e445c2db3", + "transactionIndex": "0xa", + "logIndex": "0x2e", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000002000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionIndex": "0xb", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x11ddcab", + "gasUsed": "0xa2f1d", + "contractAddress": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "logs": [ + { + "address": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000933cd2272831334f1e46977bcc36153c8027dee8" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionIndex": "0xb", + "logIndex": "0x2f", + "removed": false + }, + { + "address": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionIndex": "0xb", + "logIndex": "0x30", + "removed": false + }, + { + "address": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionIndex": "0xb", + "logIndex": "0x31", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000100000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000800000000000000000000000000000000000000004000000000000000000000000000080000000000000800000002000100000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xd8a479a76c31593e7feabb2f6b015593694ea059bdace9060b7376027824ceba", + "transactionIndex": "0xc", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x14732e4", + "gasUsed": "0x295639", + "contractAddress": "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "logs": [ + { + "address": "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xd8a479a76c31593e7feabb2f6b015593694ea059bdace9060b7376027824ceba", + "transactionIndex": "0xc", + "logIndex": "0x32", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000200000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x155be98", + "gasUsed": "0xe8bb4", + "contractAddress": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "logs": [ + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000942b2dc201bacf99fec1f877bdd30c394325f3cc" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x33", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x34", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x35", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0xa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x00000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x36", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x37", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x38", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x39", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x3a", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000800000080000000000000400000000000000000000000000000000000000000000000000000002000000000000000000000010000000000002000000000000002100008000000000002000000000002080000000000200000000000000000020008000000000000000800000000800000000000040000000000000000000000000000000000000000008000000000000080000000000000800000000000000000000000000000000400880000000000000000001000000000000000000020000000000000000000040000080000000400400100002000000020000000000000000000000000000000000000000402000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xfcafa09725cd7e3cb2cf509b49bceba0e18fa25a3748c222b6ffa84a66650ccb", + "transactionIndex": "0xe", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x15740b0", + "gasUsed": "0x18218", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357", + "0x000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xfcafa09725cd7e3cb2cf509b49bceba0e18fa25a3748c222b6ffa84a66650ccb", + "transactionIndex": "0xe", + "logIndex": "0x3b", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000804000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000080000000000000000000000001000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000200000000000000000000000000000000000000000000000000080000000000000000001000000000000000000002000000000000000000000000000000000000000100000000000000000000004000000000000000000400000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x6813cad5e382b91b0d75dd84fd880cdaa8a376843bcf2b4ec48897509c423361", + "transactionIndex": "0xf", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x158fd60", + "gasUsed": "0x1bcb0", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2", + "0x000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x6813cad5e382b91b0d75dd84fd880cdaa8a376843bcf2b4ec48897509c423361", + "transactionIndex": "0xf", + "logIndex": "0x3c", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000804000000000000000000000400000000000000000000000000000000000000000000008000000000002000000000000000000000000000000000000080000000000000000000000001000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800800000000000000000000200000000000000000000000000000000000000000000000000080000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000200000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xdfebf6d29b4938b30b806e3b4ce35efceb7375b00a497723a8dc89d1893c5abb", + "transactionIndex": "0x10", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x15a7f78", + "gasUsed": "0x18218", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357", + "0x000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa799", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xdfebf6d29b4938b30b806e3b4ce35efceb7375b00a497723a8dc89d1893c5abb", + "transactionIndex": "0x10", + "logIndex": "0x3d", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000804000000000000000000000400000000000000000000000000400000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001000000000000000000080000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000001000000000000000000002000000000000000000000000000000000000000100000000000000000000004000000000000000000400000000000000000000020000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionIndex": "0x0", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x3ecb5", + "gasUsed": "0x3ecb5", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b", + "0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionIndex": "0x0", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba", + "0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688" + ], + "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003726f6e0000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionIndex": "0x0", + "logIndex": "0x2", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x000008000000004000000000000004000000000000000000000000000000000080000000000000000000000020000000000000800000000000000000000400000000000000000000000000090010000000000000000c0000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000080000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000008000000000010000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionIndex": "0x1", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x7d99a", + "gasUsed": "0x3ece5", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b", + "0xa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0xa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionIndex": "0x1", + "logIndex": "0x4", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba", + "0xa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34" + ], + "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000077265766572736500000000000000000000000000000000000000000000000000", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionIndex": "0x1", + "logIndex": "0x5", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x000008000000004000000000000004000000000000000000000000000000000080000000000000000000000020000000000000000000000000000000000400000000000000000000000000090010000000000000000c0000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000080000000000000000000000000000000000000002000000000000000000000000001000000000000000000000000060000000000000000040000000000000000000008000000000000000000010000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionIndex": "0x2", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0xc12db", + "gasUsed": "0x43941", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b", + "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionIndex": "0x2", + "logIndex": "0x6", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionIndex": "0x2", + "logIndex": "0x7", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba", + "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2" + ], + "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000046164647200000000000000000000000000000000000000000000000000000000", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionIndex": "0x2", + "logIndex": "0x8", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x000008000000004000000000000004000000000000000000000000000000000080000000000000000000000020000000000000000000000000000000000400000000000000000000000000090010000000000000000c0000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000080000000000000000008000000000000000000002000000000000000000001000000000000000000000000000000060000000000000000000000000000000000000008000001000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x98814fb702fc8202e3ca381c3ef0b2d33fdef857499e7c8ef7d4b2ced938c00b", + "transactionIndex": "0x3", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0xcccee", + "gasUsed": "0xba13", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x98814fb702fc8202e3ca381c3ef0b2d33fdef857499e7c8ef7d4b2ced938c00b", + "transactionIndex": "0x3", + "logIndex": "0x9", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000080000000000000000000000001000000000000000000080000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000200000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200800000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xc69718e4b0f311aa76c1dcccf3a4b0c4b090ff8462155fa121e32b8eda1ba8c1", + "transactionIndex": "0x4", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0xd8701", + "gasUsed": "0xba13", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa799" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0xc69718e4b0f311aa76c1dcccf3a4b0c4b090ff8462155fa121e32b8eda1ba8c1", + "transactionIndex": "0x4", + "logIndex": "0xa", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400000000000000000000000000400000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001000000000000000000080000000000000000000002000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200800000000000000000000000000000000000000020000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xb5da04ebceb3a3ca75a005e56d803fe8c716d5ae28b040572f8f30b63127bc2b", + "transactionIndex": "0x5", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0xe49be", + "gasUsed": "0xc2bd", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716", + "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0xb5da04ebceb3a3ca75a005e56d803fe8c716d5ae28b040572f8f30b63127bc2b", + "transactionIndex": "0x5", + "logIndex": "0xb", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000000000000000000001000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000080000000000000000008000000000000000000000000000000000000000001000000000000000000000040000000000000010000000000000010000000000000000200000001000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xf60851be682c3c0e371b74cad3434c93e214fa5cb91854f27b498834ee1d5901", + "transactionIndex": "0x6", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "cumulativeGasUsed": "0xf0289", + "gasUsed": "0xb8cb", + "contractAddress": null, + "logs": [ + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0xeae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf", + "0x000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0xf60851be682c3c0e371b74cad3434c93e214fa5cb91854f27b498834ee1d5901", + "transactionIndex": "0x6", + "logIndex": "0xc", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001004000000000000000000000000000000000000000000000800000000000000000000000000000008000000000000000000100000000000000000000000100000000000000088000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44", + "transactionIndex": "0x7", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "cumulativeGasUsed": "0x15bf57a", + "gasUsed": "0x14cf2f1", + "contractAddress": null, + "logs": [ + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0xaabf778cd749a472313a9476aa3b29565e69697c48eb0f82b52fc9f071fd3c95", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001b", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44", + "transactionIndex": "0x7", + "logIndex": "0xd", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0x060d5a3fc05fdd11d7ba941d00a4fdcde096fb95171930e19997ce2b7df89174", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000003f00000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44", + "transactionIndex": "0x7", + "logIndex": "0xe", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000400000000000000000000000800000000000000000000000000000000000000000002000000000000000000000000200000000000000000000000000000000000000000400000000000000080000000000000000000000000000000000000000000000010000000000000000000000000000200000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000100000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1697372932, + "chain": 2021, + "multi": false, + "commit": "e0d7c31" +} \ No newline at end of file diff --git a/broadcast/20231015_Deploy.s.sol/2021/run-latest.json b/broadcast/20231015_Deploy.s.sol/2021/run-latest.json new file mode 100644 index 00000000..c8580f0a --- /dev/null +++ b/broadcast/20231015_Deploy.s.sol/2021/run-latest.json @@ -0,0 +1,2036 @@ +{ + "transactions": [ + { + "hash": "0x553cace89d412b26cc92e89120c8c23086f3c5c9ff96f8b67c64ad0ac93535ac", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4af6da", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6142b3806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b61030961030436600461345a565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c366004613477565b6107d7565b6040516103159190613564565b61035161034c3660046135f2565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b604051610315919061366f565b6103ba6103b5366004613477565b610bba565b6040516001600160a01b039091168152602001610315565b6103e760008051602061423e83398151915281565b604051908152602001610315565b610408610403366004613682565b610be1565b005b6103e7610418366004613737565b610cfb565b61039a61042b366004613477565b610d06565b6103e761043e366004613477565b60096020526000908152604090205481565b603f546103e7565b61039a610466366004613477565b610d53565b61040861047936600461377f565b610e5f565b61040861048c3660046137c0565b610ff4565b6103e761049f366004613477565b6000908152600160208190526040909120015490565b6104086104c33660046137fc565b611026565b6104086104d63660046137fc565b611080565b6103e76104e9366004613682565b6110a6565b6103e760008051602061421e83398151915281565b6104086105113660046137fc565b61113c565b6104086111ba565b61040861052c3660046137c0565b6111dd565b61040861053f366004613477565b6111f8565b6103e7610552366004613477565b611226565b61056a610565366004613828565b6112b9565b6040516001600160401b039091168152602001610315565b61040861059036600461384b565b61137e565b6104086105a3366004613866565b6113a7565b603c5460ff16610309565b6103ba6105c1366004613477565b6113bc565b6103e76105d43660046138a7565b6113dd565b610408611463565b6103ba6105ef3660046138c2565b611483565b6103096106023660046137fc565b6114a2565b604080518082019091526003815262524e5360e81b602082015261039a565b610309610634366004613477565b6114cd565b6103e7600081565b61040861064f3660046138f4565b6114f8565b6073546103e7565b61040861066a36600461391e565b611503565b61040861067d3660046139b4565b61171b565b61056a6001600160401b0381565b61039a61069e366004613477565b61174d565b6103e76106b1366004613477565b6117c0565b6104086106c43660046137fc565b6117d7565b60a7546001600160401b031661056a565b6103e760008051602061425e83398151915281565b6103096106fd366004613a2f565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613a59565b6117fd565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b610408610773366004613828565b611907565b61078b610786366004613adc565b611988565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611aba565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df6133e8565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613b0f565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611adf565b60208201516001600160401b03909116604090910152919050565b600080610938611b5b565b6109423389611ba3565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bbf92505050565b90506109a9816114cd565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6109cf81611bd5565b156109dd576109dd81611bf2565b6109e78482611c2e565b6109fc426001600160401b0380861690611c41565b9150610a088883611c77565b610a106133e8565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b038616828401526000606080840182905285830193909352835192830184528c815260a890915291909120548190610a759060ff166001613b59565b60ff1681526020018a815260200189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250509183525082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b039082613bc0565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206141fe83398151915290610ba690600019908590613c7f565b60405180910390a250965096945050505050565b6000610bc582611cbd565b506000908152600760205260409020546001600160a01b031690565b6000610bec82611d0d565b9050806001600160a01b0316836001600160a01b031603610c5e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610c7a5750610c7a81336106fd565b610cec5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610c55565b610cf68383611d6d565b505050565b60006107d182611ddb565b606081610d1281611cbd565b600083815260a8602090815260408083206009835292819020549051610d3b9392879101613c98565b60405160208183030381529060405291505b50919050565b606081600003610d7157505060408051602081019091526000815290565b600082815260a860205260409020600281018054610d8e90613b0f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dba90613b0f565b8015610e075780601f10610ddc57610100808354040283529160200191610e07565b820191906000526020600020905b815481529060010190602001808311610dea57829003601f168201915b50505050509150806001015492505b8215610d4d5750600082815260a860209081526040918290209151610e42918491600285019101613da6565b604051602081830303815290604052915080600101549250610e16565b610e67611b5b565b8282610e738282611e4e565b610e7b6133e8565b600086815260a860205260409020600301610ea0610e996006611e6f565b8790611e91565b15610ee157610eb56080860160608701613e58565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610eee610e996005611e6f565b15610f2457610f2487610f07606088016040890161384b565b60208501516001600160401b039091166040909101819052611e9d565b610f31610e996003611e6f565b15610f6757610f4360208601866138a7565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206141fe8339815191528784604051610f87929190613c7f565b60405180910390a2610f9c610e996004611e6f565b15610feb57600087815260a8602090815260409182902060040154610feb926001600160a01b0390911691610fd59189019089016138a7565b8960405180602001604052806000815250611f76565b50505050505050565b610fff335b82611fa9565b61101b5760405162461bcd60e51b8152600401610c5590613e73565b610cf6838383611fcb565b61102e611b5b565b816110396004611e6f565b6110438282611e4e565b600084815260a86020908152604080832060040154815192830190915291815261107a916001600160a01b03169085908790611f76565b50505050565b6000828152600160208190526040909120015461109c816120c7565b610cf683836120d1565b60006110b1836113dd565b82106111135760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610c55565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146111ac5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c55565b6111b682826120f3565b5050565b60008051602061425e8339815191526111d2816120c7565b6111da612115565b50565b610cf68383836040518060200160405280600081525061171b565b61120133610ff9565b61121d5760405162461bcd60e51b8152600401610c5590613e73565b6111da81611bf2565b6000611231603f5490565b82106112945760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610c55565b603f82815481106112a7576112a7613ec0565b90600052602060002001549050919050565b60006112c3611b5b565b60008051602061423e8339815191526112db816120c7565b6112e36133e8565b600085815260a86020526040902060040154611315906001600160401b03600160a01b90910481169086811690611c41565b6020820180516001600160401b0390921660409283015251015161133a908690611e9d565b6020810151604001519250846000805160206141fe83398151915261135f6005611e6f565b8360405161136e929190613c7f565b60405180910390a2505092915050565b611386611b5b565b60008051602061423e83398151915261139e816120c7565b6111b682612167565b60006113b2816120c7565b610cf683836121bf565b60006113c782612214565b156113d457506000919050565b6107d182611d0d565b60006001600160a01b0382166114475760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c55565b506001600160a01b031660009081526006602052604090205490565b60008051602061425e83398151915261147b816120c7565b6111da612230565b600082815260026020526040812061149b908361226d565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006114f06114db83611adf565b60a7546001600160401b039182169116612279565b421192915050565b6111b633838361228d565b600054610100900460ff16158080156115235750600054600160ff909116105b8061153d5750303b15801561153d575060005460ff166001145b6115a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c55565b6000805460ff1916600117905580156115c3576000805461ff0019166101001790555b6115ce6000896120d1565b6115e660008051602061425e833981519152886120d1565b6115fe60008051602061423e833981519152876120d1565b61161660008051602061421e833981519152866120d1565b61162083836121bf565b61162984612167565b611634886000611c2e565b61163c6133e8565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206141fe8339815191526116b36005611e6f565b836040516116c2929190613c7f565b60405180910390a2508015611711576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117253383611fa9565b6117415760405162461bcd60e51b8152600401610c5590613e73565b61107a84848484611f76565b60608161175981611cbd565b600061176361235b565b9050600081511161178357604051806020016040528060008152506117b8565b8061178d306123ed565b61179686612403565b6040516020016117a893929190613ed6565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d190612495565b600082815260016020819052604090912001546117f3816120c7565b610cf683836120f3565b60008051602061421e833981519152611815816120c7565b60006118216006611e6f565b9050600061182d6133e8565b602081015185151560609091015260005b868110156117115787878281811061185857611858613ec0565b90506020020135925061186a83611bd5565b611887576040516304a3dbd560e51b815260040160405180910390fd5b600083815260a8602052604090206004015460ff600160e01b909104161515861515146118ff57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206141fe833981519152906118f69087908690613c7f565b60405180910390a25b60010161183e565b61190f611b5b565b60008051602061423e833981519152611927816120c7565b61192f6133e8565b60208101516001600160401b0384166040909101819052611951908590611e9d565b836000805160206141fe83398151915261196b6005611e6f565b8360405161197a929190613c7f565b60405180910390a250505050565b600080611996836007611e91565b156119ad57506000905063da698a4d60e01b611ab2565b6119b684611bd5565b6119cc5750600090506304a3dbd560e51b611ab2565b6119e06119d96006611e6f565b8490611e91565b8015611a0157506119ff60008051602061421e833981519152866114a2565b155b15611a1857506000905063c24b0f3f60e01b611ab2565b6000611a3260008051602061423e833981519152876114a2565b9050611a48611a416005611e6f565b8590611e91565b8015611a52575080155b15611a6b57506000915063ed4b948760e01b9050611ab2565b611a76846018611e91565b8015611a9057508080611a8e5750611a8e8686611ba3565b155b15611aa85750600091506282b42960e81b9050611ab2565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d18261249f565b600081815260056020526040812054611b22907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b03166114a2565b15611b3557506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611ba15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c55565b565b6000611baf8383611fa9565b8061149b575061149b83836124df565b6000918252805160209182012090526040902090565b6000908152600560205260409020546001600160a01b0316151590565b611bfb8161253d565b600090815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055565b6073805460010190556111b682826125e0565b600081841180611c5057508183115b15611c5c57508061149b565b611c668484612279565b90508181111561149b575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156111b65760405163da87d84960e01b815260040160405180910390fd5b611cc681611bd5565b6111da5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c55565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c55565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611da282611d0d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611e445760006020840160018303810160008052805b828110611e3f57828114602e600183035160f81c1480821715611e3457600186848603030180842060205260406000206000526001810187019650505b505060001901611df7565b505050505b5050600051919050565b600080611e5c338585611988565b915091508161107a578060005260046000fd5b6000816006811115611e8357611e83613e42565b60ff166001901b9050919050565b6000828216151561149b565b600082815260a86020526040902060010154611eb99082611c77565b611ec2826114cd565b15611ee057604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611f2557604051631c21962760e11b815260040160405180910390fd5b611f2d6133e8565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b611f81848484611fcb565b611f8d8484848461275b565b61107a5760405162461bcd60e51b8152600401610c5590613f26565b6000611fb482612214565b15611fc1575060006107d1565b61149b838361285c565b611fd68383836128da565b611fde6133e8565b6000611fea6004611e6f565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b0319169091179055905061203d60008051602061421e833981519152336114a2565b1580156120625750600083815260a86020526040902060040154600160e01b900460ff165b1561209857600083815260a860205260409020600401805460ff60e01b19169055612095816120916006611e6f565b1790565b90505b826000805160206141fe83398151915282846040516120b8929190613c7f565b60405180910390a25050505050565b6111da8133612a4b565b6120db8282612aa4565b6000828152600260205260409020610cf69082612b0f565b6120fd8282612b24565b6000828152600260205260409020610cf69082612b8b565b61211d612ba0565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b60746121cc828483613f78565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051612208929190614037565b60405180910390a25050565b600061221f82611adf565b6001600160401b0316421192915050565b612238611b5b565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861214a3390565b600061149b8383612be9565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036122ee5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c55565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461236a90613b0f565b80601f016020809104026020016040519081016040528092919081815260200182805461239690613b0f565b80156123e35780601f106123b8576101008083540402835291602001916123e3565b820191906000526020600020905b8154815290600101906020018083116123c657829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612c13565b6060600061241083612dae565b60010190506000816001600160401b0381111561242f5761242f6136ac565b6040519080825280601f01601f191660200182016040528015612459576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461246357509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b14806124d057506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612e86565b6000805b82156125335750600082815260a860205260409020600401546001600160a01b03908116908416810361251a5760019150506107d1565b600092835260a8602052604090922060010154916124e3565b5060009392505050565b600061254882611d0d565b9050612558816000846001612eab565b61256182611d0d565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126365760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c55565b61263f81611bd5565b1561268c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c55565b61269a600083836001612eab565b6126a381611bd5565b156126f05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c55565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561285157604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061279f903390899088908890600401614066565b6020604051808303816000875af19250505080156127da575060408051601f3d908101601f191682019092526127d7918101906140a3565b60015b612837573d808015612808576040519150601f19603f3d011682016040523d82523d6000602084013e61280d565b606091505b50805160000361282f5760405162461bcd60e51b8152600401610c5590613f26565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117b8565b506001949350505050565b60008061286883611d0d565b9050806001600160a01b0316846001600160a01b031614806128af57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806117b85750836001600160a01b03166128c884610bba565b6001600160a01b031614949350505050565b826001600160a01b03166128ed82611d0d565b6001600160a01b0316146129135760405162461bcd60e51b8152600401610c55906140c0565b6001600160a01b0382166129755760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c55565b6129828383836001612eab565b826001600160a01b031661299582611d0d565b6001600160a01b0316146129bb5760405162461bcd60e51b8152600401610c55906140c0565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612a5582826114a2565b6111b657612a62816123ed565b612a6d836020612c13565b604051602001612a7e929190614105565b60408051601f198184030181529082905262461bcd60e51b8252610c559160040161366f565b612aae82826114a2565b6111b65760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061149b836001600160a01b038416612eb7565b612b2e82826114a2565b156111b65760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061149b836001600160a01b038416612f06565b603c5460ff16611ba15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c55565b6000826000018281548110612c0057612c00613ec0565b9060005260206000200154905092915050565b60606000612c2283600261417a565b612c2d906002614191565b6001600160401b03811115612c4457612c446136ac565b6040519080825280601f01601f191660200182016040528015612c6e576020820181803683370190505b509050600360fc1b81600081518110612c8957612c89613ec0565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612cb857612cb8613ec0565b60200101906001600160f81b031916908160001a9053506000612cdc84600261417a565b612ce7906001614191565b90505b6001811115612d5f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612d1b57612d1b613ec0565b1a60f81b828281518110612d3157612d31613ec0565b60200101906001600160f81b031916908160001a90535060049490941c93612d58816141a4565b9050612cea565b50831561149b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c55565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612ded5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e19576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612e3757662386f26fc10000830492506010015b6305f5e1008310612e4f576305f5e100830492506008015b6127108310612e6357612710830492506004015b60648310612e75576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d182612ff9565b61107a8484848461302e565b6000818152600183016020526040812054612efe575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60008181526001830160205260408120548015612fef576000612f2a6001836141bb565b8554909150600090612f3e906001906141bb565b9050818114612fa3576000866000018281548110612f5e57612f5e613ec0565b9060005260206000200154905080876000018481548110612f8157612f81613ec0565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612fb457612fb46141ce565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b61303a8484848461316e565b60018111156130a95760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610c55565b816001600160a01b0385166131055761310081603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b613128565b836001600160a01b0316856001600160a01b0316146131285761312885826131e1565b6001600160a01b0384166131445761313f8161327e565b613167565b846001600160a01b0316846001600160a01b03161461316757613167848261332d565b5050505050565b61317a84848484613371565b603c5460ff161561107a5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610c55565b600060016131ee846113dd565b6131f891906141bb565b6000838152603e602052604090205490915080821461324b576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f54600090613290906001906141bb565b600083815260406020819052812054603f80549394509092849081106132b8576132b8613ec0565b9060005260206000200154905080603f83815481106132d9576132d9613ec0565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f805480613311576133116141ce565b6001900381819060005260206000200160009055905550505050565b6000613338836113dd565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b61337d8284614191565b8110156133e257600081815260096020526040812080549091906133a0906141e4565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a3806133da816141e4565b915050613373565b5061107a565b604051806040016040528061341a6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b0319811681146111da57600080fd5b60006020828403121561346c57600080fd5b813561149b81613444565b60006020828403121561348957600080fd5b5035919050565b60005b838110156134ab578181015183820152602001613493565b50506000910152565b600081518084526134cc816020860160208601613490565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135166101008501826134b4565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061149b60208301846134e0565b60008083601f84011261358957600080fd5b5081356001600160401b038111156135a057600080fd5b6020830191508360208285010111156135b857600080fd5b9250929050565b80356001600160a01b03811681146135d657600080fd5b919050565b80356001600160401b03811681146135d657600080fd5b60008060008060008060a0878903121561360b57600080fd5b8635955060208701356001600160401b0381111561362857600080fd5b61363489828a01613577565b90965094506136479050604088016135bf565b9250613655606088016135bf565b9150613663608088016135db565b90509295509295509295565b60208152600061149b60208301846134b4565b6000806040838503121561369557600080fd5b61369e836135bf565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b03808411156136dc576136dc6136ac565b604051601f8501601f19908116603f01168101908282118183101715613704576137046136ac565b8160405280935085815286868601111561371d57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561374957600080fd5b81356001600160401b0381111561375f57600080fd5b8201601f8101841361377057600080fd5b6117b8848235602084016136c2565b600080600083850360c081121561379557600080fd5b84359350602085013592506080603f19820112156137b257600080fd5b506040840190509250925092565b6000806000606084860312156137d557600080fd5b6137de846135bf565b92506137ec602085016135bf565b9150604084013590509250925092565b6000806040838503121561380f57600080fd5b8235915061381f602084016135bf565b90509250929050565b6000806040838503121561383b57600080fd5b8235915061381f602084016135db565b60006020828403121561385d57600080fd5b61149b826135db565b6000806020838503121561387957600080fd5b82356001600160401b0381111561388f57600080fd5b61389b85828601613577565b90969095509350505050565b6000602082840312156138b957600080fd5b61149b826135bf565b600080604083850312156138d557600080fd5b50508035926020909101359150565b803580151581146135d657600080fd5b6000806040838503121561390757600080fd5b613910836135bf565b915061381f602084016138e4565b600080600080600080600060c0888a03121561393957600080fd5b613942886135bf565b9650613950602089016135bf565b955061395e604089016135bf565b945061396c606089016135bf565b935061397a608089016135db565b925060a08801356001600160401b0381111561399557600080fd5b6139a18a828b01613577565b989b979a50959850939692959293505050565b600080600080608085870312156139ca57600080fd5b6139d3856135bf565b93506139e1602086016135bf565b92506040850135915060608501356001600160401b03811115613a0357600080fd5b8501601f81018713613a1457600080fd5b613a23878235602084016136c2565b91505092959194509250565b60008060408385031215613a4257600080fd5b613a4b836135bf565b915061381f602084016135bf565b600080600060408486031215613a6e57600080fd5b83356001600160401b0380821115613a8557600080fd5b818601915086601f830112613a9957600080fd5b813581811115613aa857600080fd5b8760208260051b8501011115613abd57600080fd5b602092830195509350613ad391860190506138e4565b90509250925092565b600080600060608486031215613af157600080fd5b613afa846135bf565b95602085013595506040909401359392505050565b600181811c90821680613b2357607f821691505b602082108103610d4d57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613b43565b601f821115610cf657600081815260208120601f850160051c81016020861015613b995750805b601f850160051c820191505b81811015613bb857828155600101613ba5565b505050505050565b81516001600160401b03811115613bd957613bd96136ac565b613bed81613be78454613b0f565b84613b72565b602080601f831160018114613c225760008415613c0a5750858301515b600019600386901b1c1916600185901b178555613bb8565b600085815260208120601f198616915b82811015613c5157888601518255948401946001909101908401613c32565b5085821015613c6f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006117b860408301846134e0565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613cd581613b0f565b8061016088015261018085831660008114613cf75760018114613d1157613d42565b60ff1984168983015282151560051b890182019450613d42565b8560005260208060002060005b85811015613d395781548c8201860152908901908201613d1e565b8b018401965050505b50505050613d926080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613db98285838901613490565b8184019150601760f91b8252600160008654613dd481613b0f565b8184168015613dea5760018114613e0357613e33565b60ff198316878601528115158202870185019350613e33565b896000528560002060005b83811015613e29578154898201880152908601908701613e0e565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613e6a57600080fd5b61149b826138e4565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613ee8818460208901613490565b845190830190613efc818360208901613490565b602f60f81b91019081528351613f19816001840160208801613490565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b03831115613f8f57613f8f6136ac565b613fa383613f9d8354613b0f565b83613b72565b6000601f841160018114613fd75760008515613fbf5750838201355b600019600387901b1c1916600186901b178355613167565b600083815260209020601f19861690835b828110156140085786850135825560209485019460019092019101613fe8565b50868210156140255760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614099908301846134b4565b9695505050505050565b6000602082840312156140b557600080fd5b815161149b81613444565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161413d816017850160208801613490565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161416e816028840160208801613490565b01602801949350505050565b80820281158282048414176107d1576107d1613b43565b808201808211156107d1576107d1613b43565b6000816141b3576141b3613b43565b506000190190565b818103818111156107d1576107d1613b43565b634e487b7160e01b600052603160045260246000fd5b6000600182016141f6576141f6613b43565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220301f6572af699c777a4ce459646815492b8048541c5752ac22e91ffe87e5b23064736f6c63430008150033", + "nonce": "0x2c8df" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": [ + "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xabfaf005000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6d657461646174612d726e732e736b796d617669732e6f6e652f736169676f6e2f0000000000000000000000000000000000000000000000" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x17e3b3", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000713139b9f92d4f2bc54832a47200b7b8c6718158000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000124abfaf005000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6d657461646174612d726e732e736b796d617669732e6f6e652f736169676f6e2f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2273c7150d065f5a4783077c76d3937b84af0d9844ea0f04c7783a3b4aaa9d58", + "transactionType": "CREATE", + "contractName": "RNSAuction", + "contractAddress": "0xCcD3837278C083027DeF4537b3e66343D940377F", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x29c3e9", + "value": "0x0", + "data": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6124a6806100df6000396000f3fe6080604052600436106101b75760003560e01c806381bec1b3116100ec578063b96716901161008a578063db5e1ec611610064578063db5e1ec6146105a0578063ec14cf37146105c0578063f0f44260146105e0578063f5b541a61461060057600080fd5b8063b967169014610545578063ca15c87314610560578063d547741f1461058057600080fd5b806391d14854116100c657806391d14854146104e85780639979ef4514610508578063a217fddf1461051b578063a282d4ae1461053057600080fd5b806381bec1b31461048a5780638c843314146104aa5780639010d07c146104c857600080fd5b80634c255c97116101595780636e7d60f2116101335780636e7d60f21461039e578063777b0a18146103cb57806378bd7935146103eb578063791a26b41461045d57600080fd5b80634c255c971461034857806353f9195e1461035e57806360223b441461037e57600080fd5b8063248a9ca311610195578063248a9ca3146102955780632f2ff15d146102d457806336568abe146102f65780633b19e84a1461031657600080fd5b806301ffc9a7146101bc57806315a29162146101f157806319a3ee4014610265575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004611d1f565b610622565b60405190151581526020015b60405180910390f35b3480156101fd57600080fd5b5061024a61020c366004611d49565b604080518082019091526000808252602082015250600090815260366020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101e8565b34801561027157600080fd5b5061027d6301e1338081565b6040516001600160401b0390911681526020016101e8565b3480156102a157600080fd5b506102c66102b0366004611d49565b6000908152600160208190526040909120015490565b6040519081526020016101e8565b3480156102e057600080fd5b506102f46102ef366004611d77565b61064d565b005b34801561030257600080fd5b506102f4610311366004611d77565b610678565b34801561032257600080fd5b506038546001600160a01b03165b6040516001600160a01b0390911681526020016101e8565b34801561035457600080fd5b506102c661271081565b34801561036a57600080fd5b506101dc610379366004611d49565b6106fb565b34801561038a57600080fd5b506102f4610399366004611d49565b61071e565b3480156103aa57600080fd5b506103be6103b9366004611df2565b610732565b6040516101e89190611e33565b3480156103d757600080fd5b506102f46103e6366004611e79565b610a6a565b3480156103f757600080fd5b5061040b610406366004611d49565b610bcd565b6040805183518152602080850151818301529382015180516001600160a01b03168284015293840151606080830191909152918401516080820152920151151560a083015260c082015260e0016101e8565b34801561046957600080fd5b5061047d610478366004611df2565b610cbd565b6040516101e89190611ef2565b34801561049657600080fd5b506102f46104a5366004611f42565b610e78565b3480156104b657600080fd5b506035546001600160a01b0316610330565b3480156104d457600080fd5b506103306104e3366004611f6f565b610ef5565b3480156104f457600080fd5b506101dc610503366004611d77565b610f14565b6102f4610516366004611d49565b610f3f565b34801561052757600080fd5b506102c6600081565b34801561053c57600080fd5b506039546102c6565b34801561055157600080fd5b5061027d6001600160401b0381565b34801561056c57600080fd5b506102c661057b366004611d49565b6110ff565b34801561058c57600080fd5b506102f461059b366004611d77565b611116565b3480156105ac57600080fd5b506102c66105bb366004611f91565b61113c565b3480156105cc57600080fd5b506102f46105db366004611fad565b6111d9565b3480156105ec57600080fd5b506102f46105fb366004612031565b611376565b34801561060c57600080fd5b506102c660008051602061245183398151915281565b60006001600160e01b03198216635a05180f60e01b148061064757506106478261138a565b92915050565b60008281526001602081905260409091200154610669816113bf565b61067383836113cc565b505050565b6001600160a01b03811633146106ed5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6106f782826113ee565b5050565b600881901c6000908152603a6020526040812054600160ff84161b161515610647565b6000610729816113bf565b6106f782611410565b6060600080610754604051806040016040528060008152602001600081525090565b610792604080516060808201835260008083526020808401829052845160808101865282815290810182905280850182905291820152909182015290565b85806001600160401b038111156107ab576107ab61204e565b6040519080825280602002602001820160405280156107d4578160200160208202803683370190505b506035549096506001600160a01b031660006107fc426301e133806001600160401b0361146e565b905060005b83811015610a46578a8a8281811061081b5761081b612064565b60209081029290920135600081815260378452604080822081516060808201845282548252600180840154838a0152845160808101865260028501546001600160a01b031681526003850154818b015260048501548187015260059094015460ff1615158483015282850193845282518652603689529484902084518086019095528054855290940154968301969096525190910151919b509850919650610a3e90505760208601514210156108e4576040516372d1250d60e01b815260040160405180910390fd5b84604001516040015160000361090d576040516323bbcc0160e01b815260040160405180910390fd5b6040850151602001516109209088612090565b60405163fc284d1160e01b8152600481018a90526001600160401b03841660248201529097506001600160a01b0384169063fc284d1190604401600060405180830381600087803b15801561097457600080fd5b505af1158015610988573d6000803e3d6000fd5b505050506040858101515190516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018a9052908416906323b872dd90606401600060405180830381600087803b1580156109e357600080fd5b505af11580156109f7573d6000803e3d6000fd5b505050506001898281518110610a0f57610a0f612064565b911515602092830291909101820181905260008a815260379092526040909120600501805460ff191690911790555b600101610801565b50603854610a5d906001600160a01b0316876114a4565b5050505050505092915050565b600080516020612451833981519152610a82816113bf565b85610a8c81611509565b84801580610a9a5750808414155b15610ab857604051634ec4810560e11b815260040160405180910390fd5b6000806000805b84811015610b81578a8a82818110610ad957610ad9612064565b905060200201359350610aeb846106fb565b610b0857604051637d6fe8d760e11b815260040160405180910390fd5b6000848152603760205260409020805493509150821580610b2857508b83145b80610b3557506004820154155b610b5257604051631dc8374160e01b815260040160405180910390fd5b8b8255888882818110610b6757610b67612064565b905060200201358260010181905550806001019050610abf565b508a7f9a845a1c4235343a450f5e39d4179b7e2a6c9586c02bff45d956717f4a19dd948b8b8b8b604051610bb894939291906120d5565b60405180910390a25050505050505050505050565b610c0b604080516060808201835260008083526020808401829052845160808101865282815290810182905280850182905291820152909182015290565b5060008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b0316815260038501548188015260048501548187015260059094015460ff161515918401919091528184019290925280518351808501855286815285018690528552603684528285208351808501909452805484529091015492820192909252909190610cb58382611556565b915050915091565b6060600080516020612451833981519152610cd7816113bf565b826000819003610cfa57604051634ec4810560e11b815260040160405180910390fd5b806001600160401b03811115610d1257610d1261204e565b604051908082528060200260200182016040528015610d3b578160200160208202803683370190505b506035549093506001600160a01b03167fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6886301e1338060005b84811015610e6c57836001600160a01b0316630570891f848b8b85818110610d9e57610d9e612064565b9050602002810190610db09190612107565b600030886040518763ffffffff1660e01b8152600401610dd59695949392919061214d565b60408051808303816000875af1158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1791906121a9565b9050878281518110610e2b57610e2b612064565b602002602001018181525050610e64878281518110610e4c57610e4c612064565b6020026020010151603a6115ae90919063ffffffff16565b600101610d74565b50505050505092915050565b6000610e83816113bf565b81610e8d816115d7565b83610e9781611509565b60008581526036602090815260409091208535815590850135600182015550847fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b85604051610ee691906121e3565b60405180910390a25050505050565b6000828152600260205260408120610f0d908361161c565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b0316815260038501548188015260048501548187015260059094015460ff1615159184019190915281840192909252805185526036845282852083518085019094528054845290910154928201929092529091610fd88383611556565b9050610fe382611628565b611000576040516348c6117b60e11b815260040160405180910390fd5b8034101561102157604051632ca2f52b60e11b815260040160405180910390fd5b3361102d816000611643565b61104a57604051634bad17b360e01b815260040160405180910390fd5b604084810151805160209182015160008981526037845284902034600382018190556002820180546001600160a01b0319166001600160a01b038981169182178355426004909501949094558b5188519384529683015295810183905290831660608201529193909290918991907f5934294f4724ea4bb71fee8511b9ccb8dd6d2249ac4d120a81ccfcbbd0ad905f9060800160405180910390a381156110f5576110f583836114a4565b5050505050505050565b6000818152600260205260408120610647906116b9565b60008281526001602081905260409091200154611132816113bf565b61067383836113ee565b600080611148816113bf565b82611152816115d7565b33846040516020016111659291906121fa565b60408051808303601f1901815291815281516020928301206000818152603684529190912086358155918601356001830155935050827fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b856040516111ca91906121e3565b60405180910390a25050919050565b600054610100900460ff16158080156111f95750600054600160ff909116105b806112135750303b158015611213575060005460ff166001145b6112765760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106e4565b6000805460ff191660011790558015611299576000805461ff0019166101001790555b6112a2836116c3565b6112ab82611410565b6112b6600088611734565b8460008051602061245183398151915260005b8281101561130957611301828a8a848181106112e7576112e7612064565b90506020020160208101906112fc9190612031565b611734565b6001016112c9565b5050603580546001600160a01b0319166001600160a01b03871617905550801561136d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6000611381816113bf565b6106f7826116c3565b60006001600160e01b03198216637965db0b60e01b148061064757506301ffc9a760e01b6001600160e01b0319831614610647565b6113c9813361173e565b50565b6113d68282611771565b600082815260026020526040902061067390826117dc565b6113f882826117f1565b60008281526002602052604090206106739082611858565b6127108111156114335760405163220f1a1560e01b815260040160405180910390fd5b60398190556040518181527f846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab70671823429060200160405180910390a150565b60008184118061147d57508183115b15611489575080610f0d565b611493848461186d565b905081811115610f0d575092915050565b60006114b08383611643565b905080610673576114c9836001600160a01b0316611881565b6114d283611897565b6040516020016114e3929190612245565b60408051601f198184030181529082905262461bcd60e51b82526106e4916004016122c3565b60008181526036602090815260409182902082518084019093528054835260010154908201526115399051421090565b6113c95760405163028e4e9760e51b815260040160405180910390fd5b600061156e83602001518460400151602001516118ae565b905082604001516020015160001415801561158c5750602082015142105b15610647576115a483602001516039546127106118c4565b610f0d9082612090565b600881901c600090815260209290925260409091208054600160ff9093169290921b9091179055565b60208101358135111580156115ff57506115ff6115f9368390038301836122f6565b51421090565b6113c9576040516302ef0c7360e21b815260040160405180910390fd5b6000610f0d83836119ae565b60004282600001511115801561064757505060200151421090565b604080516000808252602082019092526001600160a01b03841690839060405161166d9190612352565b60006040518083038185875af1925050503d80600081146116aa576040519150601f19603f3d011682016040523d82523d6000602084013e6116af565b606091505b5090949350505050565b6000610647825490565b6001600160a01b0381166116ea576040516362daafb160e11b815260040160405180910390fd5b603880546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b6106f782826113cc565b6117488282610f14565b6106f75761175581611881565b6117608360206119d8565b6040516020016114e392919061236e565b61177b8282610f14565b6106f75760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610f0d836001600160a01b038416611b73565b6117fb8282610f14565b156106f75760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f0d836001600160a01b038416611bc2565b818101828110156106475750600019610647565b60606106476001600160a01b03831660146119d8565b6060610647826118a684611cb5565b6001016119d8565b60008183116118bd5781610f0d565b5090919050565b60008080600019858709858702925082811083820303915050806000036118fe578382816118f4576118f46123e3565b0492505050610f0d565b8084116119455760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106e4565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008260000182815481106119c5576119c5612064565b9060005260206000200154905092915050565b606060006119e78360026123f9565b6119f2906002612090565b6001600160401b03811115611a0957611a0961204e565b6040519080825280601f01601f191660200182016040528015611a33576020820181803683370190505b509050600360fc1b81600081518110611a4e57611a4e612064565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a7d57611a7d612064565b60200101906001600160f81b031916908160001a9053506000611aa18460026123f9565b611aac906001612090565b90505b6001811115611b24576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611ae057611ae0612064565b1a60f81b828281518110611af657611af6612064565b60200101906001600160f81b031916908160001a90535060049490941c93611b1d81612410565b9050611aaf565b508315610f0d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106e4565b6000818152600183016020526040812054611bba57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610647565b506000610647565b60008181526001830160205260408120548015611cab576000611be6600183612427565b8554909150600090611bfa90600190612427565b9050818114611c5f576000866000018281548110611c1a57611c1a612064565b9060005260206000200154905080876000018481548110611c3d57611c3d612064565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611c7057611c7061243a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610647565b6000915050610647565b600080608083901c15611ccd5760809290921c916010015b604083901c15611ce25760409290921c916008015b602083901c15611cf75760209290921c916004015b601083901c15611d0c5760109290921c916002015b600883901c156106475760010192915050565b600060208284031215611d3157600080fd5b81356001600160e01b031981168114610f0d57600080fd5b600060208284031215611d5b57600080fd5b5035919050565b6001600160a01b03811681146113c957600080fd5b60008060408385031215611d8a57600080fd5b823591506020830135611d9c81611d62565b809150509250929050565b60008083601f840112611db957600080fd5b5081356001600160401b03811115611dd057600080fd5b6020830191508360208260051b8501011115611deb57600080fd5b9250929050565b60008060208385031215611e0557600080fd5b82356001600160401b03811115611e1b57600080fd5b611e2785828601611da7565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015611e6d578351151583529284019291840191600101611e4f565b50909695505050505050565b600080600080600060608688031215611e9157600080fd5b8535945060208601356001600160401b0380821115611eaf57600080fd5b611ebb89838a01611da7565b90965094506040880135915080821115611ed457600080fd5b50611ee188828901611da7565b969995985093965092949392505050565b6020808252825182820181905260009190848201906040850190845b81811015611e6d57835183529284019291840191600101611f0e565b600060408284031215611f3c57600080fd5b50919050565b60008060608385031215611f5557600080fd5b82359150611f668460208501611f2a565b90509250929050565b60008060408385031215611f8257600080fd5b50508035926020909101359150565b600060408284031215611fa357600080fd5b610f0d8383611f2a565b60008060008060008060a08789031215611fc657600080fd5b8635611fd181611d62565b955060208701356001600160401b03811115611fec57600080fd5b611ff889828a01611da7565b909650945050604087013561200c81611d62565b9250606087013561201c81611d62565b80925050608087013590509295509295509295565b60006020828403121561204357600080fd5b8135610f0d81611d62565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106475761064761207a565b81835260006001600160fb1b038311156120bc57600080fd5b8260051b80836020870137939093016020019392505050565b6040815260006120e96040830186886120a3565b82810360208401526120fc8185876120a3565b979650505050505050565b6000808335601e1984360301811261211e57600080fd5b8301803591506001600160401b0382111561213857600080fd5b602001915036819003821315611deb57600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b600080604083850312156121bc57600080fd5b82516001600160401b03811681146121d357600080fd5b6020939093015192949293505050565b813581526020808301359082015260408101610647565b6001600160a01b038316815260608101610f0d602083018480358252602090810135910152565b60005b8381101561223c578181015183820152602001612224565b50506000910152565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b60208201526000835161229081602a850160208801612221565b660103b30b63ab2960cd1b602a9184019182015283516122b7816031840160208801612221565b01603101949350505050565b60208152600082518060208401526122e2816040850160208701612221565b601f01601f19169190910160400192915050565b60006040828403121561230857600080fd5b604051604081018181106001600160401b038211171561233857634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b60008251612364818460208701612221565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123a6816017850160208801612221565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123d7816028840160208801612221565b01602801949350505050565b634e487b7160e01b600052601260045260246000fd5b80820281158282048414176106475761064761207a565b60008161241f5761241f61207a565b506000190190565b818103818111156106475761064761207a565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220b309f671b8e19d4b799039d85a64646c38d5a7039b741c8381d1403a8713f8bf64736f6c63430008150033", + "nonce": "0x2c8e1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "function": null, + "arguments": [ + "0xCcD3837278C083027DeF4537b3e66343D940377F", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xec14cf37000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x112dc0", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000ccd3837278c083027def4537b3e66343d940377f000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e4ec14cf37000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x8be57891432f175fa98311e1e197921abe10650d036cdb3432ce1762287ec002", + "transactionType": "CREATE", + "contractName": "NameChecker", + "contractAddress": "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x1e4f9b", + "value": "0x0", + "data": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611a34806100df6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806391d14854116100b8578063ca5f79951161007c578063ca5f7995146102df578063d547741f1461030d578063e04af3b714610320578063e786c3ad14610340578063fb3809be14610360578063fbc639091461037357600080fd5b806391d148541461027957806392aec2fc1461028c57806396237206146102b1578063a217fddf146102c4578063ca15c873146102cc57600080fd5b80632f2ff15d116100ff5780632f2ff15d1461020257806336568abe14610215578063439e42e7146102285780635c0a3caa1461023b5780639010d07c1461024e57600080fd5b806301ffc9a71461013c5780630fda4464146101645780631d367b5714610177578063245ed654146101bb578063248a9ca3146101d0575b600080fd5b61014f61014a3660046113ad565b610386565b60405190151581526020015b60405180910390f35b61014f6101723660046113d7565b6103b1565b6101a16040805180820190915260355460ff80821680845261010090920416602090920182905291565b6040805160ff93841681529290911660208301520161015b565b6101ce6101c93660046114aa565b6103d4565b005b6101f46101de3660046114fe565b6000908152600160208190526040909120015490565b60405190815260200161015b565b6101ce61021036600461152e565b610423565b6101ce61022336600461152e565b61044e565b61014f6102363660046113d7565b6104d1565b61014f6102493660046113d7565b61056f565b61026161025c36600461155a565b610737565b6040516001600160a01b03909116815260200161015b565b61014f61028736600461152e565b61074f565b6101f461029a366004611633565b6000601f600183510310601f830151029050919050565b6101ce6102bf3660046114aa565b61077a565b6101f4600081565b6101f46102da3660046114fe565b6107a7565b6102f26102ed3660046114fe565b6107be565b6040805193845260208401929092529082015260600161015b565b6101ce61031b36600461152e565b6107fd565b61033361032e3660046116f5565b610823565b60405161015b919061173e565b61035361034e3660046113d7565b6108b9565b60405161015b91906117d2565b6101ce61036e366004611845565b6108e9565b6101ce61038136600461187f565b610a09565b60006001600160e01b03198216635a05180f60e01b14806103ab57506103ab82610a1e565b92915050565b60006103bd838361056f565b806103cd57506103cd83836104d1565b9392505050565b60006103df81610a53565b61041d848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250610a60915050565b50505050565b6000828152600160208190526040909120015461043f81610a53565b6104498383610c00565b505050565b6001600160a01b03811633146104c35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104cd8282610c22565b5050565b6000806104de84846108b9565b805190915060005b818110156105635761054a610525848381518110610506576105066118a9565b60200260200101516000601f600183510310601f830151029050919050565b600881901c600090815260366020526040902054600160ff9092169190911b16151590565b1561055b57600193505050506103ab565b6001016104e6565b50600095945050505050565b600080600084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935050600019820190508115806105e75750826000815181106105d0576105d06118a9565b6020910101516001600160f81b031916602d60f81b145b8061061657508281815181106105ff576105ff6118a9565b6020910101516001600160f81b031916602d60f81b145b156106285760019450505050506103ab565b60005b8281101561072957838181518110610645576106456118a9565b01602001516001600160f81b0319169450602d60f81b8590036106b1578181141580156106995750838160010181518110610682576106826118a9565b6020910101516001600160f81b031916602d60f81b145b156106ac576001955050505050506103ab565b610721565b600360fc1b6001600160f81b03198616108015906106dd5750603960f81b6001600160f81b0319861611155b8061070f5750606160f81b6001600160f81b031986161080159061070f5750603d60f91b6001600160f81b0319861611155b610721576001955050505050506103ab565b60010161062b565b506000979650505050505050565b60008281526002602052604081206103cd9083610c44565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061078581610a53565b600061079461032e85876118bf565b90506107a08184610a60565b5050505050565b60008181526002602052604081206103ab90610c50565b6040805180820190915260355460ff8082168352610100909104166020820152600090819081906107f0908590610c5a565b9196909550909350915050565b6000828152600160208190526040909120015461081981610a53565b6104498383610c22565b80516060908067ffffffffffffffff8111156108415761084161157c565b60405190808252806020026020018201604052801561086a578160200160208202803683370190505b50915060005b818110156108b25761088d848281518110610506576105066118a9565b83828151811061089f5761089f6118a9565b6020908102919091010152600101610870565b5050919050565b6040805180820190915260355460ff80821683526101009091041660208201526060906103cd9084908490610ccb565b600054610100900460ff16158080156109095750600054600160ff909116105b806109235750303b158015610923575060005460ff166001145b6109865760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ba565b6000805460ff1916600117905580156109a9576000805461ff0019166101001790555b6109b4600085610dda565b6109be8383610de4565b801561041d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6000610a1481610a53565b6104498383610de4565b60006001600160e01b03198216637965db0b60e01b14806103ab57506301ffc9a760e01b6001600160e01b03198316146103ab565b610a5d8133610eca565b50565b8151600080600019815b84811015610b4a57868181518110610a8457610a846118a9565b6020026020010151600003610adb5760405162461bcd60e51b815260206004820181905260248201527f4e616d65436865636b65723a20696e76616c6964207061636b656420776f726460448201526064016104ba565b60f8878281518110610aef57610aef6118a9565b6020026020010151901c9350610b058285610f23565b9150610b118385610f39565b9250610b42878281518110610b2857610b286118a9565b6020026020010151876036610f489092919063ffffffff16565b600101610a6a565b508415610bbc576040805180820190915260355460ff808216808452610100909204166020830152610b7d908390610f23565b9150610b9083826020015160ff16610f39565b815190935060ff1682148015610bac5750806020015160ff1683145b610bba57610bba8284610de4565b505b60408051858152861515602082015233917f060d5a3fc05fdd11d7ba941d00a4fdcde096fb95171930e19997ce2b7df89174910160405180910390a2505050505050565b610c0a8282610f97565b60008281526002602052604090206104499082611002565b610c2c8282611017565b6000828152600260205260409020610449908261107e565b60006103cd8383611093565b60006103ab825490565b6000806000610c70846000015160ff1686610f23565b9150610c83846020015160ff1686610f23565b8281036001818101808302821c868a039092010203945090915061ffff841115610cc357604051630faa3ef560e11b8152600481018590526024016104ba565b509250925092565b60608260008080610cdc8487610c5a565b9250925092508267ffffffffffffffff811115610cfb57610cfb61157c565b604051908082528060200260200182016040528015610d2e57816020015b6060815260200190600190039081610d195790505b50945060008060005b86811015610dcc57610d4b84820188610f23565b91508085015b828111610dc357610d6481838d8f6118cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508b5160018801978d935091508110610db057610db06118a9565b6020908102919091010152600101610d51565b50600101610d37565b505050505050509392505050565b6104cd8282610c00565b60ff821615801590610dfc57508060ff168260ff1611155b610e5f5760405162461bcd60e51b815260206004820152602e60248201527f4e616d65436865636b65723a206d696e20776f7264206c656e677468203e206d60448201526d0c2f040eedee4c840d8cadccee8d60931b60648201526084016104ba565b60408051808201825260ff84811680835290841660209283018190526035805461ffff191683176101008302179055835191825291810191909152815133927faabf778cd749a472313a9476aa3b29565e69697c48eb0f82b52fc9f071fd3c95928290030190a25050565b610ed4828261074f565b6104cd57610ee1816110bd565b610eec8360206110cf565b604051602001610efd9291906118f6565b60408051601f198184030181529082905262461bcd60e51b82526104ba9160040161196b565b6000818310610f3257816103cd565b5090919050565b6000818311610f3257816103cd565b8015610f7257600882901c60009081526020849052604090208054600160ff85161b179055505050565b600882901c60009081526020849052604090208054600160ff85161b19169055505050565b610fa1828261074f565b6104cd5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006103cd836001600160a01b03841661126b565b611021828261074f565b156104cd5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006103cd836001600160a01b0384166112ba565b60008260000182815481106110aa576110aa6118a9565b9060005260206000200154905092915050565b60606103ab6001600160a01b03831660145b606060006110de836002611994565b6110e99060026119ab565b67ffffffffffffffff8111156111015761110161157c565b6040519080825280601f01601f19166020018201604052801561112b576020820181803683370190505b509050600360fc1b81600081518110611146576111466118a9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611175576111756118a9565b60200101906001600160f81b031916908160001a9053506000611199846002611994565b6111a49060016119ab565b90505b600181111561121c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106111d8576111d86118a9565b1a60f81b8282815181106111ee576111ee6118a9565b60200101906001600160f81b031916908160001a90535060049490941c93611215816119be565b90506111a7565b5083156103cd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ba565b60008181526001830160205260408120546112b2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556103ab565b5060006103ab565b600081815260018301602052604081205480156113a35760006112de6001836119d5565b85549091506000906112f2906001906119d5565b9050818114611357576000866000018281548110611312576113126118a9565b9060005260206000200154905080876000018481548110611335576113356118a9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611368576113686119e8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506103ab565b60009150506103ab565b6000602082840312156113bf57600080fd5b81356001600160e01b0319811681146103cd57600080fd5b600080602083850312156113ea57600080fd5b823567ffffffffffffffff8082111561140257600080fd5b818501915085601f83011261141657600080fd5b81358181111561142557600080fd5b86602082850101111561143757600080fd5b60209290920196919550909350505050565b60008083601f84011261145b57600080fd5b50813567ffffffffffffffff81111561147357600080fd5b6020830191508360208260051b850101111561148e57600080fd5b9250929050565b803580151581146114a557600080fd5b919050565b6000806000604084860312156114bf57600080fd5b833567ffffffffffffffff8111156114d657600080fd5b6114e286828701611449565b90945092506114f5905060208501611495565b90509250925092565b60006020828403121561151057600080fd5b5035919050565b80356001600160a01b03811681146114a557600080fd5b6000806040838503121561154157600080fd5b8235915061155160208401611517565b90509250929050565b6000806040838503121561156d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115bb576115bb61157c565b604052919050565b600082601f8301126115d457600080fd5b813567ffffffffffffffff8111156115ee576115ee61157c565b611601601f8201601f1916602001611592565b81815284602083860101111561161657600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561164557600080fd5b813567ffffffffffffffff81111561165c57600080fd5b611668848285016115c3565b949350505050565b600067ffffffffffffffff8084111561168b5761168b61157c565b8360051b602061169c818301611592565b868152935090840190808401878311156116b557600080fd5b855b838110156116e9578035858111156116cf5760008081fd5b6116db8a828a016115c3565b8352509082019082016116b7565b50505050509392505050565b60006020828403121561170757600080fd5b813567ffffffffffffffff81111561171e57600080fd5b8201601f8101841361172f57600080fd5b61166884823560208401611670565b6020808252825182820181905260009190848201906040850190845b818110156117765783518352928401929184019160010161175a565b50909695505050505050565b60005b8381101561179d578181015183820152602001611785565b50506000910152565b600081518084526117be816020860160208601611782565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561182757603f198886030184526118158583516117a6565b945092850192908501906001016117f9565b5092979650505050505050565b803560ff811681146114a557600080fd5b60008060006060848603121561185a57600080fd5b61186384611517565b925061187160208501611834565b91506114f560408501611834565b6000806040838503121561189257600080fd5b61189b83611834565b915061155160208401611834565b634e487b7160e01b600052603260045260246000fd5b60006103cd368484611670565b600080858511156118dc57600080fd5b838611156118e957600080fd5b5050820193919092039150565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161192e816017850160208801611782565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161195f816028840160208801611782565b01602801949350505050565b6020815260006103cd60208301846117a6565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103ab576103ab61197e565b808201808211156103ab576103ab61197e565b6000816119cd576119cd61197e565b506000190190565b818103818111156103ab576103ab61197e565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202247f1c7e637d2639344dd5ecdf7446256de2b88f161ff1c1c345bfb1a96a16764736f6c63430008150033", + "nonce": "0x2c8e3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "function": null, + "arguments": [ + "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xfb3809be000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0xe96c2", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000af4a77bc41320bedf62d33ad278d76731eaabcf4000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064fb3809be000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x75907324b5eaccf7026a2c425bdcd52383335de33068c0124a53d0ab46ccfee1", + "transactionType": "CREATE", + "contractName": "RNSDomainPrice", + "contractAddress": "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x31bf47", + "value": "0x0", + "data": "0x60806040526200000e62000014565b620000d5565b600054610100900460ff1615620000815760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000d3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612bee80620000e56000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635c68c83011610104578063ca15c873116100a2578063e229a67011610071578063e229a67014610480578063f4651f4914610493578063f5b541a6146104b4578063fe303ebf146104c957600080fd5b8063ca15c87314610434578063d40ed58c14610447578063d547741f1461045a578063dd28776d1461046d57600080fd5b80637174026e116100de5780637174026e146103db5780639010d07c146103ee57806391d1485414610419578063a217fddf1461042c57600080fd5b80635c68c830146103985780635ef32e2c146103ab578063713a69a7146103b357600080fd5b80632f6ee6951161017157806339e47da71161014b57806339e47da7146102ec5780634c255c971461034457806353faf90914610365578063599eaabf1461038557600080fd5b80632f6ee695146102ac57806335feb741146102c657806336568abe146102d957600080fd5b8063248a9ca3116101ad578063248a9ca31461023257806328dd3065146102565780632be09ecc1461026b5780632f2ff15d1461029957600080fd5b806301ffc9a7146101d4578063037f1769146101fc5780630a44f51f1461021d575b600080fd5b6101e76101e2366004612074565b6104dc565b60405190151581526020015b60405180910390f35b61020f61020a36600461209e565b610507565b6040519081526020016101f3565b610225610599565b6040516101f391906120b7565b61020f61024036600461209e565b6000908152600160208190526040909120015490565b61026961026436600461212e565b610676565b005b603554603954603a54604080516001600160a01b0390941684526020840192909252908201526060016101f3565b6102696102a7366004612163565b610692565b6102b4601281565b60405160ff90911681526020016101f3565b6102696102d43660046121d7565b6106bd565b6102696102e7366004612163565b6106d2565b604080518082018252600080825260209182015281518083018352603b546001600160c01b0381168083526001600160401b03600160c01b9092048216928401928352845190815291511691810191909152016101f3565b61034d61271081565b6040516001600160401b0390911681526020016101f3565b61037861037336600461225c565b610755565b6040516101f3919061231f565b61026961039336600461225c565b61087c565b61020f6103a6366004612365565b61093a565b60375461020f565b6103c66103c1366004612478565b6109b8565b604080519283526020830191909152016101f3565b61020f6103e936600461209e565b6109e4565b6104016103fc3660046124ac565b610a77565b6040516001600160a01b0390911681526020016101f3565b6101e7610427366004612163565b610a96565b61020f600081565b61020f61044236600461209e565b610ac1565b6102696104553660046124e6565b610ad8565b610269610468366004612163565b610c8e565b61026961047b3660046125bf565b610cb4565b61026961048e36600461262a565b610dc0565b6104a66104a1366004612646565b610dd4565b6040516101f392919061268a565b61020f600080516020612b9983398151915281565b6102696104d736600461209e565b610f68565b60006001600160e01b03198216635a05180f60e01b1480610501575061050182610f7c565b92915050565b603554603a5460395460405163052571af60e51b815260009361050193869360129384936001600160a01b03169263a4ae35e09261055092600401918252602082015260400190565b608060405180830381865afa15801561056d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059191906126c5565b929190610fb1565b603854606090806001600160401b038111156105b7576105b76123d6565b6040519080825280602002602001820160405280156105fc57816020015b60408051808201909152600080825260208201528152602001906001900390816105d55790505b5091506000805b82811015610670578060010191508184828151811061062457610624612750565b60200260200101516000018181525050603c60008381526020019081526020016000205484828151811061065a5761065a612750565b6020908102919091018101510152600101610603565b50505090565b600061068181610ff2565b61068c848484610fff565b50505050565b600082815260016020819052604090912001546106ae81610ff2565b6106b88383611071565b505050565b60006106c881610ff2565b6106b88383611093565b6001600160a01b03811633146107475760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61075182826111ac565b5050565b6060600080516020612b9983398151915261076f81610ff2565b60006107818b8b8b8b8b8b8b8b6111ce565b905033816001600160401b0381111561079c5761079c6123d6565b6040519080825280602002602001820160405280156107c5578160200160208202803683370190505b50935060005b8281101561086c57610842828e8e848181106107e9576107e9612750565b905060200201358d8d8581811061080257610802612750565b905060200201358c8c8681811061081b5761081b612750565b905060200201358b8b8781811061083457610834612750565b90506020020135600061121c565b85828151811061085457610854612750565b911515602092830291909101909101526001016107cb565b5050505098975050505050505050565b600080516020612b9983398151915261089481610ff2565b60006108a68a8a8a8a8a8a8a8a6111ce565b90503360005b8281101561092c57610923828d8d848181106108ca576108ca612750565b905060200201358c8c858181106108e3576108e3612750565b905060200201358b8b868181106108fc576108fc612750565b905060200201358a8a8781811061091557610915612750565b90506020020135600161121c565b506001016108ac565b505050505050505050505050565b6000603e600061097f85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112ab92505050565b8152602001908152602001600020549050806000036109b157604051635421761560e11b815260040160405180910390fd5b1992915050565b6000806109d26109cd84805160209091012090565b6112b6565b91506109dd826109e4565b9050915091565b603554603a5460395460405163052571af60e51b815260048101929092526024820152600091610501918491601291829161059191601119916001600160a01b03169063a4ae35e090604401608060405180830381865afa158015610a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7191906126c5565b90611330565b6000828152600260205260408120610a8f908361148a565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260026020526040812061050190611496565b600054610100900460ff1615808015610af85750600054600160ff909116105b80610b125750303b158015610b12575060005460ff166001145b610b755760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161073e565b6000805460ff191660011790558015610b98576000805461ff0019166101001790555b89600080516020612b9983398151915260005b82811015610beb57610be3828f8f84818110610bc957610bc9612750565b9050602002016020810190610bde9190612766565b6114a0565b600101610bab565b50603680546001600160a01b0319166001600160a01b038816179055610c1260008f6114a0565b610c1c8b8b611093565b610c25896114aa565b610c2e886114df565b610c39878686610fff565b5050801561092c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b60008281526001602081905260409091200154610caa81610ff2565b6106b883836111ac565b600080516020612b99833981519152610ccc81610ff2565b83801580610cda5750808314155b15610cf857604051634ec4810560e11b815260040160405180910390fd5b600033815b83811015610db557868682818110610d1757610d17612750565b9050602002013519925082603e60008b8b85818110610d3857610d38612750565b90506020020135815260200190815260200160002081905550888882818110610d6357610d63612750565b90506020020135826001600160a01b03167fb52d278cb3ef3b003bdfb385ce2eb23a83eb6d713724abfba1acaa16ccf6621485604051610da591815260200190565b60405180910390a3600101610cfd565b505050505050505050565b6000610dcb81610ff2565b610751826114df565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610e078561155b565b855160208701209091506000906000818152603e60205260409020549091508015610e3e57610e37811987612799565b8552610f3b565b6000603c6000610e5086603854611649565b81526020019081526020016000205490508087610e6d9190612799565b86526036546001600160a01b03166353f9195e610ebb7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888b6000918252805160209182012090526040902090565b6040518263ffffffff1660e01b8152600401610ed991815260200190565b602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a91906127b0565b15610f3957610f36603754610f2e856112b6565b61271061165f565b85525b505b8351610f46906109e4565b60208501528451610f56906109e4565b60208601525092959194509092505050565b6000610f7381610ff2565b610751826114aa565b60006001600160e01b03198216637965db0b60e01b148061050157506301ffc9a760e01b6001600160e01b0319831614610501565b6000610fe784610fd7876000015160070b886040015186610fd291906127d2565b611748565b610fe2600187611748565b61165f565b90505b949350505050565b610ffc81336117a2565b50565b603580546001600160a01b0319166001600160a01b0385169081179091556039839055603a8290558190336001600160a01b03167f671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b8560405161106491815260200190565b60405180910390a4505050565b61107b82826117fb565b60008281526002602052604090206106b89082611866565b60408051808201909152600080825260208201523390603854839060005b8281101561115e578686828181106110cb576110cb612750565b9050604002018036038101906110e191906127f9565b93506110f182856000015161187b565b6020808601805187516000908152603c90935260409283902055865190519151929450916001600160a01b038816917f85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a779161114e91815260200190565b60405180910390a36001016110b1565b5060385481146111a457603881905560405181906001600160a01b038616907f7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b90600090a35b505050505050565b6111b6828261188a565b60008281526002602052604090206106b890826118f1565b868015806111dc5750858114155b806111e75750838114155b806111f25750818114155b1561121057604051634ec4810560e11b815260040160405180910390fd5b98975050505050505050565b60008061122886610507565b6000888152603d6020526040902090915083806112455750805482115b9250821561129f57818155426001820155604080518381526020810187905287918a916001600160a01b038d16917f60d5fd6d2284807447aae62f93c05517a647b8e8479c3af2c27ee1d1c85b540f910160405180910390a45b50509695505050505050565b805160209091012090565b6000818152603d6020526040812060018101548083036112da575060009392505050565b60006112e68242612847565b835460408051808201909152603b546001600160c01b0381168252600160c01b90046001600160401b03166020820152919250611327919061271084611906565b95945050505050565b604080516080810182526000808252602082018190529181018290526060810191909152600061136960018560400151610fd29061285a565b90506001600160ff1b0381111561139f576040808501519051633e87ca5d60e11b815260039190910b600482015260240161073e565b60006113af6001610fd28661285a565b90506001600160ff1b038111156113df57604051633e87ca5d60e11b8152600385900b600482015260240161073e565b845160009060070b6113f1838561287d565b6113fb91906128c3565b9050677fffffffffffffff81131561144757604086810151875191516329b2fb5560e11b8152600391820b60048201529087900b602482015260079190910b604482015260640161073e565b60405180608001604052808260070b815260200187602001516001600160401b031681526020018660030b81526020018760600151815250935050505092915050565b6000610a8f83836119dc565b6000610501825490565b6107518282611071565b6037819055604051819033907f1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf07390600090a350565b80603b6114ec8282612906565b503390507fa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc6461151e6020840184612948565b61152e6040850160208601612965565b604080516001600160c01b0390931683526001600160401b0390911660208301520160405180910390a250565b600080600080845190505b8083101561164157600085848151811061158257611582612750565b01602001516001600160f81b0319169050600160ff1b8110156115aa57600184019350611635565b600760fd1b6001600160f81b0319821610156115cb57600284019350611635565b600f60fc1b6001600160f81b0319821610156115ec57600384019350611635565b601f60fb1b6001600160f81b03198216101561160d57600484019350611635565b603f60fa1b6001600160f81b03198216101561162e57600584019350611635565b6006840193505b50600190910190611566565b509392505050565b60008183106116585781610a8f565b5090919050565b60008080600019858709858702925082811083820303915050806000036116995783828161168f5761168f6128ad565b0492505050610a8f565b8084116116e05760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161073e565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000808260030b121561177a5761175e8261285a565b61176990600a612a66565b6117739084612a78565b9050610501565b60008260030b131561179b5761179182600a612a66565b6117739084612799565b5081610501565b6117ac8282610a96565b610751576117b981611a06565b6117c4836020611a18565b6040516020016117d5929190612ab0565b60408051601f198184030181529082905262461bcd60e51b825261073e91600401612b25565b6118058282610a96565b6107515760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610a8f836001600160a01b038416611bb3565b60008183116116585781610a8f565b6118948282610a96565b156107515760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610a8f836001600160a01b038416611c02565b60008085602001516001600160401b0316836119229190612a78565b9050801580611939575085516001600160c01b0316155b156119475784915050610fea565b85516001600160c01b03166001600160401b0385160361196b576000915050610fea565b61ffff81111561199157604051637359f25f60e01b81526004810182905260240161073e565b60006119c18760000151866001600160401b0316036001600160c01b0316612710876001600160401b031661165f565b90506119d1868261271085611cf5565b979650505050505050565b60008260000182815481106119f3576119f3612750565b9060005260206000200154905092915050565b60606105016001600160a01b03831660145b60606000611a27836002612799565b611a32906002612b58565b6001600160401b03811115611a4957611a496123d6565b6040519080825280601f01601f191660200182016040528015611a73576020820181803683370190505b509050600360fc1b81600081518110611a8e57611a8e612750565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611abd57611abd612750565b60200101906001600160f81b031916908160001a9053506000611ae1846002612799565b611aec906001612b58565b90505b6001811115611b64576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611b2057611b20612750565b1a60f81b828281518110611b3657611b36612750565b60200101906001600160f81b031916908160001a90535060049490941c93611b5d81612b6b565b9050611aef565b508315610a8f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161073e565b6000818152600183016020526040812054611bfa57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610501565b506000610501565b60008181526001830160205260408120548015611ceb576000611c26600183612847565b8554909150600090611c3a90600190612847565b9050818114611c9f576000866000018281548110611c5a57611c5a612750565b9060005260206000200154905080876000018481548110611c7d57611c7d612750565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611cb057611cb0612b82565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610501565b6000915050610501565b600082841480611d07575061ffff8216155b15611d13575083610fea565b50836000808080611d3461ffff8716611d2b8a611e58565b61ffff16611649565b90505b61ffff811615611d8a57611d518561ffff83168a0a612029565b90945092508315611d6a57829450808603955080820191505b611d83600261ffff83160461ffff168761ffff16611649565b9050611d37565b505b61ffff851615611dfd57611da08488612029565b90935091508215611dbf57600019909401939092508290600101611d8c565b61ffff811615611de457858481611dd857611dd86128ad565b04935060001901611d8c565b611def84888861165f565b600019909501949350611d8c565b6000611e0887611e58565b90505b61ffff821615611e4c576000611e298261ffff168461ffff16611649565b90508061ffff16880a8681611e4057611e406128ad565b04955090910390611e0b565b50505050949350505050565b60006003821015611e6b575060ff919050565b6004821015611e7c57506080919050565b6010821015611e8d57506040919050565b610100821015611e9f57506020919050565b611bdc821015611eb157506014919050565b612c70821015611ec357506013919050565b614aa9821015611ed557506012919050565b618554821015611ee757506011919050565b62010000821015611efa57506010919050565b62021837821015611f0d5750600f919050565b6204e046821015611f205750600e919050565b620ced4c821015611f335750600d919050565b62285146821015611f465750600c919050565b629aa2ad821015611f595750600b919050565b6303080c01821015611f6d5750600a919050565b6315c5cbbd821015611f8157506009919050565b640100000000821015611f9657506008919050565b6417c6a1f29f821015611fab57506007919050565b6506597fa94f5c821015611fc157506006919050565b66093088c35d733b821015611fd857506005919050565b68010000000000000000821015611ff157506004919050565b6a285145f31ae515c447bb5782101561200c57506003919050565b600160801b82101561202057506002919050565b5060015b919050565b60008083600003612040575060019050600061206d565b83830283858281612053576120536128ad565b041461206657600080925092505061206d565b6001925090505b9250929050565b60006020828403121561208657600080fd5b81356001600160e01b031981168114610a8f57600080fd5b6000602082840312156120b057600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b82811015612101576120f184835180518252602090810151910152565b92840192908501906001016120d4565b5091979650505050505050565b6001600160a01b0381168114610ffc57600080fd5b80356120248161210e565b60008060006060848603121561214357600080fd5b833561214e8161210e565b95602085013595506040909401359392505050565b6000806040838503121561217657600080fd5b8235915060208301356121888161210e565b809150509250929050565b60008083601f8401126121a557600080fd5b5081356001600160401b038111156121bc57600080fd5b6020830191508360208260061b850101111561206d57600080fd5b600080602083850312156121ea57600080fd5b82356001600160401b0381111561220057600080fd5b61220c85828601612193565b90969095509350505050565b60008083601f84011261222a57600080fd5b5081356001600160401b0381111561224157600080fd5b6020830191508360208260051b850101111561206d57600080fd5b6000806000806000806000806080898b03121561227857600080fd5b88356001600160401b038082111561228f57600080fd5b61229b8c838d01612218565b909a50985060208b01359150808211156122b457600080fd5b6122c08c838d01612218565b909850965060408b01359150808211156122d957600080fd5b6122e58c838d01612218565b909650945060608b01359150808211156122fe57600080fd5b5061230b8b828c01612218565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b8181101561235957835115158352928401929184019160010161233b565b50909695505050505050565b6000806020838503121561237857600080fd5b82356001600160401b038082111561238f57600080fd5b818501915085601f8301126123a357600080fd5b8135818111156123b257600080fd5b8660208285010111156123c457600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126123fd57600080fd5b81356001600160401b0380821115612417576124176123d6565b604051601f8301601f19908116603f0116810190828211818310171561243f5761243f6123d6565b8160405283815286602085880101111561245857600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561248a57600080fd5b81356001600160401b038111156124a057600080fd5b610fea848285016123ec565b600080604083850312156124bf57600080fd5b50508035926020909101359150565b6000604082840312156124e057600080fd5b50919050565b60008060008060008060008060008060006101408c8e03121561250857600080fd5b6125128c3561210e565b8b359a506001600160401b038060208e0135111561252f57600080fd5b61253f8e60208f01358f01612218565b909b50995060408d013581101561255557600080fd5b506125668d60408e01358e01612193565b909850965060608c0135955061257f8d60808e016124ce565b945060c08c013561258f8161210e565b935061259d60e08d01612123565b92506101008c013591506101208c013590509295989b509295989b9093969950565b600080600080604085870312156125d557600080fd5b84356001600160401b03808211156125ec57600080fd5b6125f888838901612218565b9096509450602087013591508082111561261157600080fd5b5061261e87828801612218565b95989497509550505050565b60006040828403121561263c57600080fd5b610a8f83836124ce565b6000806040838503121561265957600080fd5b82356001600160401b0381111561266f57600080fd5b61267b858286016123ec565b95602094909401359450505050565b825181526020808401518183015282516040830152820151606082015260808101610a8f565b6001600160401b0381168114610ffc57600080fd5b6000608082840312156126d757600080fd5b604051608081018181106001600160401b03821117156126f9576126f96123d6565b6040528251600781900b811461270e57600080fd5b8152602083015161271e816126b0565b60208201526040830151600381900b811461273857600080fd5b60408201526060928301519281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561277857600080fd5b8135610a8f8161210e565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761050157610501612783565b6000602082840312156127c257600080fd5b81518015158114610a8f57600080fd5b600381810b9083900b01637fffffff8113637fffffff198212171561050157610501612783565b60006040828403121561280b57600080fd5b604051604081018181106001600160401b038211171561282d5761282d6123d6565b604052823581526020928301359281019290925250919050565b8181038181111561050157610501612783565b60008160030b637fffffff19810361287457612874612783565b60000392915050565b80820260008212600160ff1b8414161561289957612899612783565b818105831482151761050157610501612783565b634e487b7160e01b600052601260045260246000fd5b6000826128d2576128d26128ad565b600160ff1b8214600019841416156128ec576128ec612783565b500590565b6001600160c01b0381168114610ffc57600080fd5b8135612911816128f1565b81546001600160c01b03199081166001600160c01b03929092169182178355602084013561293e816126b0565b60c01b1617905550565b60006020828403121561295a57600080fd5b8135610a8f816128f1565b60006020828403121561297757600080fd5b8135610a8f816126b0565b600181815b808511156129bd5781600019048211156129a3576129a3612783565b808516156129b057918102915b93841c9390800290612987565b509250929050565b6000826129d457506001610501565b816129e157506000610501565b81600181146129f75760028114612a0157612a1d565b6001915050610501565b60ff841115612a1257612a12612783565b50506001821b610501565b5060208310610133831016604e8410600b8410161715612a40575081810a610501565b612a4a8383612982565b8060001904821115612a5e57612a5e612783565b029392505050565b6000610a8f63ffffffff8416836129c5565b600082612a8757612a876128ad565b500490565b60005b83811015612aa7578181015183820152602001612a8f565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612ae8816017850160208801612a8c565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612b19816028840160208801612a8c565b01602801949350505050565b6020815260008251806020840152612b44816040850160208701612a8c565b601f01601f19169190910160400192915050565b8082018082111561050157610501612783565b600081612b7a57612b7a612783565b506000190190565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a264697066735822122076690926c2db8bd93ce00d4367403bba09c400c1ff6d19c14bc2e66eb1b25abc64736f6c63430008150033", + "nonce": "0x2c8e5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "function": null, + "arguments": [ + "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0xd40ed58c000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000076a700000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000000000000000000000000000000000000000151804cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000024ea4122ae0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000002e24d16b5a80000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000008a6e74420f9" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x145bcd", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65640000000000000000000000007ac1624287b0959d664cced3a01a51a440353b42000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000264d40ed58c000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000076a700000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000000000000000000000000000000000000000151804cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000024ea4122ae0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000002e24d16b5a80000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000008a6e74420f900000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e6" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "transactionType": "CREATE", + "contractName": "RNSReverseRegistrar", + "contractAddress": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x1772f1", + "value": "0x0", + "data": "0x608060405261000d3361001a565b610015610075565b610134565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b600054610100900460ff16156100e15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614610132576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6113db806101436000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638c84331411610097578063c66485b211610066578063c66485b21461020d578063c911994114610220578063d472ad0414610233578063f2fde38b1461024657600080fd5b80638c843314146101bf5780638da5cb5b146101d0578063b93f9b0a146101e7578063c47f0027146101fa57600080fd5b80631e83409a116100d35780631e83409a1461016a5780633efa047f1461017d578063485cc955146101a2578063715018a6146101b757600080fd5b806301ffc9a7146100fa578063092c5b3b146101225780630f5a546614610157575b600080fd5b61010d610108366004610e5b565b610259565b60405190151581526020015b60405180910390f35b6101497f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335781565b604051908152602001610119565b610149610165366004610e9a565b6102ab565b610149610178366004610ed3565b6102d1565b6034546001600160a01b03165b6040516001600160a01b039091168152602001610119565b6101b56101b0366004610e9a565b6102eb565b005b6101b561041f565b6033546001600160a01b031661018a565b6000546201000090046001600160a01b031661018a565b61018a6101f5366004610ef0565b610433565b610149610208366004610f52565b6104f5565b6101b561021b366004610ed3565b610502565b61014961022e366004610f94565b61057b565b610149610241366004610ed3565b61073a565b6101b5610254366004610ed3565b610776565b60006001600160e01b0319821663d96a46ad60e01b148061028a57506001600160e01b031982166301ffc9a760e01b145b806102a557506001600160e01b0319821663d5a614db60e01b145b92915050565b60006102b56107ef565b826102bf8161098e565b6102c98484610acd565b949350505050565b6034546000906102a59083906001600160a01b03166102ab565b600054610100900460ff161580801561030b5750600054600160ff909116105b806103255750303b158015610325575060005460ff166001145b61038d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156103b0576000805461ff0019166101001790555b603380546001600160a01b0319166001600160a01b0384161790556103d483610bb4565b801561041a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610427610c0f565b6104316000610bb4565b565b6033546040516303e9e60960e01b81526004810183905260009182916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610481573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104a9919081019061114e565b805160200151909150600080516020611386833981519152146104df57604051631bf4348160e31b815260040160405180910390fd5b8051604001516104ee90610c70565b9392505050565b60006104ee33848461057b565b61050a610c0f565b6001600160a01b038116610531576040516362daafb160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf90600090a250565b60006105856107ef565b8361058f8161098e565b6105988561073a565b6033546040516331a9108f60e11b8152600481018390529193506001600160a01b03169030908290636352211e90602401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611271565b6001600160a01b031614610656576034546000906106329088906001600160a01b0316610acd565b905083811461065457604051631bf4348160e31b815260040160405180910390fd5b505b6040516303e9e60960e01b8152600481018490526000906001600160a01b038316906303e9e60990602401600060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c6919081019061114e565b602081015151604051637737221360e01b81529192506001600160a01b0316906377372213906106fe9087908a908a9060040161128e565b600060405180830381600087803b15801561071857600080fd5b505af115801561072c573d6000803e3d6000fd5b505050505050509392505050565b60006102a5600080516020611386833981519152610760846001600160a01b0316610d0a565b6000918252805160209182012090526040902090565b61077e610c0f565b6001600160a01b0381166107e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610384565b6107ec81610bb4565b50565b6033546040516331a9108f60e11b8152600080516020611386833981519152600482018190526001600160a01b0390921691906000908390636352211e90602401602060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190611271565b90506001600160a01b0381163014806108fb575060405163020604bf60e21b81526004810183905230906001600160a01b0385169063081812fc90602401602060405180830381865afa1580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f09190611271565b6001600160a01b0316145b80610971575060405163e985e9c560e01b81526001600160a01b03828116600483015230602483015284169063e985e9c590604401602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906112c4565b61041a576040516306b7c75960e31b815260040160405180910390fd5b60335433906001600160a01b03908116908316821480610a395750604051632474521560e21b81527f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335760048201526001600160a01b0383811660248301528216906391d1485490604401602060405180830381865afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3991906112c4565b80610ab1575060405163e985e9c560e01b81526001600160a01b038481166004830152838116602483015282169063e985e9c590604401602060405180830381865afa158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab191906112c4565b61041a576040516282b42960e81b815260040160405180910390fd5b600080610ae2846001600160a01b0316610d0a565b603354604051630570891f60e01b81529192506001600160a01b031690630570891f90610b31906000805160206113868339815191529085908890309067ffffffffffffffff906004016112df565b60408051808303816000875af1158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190611343565b6040519093508391506001600160a01b038616907f53591c13f73c953042ec59cc15c968c03041980e380816e0b08dfcead86c89ac90600090a35092915050565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6000546001600160a01b03620100009091041633146104315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b60008151602814610c9457604051638dc6ac0160e01b815260040160405180910390fd5b6000805b6028811015610d035761010082029150610cd1848281518110610cbd57610cbd61136f565b01602001516001600160f81b031916610d7b565b60ff1660100282019150610cf3848260010181518110610cbd57610cbd61136f565b60ff169190910190600201610c98565b5092915050565b6060602881526020810160285b8015610d74576001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a828201536010840493506001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a82820153601084049350610d17565b5050919050565b60006001600160f81b03198216606160f81b11801590610da95750603360f91b6001600160f81b0319831611155b15610db9575060f81c6056190190565b6001600160f81b03198216604160f81b11801590610de55750602360f91b6001600160f81b0319831611155b15610df5575060f81c6036190190565b6001600160f81b03198216600360fc1b11801590610e215750603960f81b6001600160f81b0319831611155b15610e31575060f81c602f190190565b604051633fd7c86760e01b81526001600160f81b031983166004820152602401610384565b919050565b600060208284031215610e6d57600080fd5b81356001600160e01b0319811681146104ee57600080fd5b6001600160a01b03811681146107ec57600080fd5b60008060408385031215610ead57600080fd5b8235610eb881610e85565b91506020830135610ec881610e85565b809150509250929050565b600060208284031215610ee557600080fd5b81356104ee81610e85565b600060208284031215610f0257600080fd5b5035919050565b60008083601f840112610f1b57600080fd5b50813567ffffffffffffffff811115610f3357600080fd5b602083019150836020828501011115610f4b57600080fd5b9250929050565b60008060208385031215610f6557600080fd5b823567ffffffffffffffff811115610f7c57600080fd5b610f8885828601610f09565b90969095509350505050565b600080600060408486031215610fa957600080fd5b8335610fb481610e85565b9250602084013567ffffffffffffffff811115610fd057600080fd5b610fdc86828701610f09565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561102257611022610fe9565b60405290565b6040516060810167ffffffffffffffff8111828210171561102257611022610fe9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561107457611074610fe9565b604052919050565b60005b8381101561109757818101518382015260200161107f565b50506000910152565b805167ffffffffffffffff81168114610e5657600080fd5b80518015158114610e5657600080fd5b6000608082840312156110da57600080fd5b6040516080810181811067ffffffffffffffff821117156110fd576110fd610fe9565b8060405250809150825161111081610e85565b8152602083015161112081610e85565b6020820152611131604084016110a0565b6040820152611142606084016110b8565b60608201525092915050565b6000602080838503121561116157600080fd5b825167ffffffffffffffff8082111561117957600080fd5b9084019060a0828703121561118d57600080fd5b611195610fff565b8251828111156111a457600080fd5b8301606081890312156111b657600080fd5b6111be611028565b815160ff811681146111cf57600080fd5b815281860151868201526040820151848111156111eb57600080fd5b80830192505088601f83011261120057600080fd5b81518481111561121257611212610fe9565b611224601f8201601f1916880161104b565b9450808552898782850101111561123a57600080fd5b6112498188870189860161107c565b5060408101849052825250611260878486016110c8565b848201528094505050505092915050565b60006020828403121561128357600080fd5b81516104ee81610e85565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156112d657600080fd5b6104ee826110b8565b85815260a06020820152600085518060a08401526113048160c0850160208a0161107c565b6001600160a01b03958616604084015293909416606082015267ffffffffffffffff91909116608082015260c0601f909201601f191601019392505050565b6000806040838503121561135657600080fd5b61135f836110a0565b9150602083015190509250929050565b634e487b7160e01b600052603260045260246000fdfe91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2a264697066735822122049d04f0a54497bd86795b9d36ef715d010bd0683d9b3512d8cfc1fae5778484f64736f6c63430008150033", + "nonce": "0x2c8e7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "function": null, + "arguments": [ + "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0x485cc955000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0xce3be", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656400000000000000000000000049e2f4aa6edd7453a4d9c91cc8fb02fcba68d7ea000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf8300000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8e8" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x68422a6b0ad97b5b1e0b22f5615edc36f1f9162aba8064402b52e15e445c2db3", + "transactionType": "CREATE", + "contractName": "PublicResolver", + "contractAddress": "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x313d44", + "value": "0x0", + "data": "0x60806040526200000e62000014565b620000d8565b6101cd54610100900460ff1615620000825760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b6101cd5460ff90811614620000d6576101cd805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612b7680620000e86000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063691f343111610104578063ac9650d8116100a2578063d700ff3311610071578063d700ff3314610486578063e32954eb146104c7578063e59d895d146104da578063f8014891146104ed57600080fd5b8063ac9650d8146103e5578063c869023314610405578063ce3decdc14610460578063d5fa2b001461047357600080fd5b80638c843314116100de5780638c8433141461039a578063956db465146103ac578063a821a728146103bf578063a8fa5682146103d257600080fd5b8063691f34311461036157806370687fcb14610374578063773722131461038757600080fd5b80633603d758116101715780634cbf6ba41161014b5780634cbf6ba4146102ce57806359d1d43c1461031b5780635c98042b1461033b578063623195b01461034e57600080fd5b80633603d758146102955780633b3b57de146102a8578063485cc955146102bb57600080fd5b8063124a319c116101ad578063124a319c146102245780632203ab561461024f578063237a78fb1461027057806329cd62ea1461028257600080fd5b806301ffc9a7146101d45780630af179d7146101fc57806310f13a8c14610211575b600080fd5b6101e76101e236600461219e565b610500565b60405190151581526020015b60405180910390f35b61020f61020a3660046121fc565b610511565b005b61020f61021f366004612247565b61052d565b6102376102323660046122c0565b61054d565b6040516001600160a01b0390911681526020016101f3565b61026261025d3660046122f0565b610745565b6040516101f3929190612362565b610201546001600160a01b0316610237565b61020f61029036600461237b565b61087e565b61020f6102a33660046123a7565b610894565b6102376102b63660046123a7565b6108ac565b61020f6102c93660046123d5565b61091b565b6101e76102dc3660046122f0565b6000828152603260209081526040808320546001600160401b0316835260ff825280832094835293815283822092825291909152205461ffff16151590565b61032e6103293660046121fc565b610a63565b6040516101f39190612403565b61032e6103493660046123a7565b610b45565b61020f61035c366004612416565b610c06565b61032e61036f3660046123a7565b610c24565b61020f6103823660046121fc565b610dbf565b61020f6103953660046121fc565b610dd5565b610200546001600160a01b0316610237565b6101e76103ba366004612468565b610e20565b61032e6103cd3660046123a7565b610ea5565b61032e6103e036600461248d565b610ee0565b6103f86103f3366004612511565b610f2f565b6040516101f39190612552565b61044b6104133660046123a7565b6000818152603260209081526040808320546001600160401b0316835261019982528083209383529290522080546001909101549091565b604080519283526020830191909152016101f3565b61020f61046e3660046121fc565b610f44565b61020f610481366004612468565b610f5a565b6104af6104943660046123a7565b6000908152603260205260409020546001600160401b031690565b6040516001600160401b0390911681526020016101f3565b6103f86104d53660046125b4565b610fb8565b61020f6104e83660046125f2565b611099565b6103f86104fb366004612637565b6110af565b600061050b826110bc565b92915050565b8261051c81336110e1565b610527848484611143565b50505050565b8461053881336110e1565b610545868686868661133a565b505050505050565b6000828152603260209081526040808320546001600160401b03168352610133825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156105a357905061050b565b60006105ae856108ac565b90506001600160a01b0381166105c95760009250505061050b565b6040516301ffc9a760e01b60248201526000906060906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106229190612672565b600060405180830381855afa9150503d806000811461065d576040519150601f19603f3d011682016040523d82523d6000602084013e610662565b606091505b50909250905061067282826113f5565b61068357600094505050505061050b565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106d99190612672565b600060405180830381855afa9150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50909250905061072982826113f5565b61073a57600094505050505061050b565b509095945050505050565b6000828152603260209081526040808320546001600160401b0316835260658252808320858452909152812060609060015b84811161085e57808516158015906107a75750600081815260208390526040812080546107a39061268e565b9050115b1561085657808260008381526020019081526020016000208080546107cb9061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546107f79061268e565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b50505050509050935093505050610877565b60011b610777565b5060006040518060200160405280600081525092509250505b9250929050565b8261088981336110e1565b610527848484611435565b8061089f81336110e1565b6108a8826114bd565b5050565b610200546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa1580156108f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b91906126c8565b6101cd54610100900460ff161580801561093d57506101cd54600160ff909116105b806109585750303b15801561095857506101cd5460ff166001145b6109c05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6101cd805460ff1916600117905580156109e5576101cd805461ff0019166101001790555b61020080546001600160a01b038086166001600160a01b0319928316179092556102018054928516929091169190911790558015610a5e576101cd805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000838152603260209081526040808320546001600160401b031683526101cc825280832086845290915290819020905160609190610aa590859085906126e5565b90815260200160405180910390208054610abe9061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea9061268e565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b505050505090509392505050565b6000818152603260209081526040808320546001600160401b0316835261010082528083208484529091529020805460609190610b819061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bad9061268e565b8015610bfa5780601f10610bcf57610100808354040283529160200191610bfa565b820191906000526020600020905b815481529060010190602001808311610bdd57829003601f168201915b50505050509050919050565b83610c1181336110e1565b610c1d85858585611527565b5050505050565b61020154604051635c9fcd8560e11b8152600481018390526060916000916001600160a01b039091169063b93f9b0a90602401602060405180830381865afa158015610c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9891906126c8565b90506000610ca5846115c5565b610200546040516304c3ccb160e11b81529192506000916001600160a01b0390911690630987996290610cdc908590600401612403565b602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d91906126f5565b610200546040516331a9108f60e11b8152600481018390529192506001600160a01b0385811692911690636352211e90602401602060405180830381865afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9191906126c8565b6001600160a01b031614610db45760405180602001604052806000815250610db6565b815b95945050505050565b82610dca81336110e1565b610527848484611601565b82610de081336110e1565b6105278484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166b92505050565b6102005460405163fd3fa91960e01b81526001600160a01b0383811660048301526024820185905260186044830152600092169063fd3fa919906064016040805180830381865afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d919061270e565b509392505050565b6000818152603260209081526040808320546001600160401b0316835260cb82528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260fe82528083208684528252808320858452825280832061ffff851684529091529020805460609190610abe9061268e565b6060610f3d600184846116df565b9392505050565b82610f4f81336110e1565b6105278484846117fb565b81610f6581336110e1565b60405162461bcd60e51b815260206004820152602260248201527f5075626c69635265736f6c7665723a2043616e6e6f7420736574206164647265604482015261737360f01b60648201526084016109b7565b606083156110855760005b8281101561108357838382818110610fdd57610fdd61273d565b9050602002810190610fef9190612753565b610ffe91602491600491612799565b611007916127c3565b851461107b5760405162461bcd60e51b815260206004820152603960248201527f5075626c69635265736f6c7665723a20416c6c207265636f726473206d75737460448201527f20686176652061206d61746368696e67206e616d65686173680000000000000060648201526084016109b7565b600101610fc3565b505b611091600184846116df565b949350505050565b826110a481336110e1565b61052784848461192c565b60606110918484846116df565b60006001600160e01b03198216635497184960e01b148061050b575061050b826119c1565b6110eb8282610e20565b6108a85760405162461bcd60e51b815260206004820152602360248201527f5075626c69635265736f6c7665723a20756e617574686f72697a65642063616c6044820152623632b960e91b60648201526084016109b7565b6000838152603260209081526040808320548151601f86018490048402810184019092528482528392606092839285926001600160401b039091169183916111aa9183918c908c908190840183828082843760009201919091525092939250506119e69050565b90505b805151602082015110156112d4578661ffff1660000361121257806040015196506111d781611a47565b9450846040516020016111ea9190612672565b60405160208183030381529060405280519060200120925061120b81611a68565b93506112c6565b600061121d82611a47565b9050816040015161ffff168861ffff16141580611241575061123f8682611a84565b155b156112c45761129d8b878a8d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801518d91506112949082906127f7565b8b51158a611aa2565b8160400151975081602001519650809550858051906020012093506112c182611a68565b94505b505b6112cf81611d0a565b6111ad565b5083511561132f5761132f8985888b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061132691508290508e6127f7565b89511588611aa2565b505050505050505050565b6000858152603260209081526040808320546001600160401b031683526101cc82528083208884529091529081902090518391839161137c90889088906126e5565b90815260200160405180910390209182611397929190612866565b5083836040516113a89291906126e5565b6040518091039020857f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1868686866040516113e6949392919061294e565b60405180910390a35050505050565b60008280611404575060208251105b80610f3d575081601f8151811061141d5761141d61273d565b01602001516001600160f81b03191615905092915050565b6040805180820182528381526020808201848152600087815260328352848120546001600160401b03168152610199835284812088825283528490209251835551600190920191909155815184815290810183905284917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a2505050565b60008181526032602090815260409182902080546001600160401b038082166001011667ffffffffffffffff199091168117909155915191825282917fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a250565b826115336001826127f7565b161561155257604051631e76820d60e31b815260040160405180910390fd5b6000848152603260209081526040808320546001600160401b031683526065825280832087845282528083208684529091529020611591828483612866565b50604051839085907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a350505050565b6000818152603260209081526040808320546001600160401b0316835261016682528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260cb82528083208684529091529020611638828483612866565b50827ff138098ddddc53c41c8649e6533fdf517348a8e9d24e9db5e5628db793fb76b483836040516114b0929190612980565b6000828152603260209081526040808320546001600160401b03168352610166825280832085845290915290206116a28282612994565b50817fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7826040516116d39190612403565b60405180910390a25050565b606081806001600160401b038111156116fa576116fa61280a565b60405190808252806020026020018201604052801561172d57816020015b60608152602001906001900390816117185790505b5091506000606060005b838110156117f057308787838181106117525761175261273d565b90506020028101906117649190612753565b6040516117729291906126e5565b600060405180830381855af49150503d80600081146117ad576040519150601f19603f3d011682016040523d82523d6000602084013e6117b2565b606091505b50909350915087156117ca576117ca83151583611df2565b818582815181106117dd576117dd61273d565b6020908102919091010152600101611737565b505050509392505050565b6000838152603260209081526040808320546001600160401b03168084526101008352818420878552909252822080549192916118379061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546118639061268e565b80156118b05780601f10611885576101008083540402835291602001916118b0565b820191906000526020600020905b81548152906001019060200180831161189357829003601f168201915b505050506001600160401b0384166000908152610100602090815260408083208a845290915290209192506118e89050848683612866565b50847f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f8582868660405161191d93929190612a53565b60405180910390a25050505050565b6000838152603260209081526040808320546001600160401b03168352610133825280832086845282528083206001600160e01b031986168085529083529281902080546001600160a01b0319166001600160a01b038616908117909155905190815285917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a3505050565b60006001600160e01b031982166304920eeb60e41b148061050b575061050b82611e15565b611a346040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c0810182905261050b81611d0a565b6020810151815160609161050b91611a5f9082611e3a565b84519190611e94565b60a081015160c082015160609161050b91611a5f9082906127f7565b600081518351148015610f3d5750610f3d8360008460008751611f0a565b865160208801206000611ab6878787611e94565b90508315611bdd576001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611b009061268e565b159050611b5e576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611b4283612a83565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611b9e91612132565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611bd0929190612aa1565b60405180910390a2611cfe565b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611c1f9061268e565b9050600003611c7f576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611c6383612ac7565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611cc08282612994565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611cf593929190612ae8565b60405180910390a25b50505050505050505050565b60c08101516020820181905281515111611d215750565b6000611d3582600001518360200151611e3a565b8260200151611d449190612b17565b8251909150611d539082611f2d565b61ffff166040830152611d67600282612b17565b8251909150611d769082611f2d565b61ffff166060830152611d8a600282612b17565b8251909150611d999082611f55565b63ffffffff166080830152611daf600482612b17565b8251909150600090611dc19083611f2d565b61ffff169050611dd2600283612b17565b60a084018190529150611de58183612b17565b60c0909301929092525050565b816108a85780518015611e06578060208301fd5b5063350c20f16000526004601cfd5b60006001600160e01b0319821663e1a460d960e01b148061050b575061050b82611f7f565b6000815b83518110611e4e57611e4e612b2a565b6000611e5a8583611fa4565b60ff169050611e6a816001612b17565b611e749083612b17565b915080600003611e845750611e8a565b50611e3e565b61109183826127f7565b8251606090611ea38385612b17565b1115611eae57600080fd5b6000826001600160401b03811115611ec857611ec861280a565b6040519080825280601f01601f191660200182016040528015611ef2576020820181803683370190505b5090506020808201908686010161073a828287611fc8565b6000611f1784848461201e565b611f2287878561201e565b149695505050505050565b8151600090611f3d836002612b17565b1115611f4857600080fd5b50016002015161ffff1690565b8151600090611f65836004612b17565b1115611f7057600080fd5b50016004015163ffffffff1690565b60006001600160e01b03198216630f140b1160e11b148061050b575061050b82612042565b6000828281518110611fb857611fb861273d565b016020015160f81c905092915050565b602081106120005781518352611fdf602084612b17565b9250611fec602083612b17565b9150611ff96020826127f7565b9050611fc8565b905182516020929092036101000a6000190180199091169116179052565b825160009061202d8385612b17565b111561203857600080fd5b5091016020012090565b60006001600160e01b0319821663f7d7b8c160e01b148061050b575061050b8260006001600160e01b0319821663a20b2f5560e01b148061209357506001600160e01b031982166392a5e8f760e01b145b8061050b575061050b8260006001600160e01b0319821663d849d8e360e01b148061050b575061050b8260006001600160e01b03198216637760be6f60e11b148061050b575061050b8260006001600160e01b031982166320191f7360e11b148061050b575061050b8260006001600160e01b0319821663e103286b60e01b148061050b57506301ffc9a760e01b6001600160e01b031983161461050b565b50805461213e9061268e565b6000825580601f1061214e575050565b601f01602090049060005260206000209081019061216c919061216f565b50565b5b808211156121845760008155600101612170565b5090565b6001600160e01b03198116811461216c57600080fd5b6000602082840312156121b057600080fd5b8135610f3d81612188565b60008083601f8401126121cd57600080fd5b5081356001600160401b038111156121e457600080fd5b60208301915083602082850101111561087757600080fd5b60008060006040848603121561221157600080fd5b8335925060208401356001600160401b0381111561222e57600080fd5b61223a868287016121bb565b9497909650939450505050565b60008060008060006060868803121561225f57600080fd5b8535945060208601356001600160401b038082111561227d57600080fd5b61228989838a016121bb565b909650945060408801359150808211156122a257600080fd5b506122af888289016121bb565b969995985093965092949392505050565b600080604083850312156122d357600080fd5b8235915060208301356122e581612188565b809150509250929050565b6000806040838503121561230357600080fd5b50508035926020909101359150565b60005b8381101561232d578181015183820152602001612315565b50506000910152565b6000815180845261234e816020860160208601612312565b601f01601f19169290920160200192915050565b8281526040602082015260006110916040830184612336565b60008060006060848603121561239057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156123b957600080fd5b5035919050565b6001600160a01b038116811461216c57600080fd5b600080604083850312156123e857600080fd5b82356123f3816123c0565b915060208301356122e5816123c0565b602081526000610f3d6020830184612336565b6000806000806060858703121561242c57600080fd5b843593506020850135925060408501356001600160401b0381111561245057600080fd5b61245c878288016121bb565b95989497509550505050565b6000806040838503121561247b57600080fd5b8235915060208301356122e5816123c0565b6000806000606084860312156124a257600080fd5b8335925060208401359150604084013561ffff811681146124c257600080fd5b809150509250925092565b60008083601f8401126124df57600080fd5b5081356001600160401b038111156124f657600080fd5b6020830191508360208260051b850101111561087757600080fd5b6000806020838503121561252457600080fd5b82356001600160401b0381111561253a57600080fd5b612546858286016124cd565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156125a757603f19888603018452612595858351612336565b94509285019290850190600101612579565b5092979650505050505050565b6000806000604084860312156125c957600080fd5b8335925060208401356001600160401b038111156125e657600080fd5b61223a868287016124cd565b60008060006060848603121561260757600080fd5b83359250602084013561261981612188565b915060408401356124c2816123c0565b801515811461216c57600080fd5b60008060006040848603121561264c57600080fd5b833561265781612629565b925060208401356001600160401b038111156125e657600080fd5b60008251612684818460208701612312565b9190910192915050565b600181811c908216806126a257607f821691505b6020821081036126c257634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156126da57600080fd5b8151610f3d816123c0565b8183823760009101908152919050565b60006020828403121561270757600080fd5b5051919050565b6000806040838503121561272157600080fd5b825161272c81612629565b60208401519092506122e581612188565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261276a57600080fd5b8301803591506001600160401b0382111561278457600080fd5b60200191503681900382131561087757600080fd5b600080858511156127a957600080fd5b838611156127b657600080fd5b5050820193919092039150565b8035602083101561050b57600019602084900360031b1b1692915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561050b5761050b6127e1565b634e487b7160e01b600052604160045260246000fd5b601f821115610a5e57600081815260208120601f850160051c810160208610156128475750805b601f850160051c820191505b8181101561054557828155600101612853565b6001600160401b0383111561287d5761287d61280a565b6128918361288b835461268e565b83612820565b6000601f8411600181146128c557600085156128ad5750838201355b600019600387901b1c1916600186901b178355610c1d565b600083815260209020601f19861690835b828110156128f657868501358255602094850194600190920191016128d6565b50868210156129135760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612962604083018688612925565b8281036020840152612975818587612925565b979650505050505050565b602081526000611091602083018486612925565b81516001600160401b038111156129ad576129ad61280a565b6129c1816129bb845461268e565b84612820565b602080601f8311600181146129f657600084156129de5750858301515b600019600386901b1c1916600185901b178555610545565b600085815260208120601f198616915b82811015612a2557888601518255948401946001909101908401612a06565b5085821015612a435787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000612a666040830186612336565b8281036020840152612a79818587612925565b9695505050505050565b600061ffff821680612a9757612a976127e1565b6000190192915050565b604081526000612ab46040830185612336565b905061ffff831660208301529392505050565b600061ffff808316818103612ade57612ade6127e1565b6001019392505050565b606081526000612afb6060830186612336565b61ffff851660208401528281036040840152612a798185612336565b8082018082111561050b5761050b6127e1565b634e487b7160e01b600052600160045260246000fdfea264697066735822122071bbc4bff126add9e96885c48993935407bf76c98e0f32dfd2c1c91c3f35e40664736f6c63430008150033", + "nonce": "0x2c8e9" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "function": null, + "arguments": [ + "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0x485cc955000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf830000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0xd3d3f", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000933cd2272831334f1e46977bcc36153c8027dee8000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd700000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf830000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf71600000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8ea" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd8a479a76c31593e7feabb2f6b015593694ea059bdace9060b7376027824ceba", + "transactionType": "CREATE", + "contractName": "RONRegistrarController", + "contractAddress": "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x35bce3", + "value": "0x0", + "data": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612f2d80620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a610245366004612041565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f336600461206b565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d610358366004612099565b610745565b005b34801561036b57600080fd5b5061035d61037a366004612099565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b8366004612099565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d6104283660046120c9565b610815565b61035d61043b3660046120fb565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d61047336600461217d565b6109d8565b34801561048457600080fd5b5061035d610493366004612284565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612414565b610cdd565b3480156104ea57600080fd5b506102a26104f93660046124cf565b610e0b565b34801561050a57600080fd5b5061024a610519366004612099565b610e2a565b34801561052a57600080fd5b5061024a6105393660046124f1565b610e55565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e3660046124f1565b610ee3565b34801561057f57600080fd5b5061027361058e36600461252d565b610f6e565b34801561059f57600080fd5b5061035d6105ae36600461206b565b61101e565b3480156105bf57600080fd5b506103086105ce36600461206b565b611032565b61035d6105e1366004612573565b611049565b3480156105f257600080fd5b5061035d610601366004612099565b611156565b34801561061257600080fd5b50610308610621366004612573565b61117b565b34801561063257600080fd5b5061035d6106413660046124cf565b6111fc565b34801561065257600080fd5b50610308600080516020612ed883398151915281565b34801561067457600080fd5b5061035d6106833660046120c9565b611211565b34801561069457600080fd5b5061035d6106a336600461206b565b61123f565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f73660046124f1565b611298565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f826112d5565b92915050565b6000828152600260205260409020600101546107608161130a565b61076a8383611314565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611336565b5050565b600080516020612ed883398151915261080a8161130a565b610812611358565b50565b60006108208161130a565b6107ee826113aa565b610831611401565b610839611449565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610f6e915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac823461264d565b905060006108ef86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061129892505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109739190612660565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126a6565b60405180910390a282156109c3576109c333846114a2565b6109cb611507565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612ed88339815191528b61151d565b610aca60008c61151d565b610ad3836113aa565b610adc86611527565b610ae6878961155e565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae8161130a565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc6126da565b9050602002013581526020019081526020016000206000888885818110610c2557610c256126da565b9050602002016020810190610c3a91906120c9565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac9594939291906126f0565b60405180910390a250505050505050565b600080516020612ed8833981519152610cd58161130a565b6108126115e8565b610ce5611401565b610ced611449565b6000610cf888611298565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d6f9190810190612868565b602090810151606001516000848152603f835260408082206001600160a01b038d168352909352919091205490915060ff16811580610dac575080155b15610dd25789898383604051631fc5717160e01b81526004016107db9493929190612976565b600080610ddf8c8b611625565b91509150610df48c8c8c8c8c8c8c898961167d565b5050505050610e0260018055565b50505050505050565b6000828152600360205260408120610e2390836117a7565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e62836117b3565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610e9b9085906004016129b0565b602060405180830381865afa158015610eb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edc91906129c3565b1592915050565b6000610eee82610e55565b801561073f5750603a546001600160a01b03166396e494e8610f0f84611298565b6040518263ffffffff1660e01b8152600401610f2d91815260200190565b602060405180830381865afa158015610f4a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129c3565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fa990899089906004016129e0565b608060405180830381865afa158015610fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fea9190612a3b565b80518251929450909250610ffd91612a70565b9350806020015182602001516110139190612a70565b925050509250929050565b60006110298161130a565b6107ee82611527565b600081815260036020526040812061073f906118a1565b611051611401565b611059611449565b600061106489611298565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110ae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d69190810190612868565b6020015160600151156110fe57886040516331597a5760e21b81526004016107db91906129b0565b60006111108a8a8a8a8a8a8a8a61117b565b905061111d8a89836118ab565b60008061112a8c8b611625565b9150915061113f8c8c8c8b8b8b8b898961167d565b5050505061114c60018055565b5050505050505050565b6000828152600260205260409020600101546111718161130a565b61076a8383611336565b6000821580159061119357506001600160a01b038516155b156111b1576040516334fd817160e21b815260040160405180910390fd5b6111ba89611298565b888888888888886040516020016111d8989796959493929190612b14565b60405160208183030381529060405280519060200120905098975050505050505050565b60006112078161130a565b61076a838361155e565b600061121c8161130a565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b611247611401565b6037546000828152603e6020526040902054429161126491612a70565b1061128557604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b6108128133611985565b61131e82826119b8565b600082815260036020526040902061076a9082611a3e565b6113408282611a53565b600082815260036020526040902061076a9082611aba565b611360611acf565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114475760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b60026001540361149b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114ae8383611b18565b90508061076a576114c7836001600160a01b0316611b8e565b6114d083611ba4565b6040516020016114e1929190612b74565b60408051601f198184030181529082905262461bcd60e51b82526107db916004016129b0565b603954611447906001600160a01b0316476114a2565b6107ee8282611314565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c906020016113f6565b4281111561157f57604051630b4319e560e21b815260040160405180910390fd5b81811161159f576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b6115f0611401565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861138d3390565b6000806116328484610f6e565b9092509050348111156116585760405163044044a560e21b815260040160405180910390fd5b3481810390821461166d5761166d33826114a2565b50611676611507565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b81526004016116e9959493929190612bf2565b60408051808303816000875af1158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b9190612c3d565b909250905085156117425761174288828989611bbb565b8415611752576117528b8b611c39565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117929493929190612c6b565b60405180910390a35050505050505050505050565b6000610e238383611cd0565b600080600080845190505b808310156118995760008584815181106117da576117da6126da565b01602001516001600160f81b0319169050600160ff1b8110156118025760018401935061188d565b600760fd1b6001600160f81b0319821610156118235760028401935061188d565b600f60fc1b6001600160f81b0319821610156118445760038401935061188d565b601f60fb1b6001600160f81b0319821610156118655760048401935061188d565b603f60fa1b6001600160f81b0319821610156118865760058401935061188d565b6006840193505b506001909101906117be565b509392505050565b600061073f825490565b603854826001600160401b031610156118e2576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6118eb83610ee3565b61190a57826040516308eee0fd60e31b81526004016107db91906129b0565b6000818152603e6020526040812054611923904261264d565b905060365481101561194b57604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119715760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e60205260408120555050565b61198f8282610e2a565b6107ee5761199c81611b8e565b6119a7836020611cfa565b6040516020016114e1929190612ca3565b6119c28282610e2a565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff191660011790556119fa3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e23836001600160a01b038416611e95565b611a5d8282610e2a565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e23836001600160a01b038416611ee4565b60005460ff166114475760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b429190612d18565b60006040518083038185875af1925050503d8060008114611b7f576040519150601f19603f3d011682016040523d82523d6000602084013e611b84565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611cfa565b606061073f82611bb384611fd7565b600101611cfa565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611beb90869086908690600401612d34565b6000604051808303816000875af1158015611c0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c329190810190612d57565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c61908690602001612e2e565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611c8d929190612e56565b6020604051808303816000875af1158015611cac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612e7a565b6000826000018281548110611ce757611ce76126da565b9060005260206000200154905092915050565b60606000611d09836002612e93565b611d14906002612a70565b6001600160401b03811115611d2b57611d2b612307565b6040519080825280601f01601f191660200182016040528015611d55576020820181803683370190505b509050600360fc1b81600081518110611d7057611d706126da565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611d9f57611d9f6126da565b60200101906001600160f81b031916908160001a9053506000611dc3846002612e93565b611dce906001612a70565b90505b6001811115611e46576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e0257611e026126da565b1a60f81b828281518110611e1857611e186126da565b60200101906001600160f81b031916908160001a90535060049490941c93611e3f81612eaa565b9050611dd1565b508315610e235760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611edc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015611fcd576000611f0860018361264d565b8554909150600090611f1c9060019061264d565b9050818114611f81576000866000018281548110611f3c57611f3c6126da565b9060005260206000200154905080876000018481548110611f5f57611f5f6126da565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611f9257611f92612ec1565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c15611fef5760809290921c916010015b604083901c156120045760409290921c916008015b602083901c156120195760209290921c916004015b601083901c1561202e5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561205357600080fd5b81356001600160e01b031981168114610e2357600080fd5b60006020828403121561207d57600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120ac57600080fd5b8235915060208301356120be81612084565b809150509250929050565b6000602082840312156120db57600080fd5b8135610e2381612084565b6001600160401b038116811461081257600080fd5b60008060006040848603121561211057600080fd5b83356001600160401b038082111561212757600080fd5b818601915086601f83011261213b57600080fd5b81358181111561214a57600080fd5b87602082850101111561215c57600080fd5b60209283019550935050840135612172816120e6565b809150509250925092565b6000806000806000806000806000806101408b8d03121561219d57600080fd5b8a356121a881612084565b995060208b01356121b881612084565b985060408b01356121c881612084565b975060608b0135965060808b0135955060a08b0135945060c08b01356121ed81612084565b935060e08b01356121fd81612084565b92506101008b013561220e81612084565b91506101208b013561221f81612084565b809150509295989b9194979a5092959850565b60008083601f84011261224457600080fd5b5081356001600160401b0381111561225b57600080fd5b6020830191508360208260051b850101111561167657600080fd5b801515811461081257600080fd5b60008060008060006060868803121561229c57600080fd5b85356001600160401b03808211156122b357600080fd5b6122bf89838a01612232565b909750955060208801359150808211156122d857600080fd5b506122e588828901612232565b90945092505060408601356122f981612276565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561233f5761233f612307565b60405290565b604051606081016001600160401b038111828210171561233f5761233f612307565b604051601f8201601f191681016001600160401b038111828210171561238f5761238f612307565b604052919050565b60006001600160401b038211156123b0576123b0612307565b50601f01601f191660200190565b600082601f8301126123cf57600080fd5b81356123e26123dd82612397565b612367565b8181528460208386010111156123f757600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561242f57600080fd5b87356001600160401b038082111561244657600080fd5b6124528b838c016123be565b985060208a0135915061246482612084565b909650604089013590612476826120e6565b90955060608901359061248882612084565b9094506080890135908082111561249e57600080fd5b506124ab8a828b01612232565b90945092505060a08801356124bf81612276565b8091505092959891949750929550565b600080604083850312156124e257600080fd5b50508035926020909101359150565b60006020828403121561250357600080fd5b81356001600160401b0381111561251957600080fd5b612525848285016123be565b949350505050565b6000806040838503121561254057600080fd5b82356001600160401b0381111561255657600080fd5b612562858286016123be565b92505060208301356120be816120e6565b60008060008060008060008060e0898b03121561258f57600080fd5b88356001600160401b03808211156125a657600080fd5b6125b28c838d016123be565b995060208b013591506125c482612084565b90975060408a0135906125d6826120e6565b90965060608a0135955060808a0135906125ef82612084565b90945060a08a0135908082111561260557600080fd5b506126128b828c01612232565b90945092505060c089013561262681612276565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612637565b60006020828403121561267257600080fd5b8151610e23816120e6565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126ba60608301868861267d565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561271057600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b8783101561276d57833561275081612084565b6001600160a01b031681529281019260019290920191810161273d565b8615156040870152935061278092505050565b9695505050505050565b60005b838110156127a557818101518382015260200161278d565b50506000910152565b60006127bc6123dd84612397565b90508281528383830111156127d057600080fd5b610e2383602083018461278a565b6000608082840312156127f057600080fd5b604051608081018181106001600160401b038211171561281257612812612307565b8060405250809150825161282581612084565b8152602083015161283581612084565b60208201526040830151612848816120e6565b6040820152606083015161285b81612276565b6060919091015292915050565b6000602080838503121561287b57600080fd5b82516001600160401b038082111561289257600080fd5b9084019060a082870312156128a657600080fd5b6128ae61231d565b8251828111156128bd57600080fd5b8301606081890312156128cf57600080fd5b6128d7612345565b815160ff811681146128e857600080fd5b8152818601518682015260408201518481111561290457600080fd5b82019350601f8401891361291757600080fd5b6129258985518887016127ae565b6040820152825250612939878486016127de565b848201528094505050505092915050565b6000815180845261296281602086016020860161278a565b601f01601f19169290920160200192915050565b608081526000612989608083018761294a565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b602081526000610e23602083018461294a565b6000602082840312156129d557600080fd5b8151610e2381612276565b6040815260006129f3604083018561294a565b90506001600160401b03831660208301529392505050565b600060408284031215612a1d57600080fd5b612a2561231d565b9050815181526020820151602082015292915050565b60008060808385031215612a4e57600080fd5b612a588484612a0b565b9150612a678460408501612a0b565b90509250929050565b8082018082111561073f5761073f612637565b81835260006020808501808196508560051b810191508460005b87811015612b075782840389528135601e19883603018112612abe57600080fd5b870185810190356001600160401b03811115612ad957600080fd5b803603821315612ae857600080fd5b612af386828461267d565b9a87019a9550505090840190600101612a9d565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b5d9083018587612a83565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bbf81602a85016020880161278a565b660103b30b63ab2960cd1b602a918401918201528351612be681603184016020880161278a565b01603101949350505050565b85815260a060208201526000612c0b60a083018761294a565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c5057600080fd5b8251612c5b816120e6565b6020939093015192949293505050565b608081526000612c7e608083018761294a565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612cdb81601785016020880161278a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d0c81602884016020880161278a565b01602801949350505050565b60008251612d2a81846020870161278a565b9190910192915050565b838152604060208201526000612d4e604083018486612a83565b95945050505050565b60006020808385031215612d6a57600080fd5b82516001600160401b0380821115612d8157600080fd5b818501915085601f830112612d9557600080fd5b815181811115612da757612da7612307565b8060051b612db6858201612367565b9182528381018501918581019089841115612dd057600080fd5b86860192505b83831015612e2157825185811115612dee5760008081fd5b8601603f81018b13612e005760008081fd5b612e118b89830151604084016127ae565b8352509186019190860190612dd6565b9998505050505050505050565b60008251612e4081846020870161278a565b63173937b760e11b920191825250600401919050565b6001600160a01b03831681526040602082018190526000906125259083018461294a565b600060208284031215612e8c57600080fd5b5051919050565b808202811582820484141761073f5761073f612637565b600081612eb957612eb9612637565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212206a3d52d10991a468c57c6615bb62fcc62fde33eb734d4cc15addc19f2f75fb7b64736f6c63430008150033", + "nonce": "0x2c8eb" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionType": "CREATE", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "function": null, + "arguments": [ + "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "0x64c65705000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000bc07dfda8f91aae03141b98278cb2321e36ec2f300000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab50000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x12e8d0", + "value": "0x0", + "data": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000942b2dc201bacf99fec1f877bdd30c394325f3cc000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd70000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000014464c65705000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000bc07dfda8f91aae03141b98278cb2321e36ec2f300000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab50000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf71600000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8ec" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfcafa09725cd7e3cb2cf509b49bceba0e18fa25a3748c222b6ffa84a66650ccb", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x2154a", + "value": "0x0", + "data": "0x2f2ff15d7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "nonce": "0x2c8ed" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x6813cad5e382b91b0d75dd84fd880cdaa8a376843bcf2b4ec48897509c423361", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x26639", + "value": "0x0", + "data": "0x2f2ff15d87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "nonce": "0x2c8ee" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xdfebf6d29b4938b30b806e3b4ce35efceb7375b00a497723a8dc89d1893c5abb", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x2154a", + "value": "0x0", + "data": "0x2f2ff15d7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa799", + "nonce": "0x2c8ef" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x56bc0", + "value": "0x0", + "data": "0x0570891f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000000000000000000000000003726f6e0000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8f0" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x56c02", + "value": "0x0", + "data": "0x0570891f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000077265766572736500000000000000000000000000000000000000000000000000", + "nonce": "0x2c8f1" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x62d55", + "value": "0x0", + "data": "0x0570891fa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d3400000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000046164647200000000000000000000000000000000000000000000000000000000", + "nonce": "0x2c8f2" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x98814fb702fc8202e3ca381c3ef0b2d33fdef857499e7c8ef7d4b2ced938c00b", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x11021", + "value": "0x0", + "data": "0xa22cb465000000000000000000000000b962edded164f55d136e491a3022246815e1b5a80000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2c8f3" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xc69718e4b0f311aa76c1dcccf3a4b0c4b090ff8462155fa121e32b8eda1ba8c1", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x11021", + "value": "0x0", + "data": "0xa22cb465000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa7990000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2c8f4" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb5da04ebceb3a3ca75a005e56d803fe8c716d5ae28b040572f8f30b63127bc2b", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xf0c99c9677eda0d13291c093b27e6512e4acdf83", + "gas": "0x10cfa", + "value": "0x0", + "data": "0x095ea7b30000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf71691d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2", + "nonce": "0x2c8f5" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xf60851be682c3c0e371b74cad3434c93e214fa5cb91854f27b498834ee1d5901", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x0cc07f120dffdf507a6e983c54bcb402fc6bf716", + "gas": "0x10e42", + "value": "0x0", + "data": "0xc66485b2000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6", + "nonce": "0x2c8f6" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44", + "transactionType": "CALL", + "contractName": "TransparentUpgradeableProxy", + "contractAddress": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0xbc07dfda8f91aae03141b98278cb2321e36ec2f3", + "gas": "0x1e6f019", + "value": "0x0", + "data": "0x245ed6540000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000003f004f09f96950000000000000000000000000000000000000000000000000000000d32206769726c73203120637570000000000000000000000000000000000000043267316300000000000000000000000000000000000000000000000000000004347235650000000000000000000000000000000000000000000000000000000435683174000000000000000000000000000000000000000000000000000000043568697400000000000000000000000000000000000000000000000000000005615f735f73000000000000000000000000000000000000000000000000000003613535000000000000000000000000000000000000000000000000000000000861626f7274696f6e00000000000000000000000000000000000000000000000e6163726f746f6d6f7068696c6961000000000000000000000000000000000012616c6162616d6120686f7420706f636b65740000000000000000000000000010616c61736b616e20706970656c696e6500000000000000000000000000000004616e616c00000000000000000000000000000000000000000000000000000009616e696c696e6775730000000000000000000000000000000000000000000004616e757300000000000000000000000000000000000000000000000000000007617065736869740000000000000000000000000000000000000000000000000461723565000000000000000000000000000000000000000000000000000000056172727365000000000000000000000000000000000000000000000000000004617273650000000000000000000000000000000000000000000000000000000861727365686f6c65000000000000000000000000000000000000000000000003617373000000000000000000000000000000000000000000000000000000000a6173732d6675636b6572000000000000000000000000000000000000000000076173732d6861740000000000000000000000000000000000000000000000000a6173732d70697261746500000000000000000000000000000000000000000006617373626167000000000000000000000000000000000000000000000000000961737362616e646974000000000000000000000000000000000000000000000961737362616e67657200000000000000000000000000000000000000000000076173736269746500000000000000000000000000000000000000000000000008617373636c6f776e000000000000000000000000000000000000000000000007617373636f636b0000000000000000000000000000000000000000000000000a617373637261636b657200000000000000000000000000000000000000000005617373657300000000000000000000000000000000000000000000000000000761737366616365000000000000000000000000000000000000000000000000096173736675636b6572000000000000000000000000000000000000000000000861737366756b6b61000000000000000000000000000000000000000000000009617373676f626c696e000000000000000000000000000000000000000000000661737368617400000000000000000000000000000000000000000000000000076173736865616400000000000000000000000000000000000000000000000007617373686f6c6500000000000000000000000000000000000000000000000008617373686f6c6573000000000000000000000000000000000000000000000009617373686f7070657200000000000000000000000000000000000000000000096173736a61636b657200000000000000000000000000000000000000000000076173736c69636b000000000000000000000000000000000000000000000000096173736c69636b657200000000000000000000000000000000000000000000096173736d6f6e6b657900000000000000000000000000000000000000000000086173736d756e636800000000000000000000000000000000000000000000000a6173736d756e6368657200000000000000000000000000000000000000000009617373706972617465000000000000000000000000000000000000000000000861737373686f6c650000000000000000000000000000000000000000000000096173737375636b65720000000000000000000000000000000000000000000006617373776164000000000000000000000000000000000000000000000000000861737377686f6c65000000000000000000000000000000000000000000000007617373776970650000000000000000000000000000000000000000000000000b6175746f2065726f74696300000000000000000000000000000000000000000a6175746f65726f746963000000000000000000000000000000000000000000056221746368000000000000000000000000000000000000000000000000000005623030627300000000000000000000000000000000000000000000000000000562313763680000000000000000000000000000000000000000000000000000056231746368000000000000000000000000000000000000000000000000000008626162656c616e6400000000000000000000000000000000000000000000000b626162792062617474657200000000000000000000000000000000000000000a62616279206a756963650000000000000000000000000000000000000000000862616c6c2067616700000000000000000000000000000000000000000000000a62616c6c2067726176790000000000000000000000000000000000000000000c62616c6c206b69636b696e67000000000000000000000000000000000000000c62616c6c206c69636b696e67000000000000000000000000000000000000000962616c6c207361636b000000000000000000000000000000000000000000000c62616c6c207375636b696e67000000000000000000000000000000000000000762616c6c6261670000000000000000000000000000000000000000000000000a62616c6c6c69636b65720000000000000000000000000000000000000000000562616c6c7300000000000000000000000000000000000000000000000000000862616c6c7361636b00000000000000000000000000000000000000000000000662616d706f74000000000000000000000000000000000000000000000000000862616e6762726f73000000000000000000000000000000000000000000000008626172656261636b00000000000000000000000000000000000000000000000c626172656c79206c6567616c000000000000000000000000000000000000000b626172656c796c6567616c000000000000000000000000000000000000000009626172656e616b656400000000000000000000000000000000000000000000076261737461726400000000000000000000000000000000000000000000000008626173746172646f00000000000000000000000000000000000000000000000962617374696e61646f000000000000000000000000000000000000000000000362627700000000000000000000000000000000000000000000000000000000046264736d000000000000000000000000000000000000000000000000000000066265616e657200000000000000000000000000000000000000000000000000076265616e65727300000000000000000000000000000000000000000000000008626561737469616c00000000000000000000000000000000000000000000000b626561737469616c69747900000000000000000000000000000000000000000a6265617374696c6974790000000000000000000000000000000000000000000c62656174796f75726d656174000000000000000000000000000000000000000e62656176657220636c656176657200000000000000000000000000000000000b626561766572206c69707300000000000000000000000000000000000000000762656c6c656e64000000000000000000000000000000000000000000000000076265737469616c0000000000000000000000000000000000000000000000000a6265737469616c6974790000000000000000000000000000000000000000000562692b6368000000000000000000000000000000000000000000000000000006626961746368000000000000000000000000000000000000000000000000000962696720626c61636b000000000000000000000000000000000000000000000b626967206272656173747300000000000000000000000000000000000000000c626967206b6e6f636b6572730000000000000000000000000000000000000008626967207469747300000000000000000000000000000000000000000000000662696d626f730000000000000000000000000000000000000000000000000008626972646c6f636b000000000000000000000000000000000000000000000008626973657875616c00000000000000000000000000000000000000000000000562697463680000000000000000000000000000000000000000000000000000076269746368657200000000000000000000000000000000000000000000000008626974636865727300000000000000000000000000000000000000000000000762697463686573000000000000000000000000000000000000000000000000076269746368696e000000000000000000000000000000000000000000000000086269746368696e6700000000000000000000000000000000000000000000000a626c61636b20636f636b0000000000000000000000000000000000000000000d626c6f6e646520616374696f6e00000000000000000000000000000000000017626c6f6e6465206f6e20626c6f6e646520616374696f6e000000000000000006626c6f6f64790000000000000000000000000000000000000000000000000008626c6f77206a6f6200000000000000000000000000000000000000000000000e626c6f7720796f7572206c6f6164000000000000000000000000000000000007626c6f776a6f6200000000000000000000000000000000000000000000000008626c6f776a6f627300000000000000000000000000000000000000000000000b626c756520776166666c65000000000000000000000000000000000000000008626c756d706b696e000000000000000000000000000000000000000000000007626f696f6c617300000000000000000000000000000000000000000000000007626f6c6c6f636b00000000000000000000000000000000000000000000000008626f6c6c6f636b73000000000000000000000000000000000000000000000006626f6c6c6f6b0000000000000000000000000000000000000000000000000006626f6c6c6f780000000000000000000000000000000000000000000000000007626f6e6461676500000000000000000000000000000000000000000000000005626f6e6572000000000000000000000000000000000000000000000000000004626f6f6200000000000000000000000000000000000000000000000000000006626f6f6269650000000000000000000000000000000000000000000000000007626f6f6269657300000000000000000000000000000000000000000000000005626f6f6273000000000000000000000000000000000000000000000000000006626f6f6765720000000000000000000000000000000000000000000000000006626f6f6f62730000000000000000000000000000000000000000000000000007626f6f6f6f627300000000000000000000000000000000000000000000000008626f6f6f6f6f627300000000000000000000000000000000000000000000000a626f6f6f6f6f6f6f627300000000000000000000000000000000000000000005626f6f747900000000000000000000000000000000000000000000000000000a626f6f74792063616c6c000000000000000000000000000000000000000000066272656173740000000000000000000000000000000000000000000000000007627265617374730000000000000000000000000000000000000000000000000762726f7468656c0000000000000000000000000000000000000000000000000d62726f776e2073686f776572730000000000000000000000000000000000000f6272756e6574746520616374696f6e000000000000000000000000000000000662756365746100000000000000000000000000000000000000000000000000066275646468610000000000000000000000000000000000000000000000000006627567676572000000000000000000000000000000000000000000000000000762756b6b616b650000000000000000000000000000000000000000000000000862756c6c64796b6500000000000000000000000000000000000000000000000b62756c6c6574207669626500000000000000000000000000000000000000000862756c6c7368697400000000000000000000000000000000000000000000000362756d000000000000000000000000000000000000000000000000000000000962756e6720686f6c65000000000000000000000000000000000000000000000862756e67686f6c6500000000000000000000000000000000000000000000000c62756e6e79206675636b657200000000000000000000000000000000000000056275737479000000000000000000000000000000000000000000000000000004627574740000000000000000000000000000000000000000000000000000000b627574742d70697261746500000000000000000000000000000000000000000a62757474636865656b730000000000000000000000000000000000000000000862757474686f6c65000000000000000000000000000000000000000000000009627574746d756e6368000000000000000000000000000000000000000000000862757474706c75670000000000000000000000000000000000000000000000046330636b0000000000000000000000000000000000000000000000000000000a6330636b7375636b65720000000000000000000000000000000000000000000963616d656c20746f65000000000000000000000000000000000000000000000863616d656c746f6500000000000000000000000000000000000000000000000763616d6769726c0000000000000000000000000000000000000000000000000763616d736c75740000000000000000000000000000000000000000000000000863616d77686f726500000000000000000000000000000000000000000000000663616e636572000000000000000000000000000000000000000000000000000e636172706574206d756e6368657200000000000000000000000000000000000d6361727065746d756e63686572000000000000000000000000000000000000086361737472617465000000000000000000000000000000000000000000000008636174686f6c69630000000000000000000000000000000000000000000000046361776b000000000000000000000000000000000000000000000000000000056368696e630000000000000000000000000000000000000000000000000000056368696e6b00000000000000000000000000000000000000000000000000000563686f616400000000000000000000000000000000000000000000000000001263686f636f6c61746520726f736562756473000000000000000000000000000563686f6465000000000000000000000000000000000000000000000000000004636970610000000000000000000000000000000000000000000000000000000a636972636c656a65726b00000000000000000000000000000000000000000004636c317400000000000000000000000000000000000000000000000000000011636c6576656c616e6420737465616d6572000000000000000000000000000004636c697400000000000000000000000000000000000000000000000000000008636c697466616365000000000000000000000000000000000000000000000008636c69746f726973000000000000000000000000000000000000000000000005636c69747300000000000000000000000000000000000000000000000000000d636c6f76657220636c616d70730000000000000000000000000000000000000b636c75737465726675636b000000000000000000000000000000000000000004636e757400000000000000000000000000000000000000000000000000000007636f6361696e6500000000000000000000000000000000000000000000000004636f636b0000000000000000000000000000000000000000000000000000000b636f636b2d7375636b6572000000000000000000000000000000000000000008636f636b62697465000000000000000000000000000000000000000000000009636f636b626c6f636b000000000000000000000000000000000000000000000a636f636b62757267657200000000000000000000000000000000000000000008636f636b66616365000000000000000000000000000000000000000000000008636f636b6865616400000000000000000000000000000000000000000000000a636f636b6a6f636b65790000000000000000000000000000000000000000000a636f636b6b6e6f6b65720000000000000000000000000000000000000000000a636f636b6c69636b65720000000000000000000000000000000000000000000a636f636b6d61737465720000000000000000000000000000000000000000000b636f636b6d6f6e676c657200000000000000000000000000000000000000000c636f636b6d6f6e677275656c000000000000000000000000000000000000000a636f636b6d6f6e6b657900000000000000000000000000000000000000000009636f636b6d756e6368000000000000000000000000000000000000000000000b636f636b6d756e63686572000000000000000000000000000000000000000008636f636b6e6f736500000000000000000000000000000000000000000000000a636f636b6e756767657400000000000000000000000000000000000000000005636f636b73000000000000000000000000000000000000000000000000000008636f636b73686974000000000000000000000000000000000000000000000009636f636b736d697468000000000000000000000000000000000000000000000a636f636b736d6f6b657200000000000000000000000000000000000000000008636f636b7375636b00000000000000000000000000000000000000000000000a636f636b7375636b65640000000000000000000000000000000000000000000a636f636b7375636b65720000000000000000000000000000000000000000000b636f636b7375636b696e67000000000000000000000000000000000000000009636f636b7375636b730000000000000000000000000000000000000000000008636f636b73756b61000000000000000000000000000000000000000000000009636f636b73756b6b610000000000000000000000000000000000000000000003636f6b000000000000000000000000000000000000000000000000000000000a636f6b6d756e6368657200000000000000000000000000000000000000000008636f6b7375636b61000000000000000000000000000000000000000000000006636f6e646f6d0000000000000000000000000000000000000000000000000007636f6f6368696500000000000000000000000000000000000000000000000006636f6f6368790000000000000000000000000000000000000000000000000004636f6f6e00000000000000000000000000000000000000000000000000000005636f6f6e73000000000000000000000000000000000000000000000000000006636f6f746572000000000000000000000000000000000000000000000000000b636f70726f6c61676e696100000000000000000000000000000000000000000b636f70726f7068696c6961000000000000000000000000000000000000000008636f70756c617465000000000000000000000000000000000000000000000008636f726e686f6c65000000000000000000000000000000000000000000000003636f7800000000000000000000000000000000000000000000000000000000046372617000000000000000000000000000000000000000000000000000000008637265616d70696500000000000000000000000000000000000000000000000663726f746368000000000000000000000000000000000000000000000000000363756d000000000000000000000000000000000000000000000000000000000963756d627562626c65000000000000000000000000000000000000000000000b63756d64756d707374657200000000000000000000000000000000000000000a63756d67757a7a6c65720000000000000000000000000000000000000000000963756d6a6f636b6579000000000000000000000000000000000000000000000663756d6d6572000000000000000000000000000000000000000000000000000763756d6d696e670000000000000000000000000000000000000000000000000463756d730000000000000000000000000000000000000000000000000000000763756d73686f740000000000000000000000000000000000000000000000000763756d736c75740000000000000000000000000000000000000000000000000763756d746172740000000000000000000000000000000000000000000000000a63756e696c696e6775730000000000000000000000000000000000000000000b63756e696c6c696e67757300000000000000000000000000000000000000000663756e6e6965000000000000000000000000000000000000000000000000000b63756e6e696c696e67757300000000000000000000000000000000000000000463756e740000000000000000000000000000000000000000000000000000000863756e746661636500000000000000000000000000000000000000000000000863756e74686f6c6500000000000000000000000000000000000000000000000863756e746c69636b00000000000000000000000000000000000000000000000a63756e746c69636b65720000000000000000000000000000000000000000000b63756e746c69636b696e6700000000000000000000000000000000000000000763756e747261670000000000000000000000000000000000000000000000000563756e74730000000000000000000000000000000000000000000000000000066379616c69730000000000000000000000000000000000000000000000000008637962657266756300000000000000000000000000000000000000000000000963796265726675636b000000000000000000000000000000000000000000000b63796265726675636b656400000000000000000000000000000000000000000b63796265726675636b657200000000000000000000000000000000000000000c63796265726675636b657273000000000000000000000000000000000000000c63796265726675636b696e67000000000000000000000000000000000000000863796265727365780000000000000000000000000000000000000000000000046431636b0000000000000000000000000000000000000000000000000000000664616d6d6974000000000000000000000000000000000000000000000000000464616d6e000000000000000000000000000000000000000000000000000000066461726b696500000000000000000000000000000000000000000000000000096461746520726170650000000000000000000000000000000000000000000008646174657261706500000000000000000000000000000000000000000000000b64656570207468726f617400000000000000000000000000000000000000000a646565707468726f61740000000000000000000000000000000000000000000c64656e64726f7068696c696100000000000000000000000000000000000000046469636b000000000000000000000000000000000000000000000000000000076469636b6261670000000000000000000000000000000000000000000000000a6469636b626561746572000000000000000000000000000000000000000000086469636b666163650000000000000000000000000000000000000000000000086469636b686561640000000000000000000000000000000000000000000000086469636b686f6c650000000000000000000000000000000000000000000000096469636b6a7569636500000000000000000000000000000000000000000000086469636b6d696c6b00000000000000000000000000000000000000000000000a6469636b6d6f6e676572000000000000000000000000000000000000000000086469636b736c617000000000000000000000000000000000000000000000000a6469636b7375636b6572000000000000000000000000000000000000000000076469636b7761640000000000000000000000000000000000000000000000000a6469636b77656173656c000000000000000000000000000000000000000000086469636b776565640000000000000000000000000000000000000000000000076469636b776f640000000000000000000000000000000000000000000000000464696b650000000000000000000000000000000000000000000000000000000564696c646f00000000000000000000000000000000000000000000000000000664696c646f73000000000000000000000000000000000000000000000000000d64696e676c65626572726965730000000000000000000000000000000000000b64696e676c65626572727900000000000000000000000000000000000000000464696e6b0000000000000000000000000000000000000000000000000000000564696e6b730000000000000000000000000000000000000000000000000000076469707368697400000000000000000000000000000000000000000000000005646972736100000000000000000000000000000000000000000000000000000d64697274792070696c6c6f77730000000000000000000000000000000000000d64697274792073616e6368657a00000000000000000000000000000000000004646c636b00000000000000000000000000000000000000000000000000000009646f67207374796c65000000000000000000000000000000000000000000000a646f672d6675636b65720000000000000000000000000000000000000000000c646f67676965207374796c65000000000000000000000000000000000000000b646f676769657374796c65000000000000000000000000000000000000000006646f6767696e0000000000000000000000000000000000000000000000000007646f6767696e670000000000000000000000000000000000000000000000000b646f676779207374796c6500000000000000000000000000000000000000000a646f6767797374796c6500000000000000000000000000000000000000000007646f6c636574740000000000000000000000000000000000000000000000000a646f6d696e6174696f6e0000000000000000000000000000000000000000000a646f6d696e617472697800000000000000000000000000000000000000000006646f6d6d6573000000000000000000000000000000000000000000000000000c646f6e6b65792070756e6368000000000000000000000000000000000000000c646f6e6b65797269626265720000000000000000000000000000000000000008646f6f6368626167000000000000000000000000000000000000000000000006646f6f6b69650000000000000000000000000000000000000000000000000005646f6f736800000000000000000000000000000000000000000000000000000b646f75626c6520646f6e67000000000000000000000000000000000000000012646f75626c652070656e6574726174696f6e0000000000000000000000000006646f756368650000000000000000000000000000000000000000000000000009646f756368656261670000000000000000000000000000000000000000000009647020616374696f6e00000000000000000000000000000000000000000000086472792068756d70000000000000000000000000000000000000000000000005647563686500000000000000000000000000000000000000000000000000000764756d626173730000000000000000000000000000000000000000000000000864756d627368697400000000000000000000000000000000000000000000000764756d7368697400000000000000000000000000000000000000000000000004647664610000000000000000000000000000000000000000000000000000000464796b650000000000000000000000000000000000000000000000000000000a656174206d7920617373000000000000000000000000000000000000000000056563636869000000000000000000000000000000000000000000000000000009656a6163756c617465000000000000000000000000000000000000000000000a656a6163756c617465640000000000000000000000000000000000000000000a656a6163756c617465730000000000000000000000000000000000000000000b656a6163756c6174696e6700000000000000000000000000000000000000000c656a6163756c6174696e6773000000000000000000000000000000000000000b656a6163756c6174696f6e000000000000000000000000000000000000000009656a616b756c61746500000000000000000000000000000000000000000000086572656374696f6e00000000000000000000000000000000000000000000000665726f746963000000000000000000000000000000000000000000000000000765726f7469736d000000000000000000000000000000000000000000000000066573636f7274000000000000000000000000000000000000000000000000000665756e756368000000000000000000000000000000000000000000000000000965786372656d656e7400000000000000000000000000000000000000000000076620752063206b0000000000000000000000000000000000000000000000000b6620752063206b20652072000000000000000000000000000000000000000007665f755f635f6b0000000000000000000000000000000000000000000000000566346e6e7900000000000000000000000000000000000000000000000000000366616700000000000000000000000000000000000000000000000000000000066661676261670000000000000000000000000000000000000000000000000004666167670000000000000000000000000000000000000000000000000000000766616767696e670000000000000000000000000000000000000000000000000666616767697400000000000000000000000000000000000000000000000000076661676769747400000000000000000000000000000000000000000000000006666167676f74000000000000000000000000000000000000000000000000000566616767730000000000000000000000000000000000000000000000000000056661676f740000000000000000000000000000000000000000000000000000066661676f747300000000000000000000000000000000000000000000000000046661677300000000000000000000000000000000000000000000000000000007666167746172640000000000000000000000000000000000000000000000000566616e6e7900000000000000000000000000000000000000000000000000000a66616e6e79666c6170730000000000000000000000000000000000000000000b66616e6e796675636b657200000000000000000000000000000000000000000566616e79790000000000000000000000000000000000000000000000000000046661727400000000000000000000000000000000000000000000000000000006666172746564000000000000000000000000000000000000000000000000000766617274696e6700000000000000000000000000000000000000000000000005666172747900000000000000000000000000000000000000000000000000000666617461737300000000000000000000000000000000000000000000000000046663756b000000000000000000000000000000000000000000000000000000066663756b657200000000000000000000000000000000000000000000000000076663756b696e6700000000000000000000000000000000000000000000000005666563616c00000000000000000000000000000000000000000000000000000566656365730000000000000000000000000000000000000000000000000000046665636b000000000000000000000000000000000000000000000000000000066665636b6572000000000000000000000000000000000000000000000000000766656c6174696f0000000000000000000000000000000000000000000000000566656c636800000000000000000000000000000000000000000000000000000866656c6368696e6700000000000000000000000000000000000000000000000766656c6c6174650000000000000000000000000000000000000000000000000866656c6c6174696f00000000000000000000000000000000000000000000000666656c746368000000000000000000000000000000000000000000000000001066656d616c6520737175697274696e670000000000000000000000000000000666656d646f6d000000000000000000000000000000000000000000000000000766696767696e670000000000000000000000000000000000000000000000000a66696e67657262616e670000000000000000000000000000000000000000000a66696e6765726675636b0000000000000000000000000000000000000000000c66696e6765726675636b6564000000000000000000000000000000000000000c66696e6765726675636b6572000000000000000000000000000000000000000d66696e6765726675636b6572730000000000000000000000000000000000000d66696e6765726675636b696e670000000000000000000000000000000000000b66696e6765726675636b7300000000000000000000000000000000000000000966696e676572696e670000000000000000000000000000000000000000000008666973746675636b00000000000000000000000000000000000000000000000a666973746675636b65640000000000000000000000000000000000000000000a666973746675636b65720000000000000000000000000000000000000000000b666973746675636b65727300000000000000000000000000000000000000000b666973746675636b696e6700000000000000000000000000000000000000000c666973746675636b696e67730000000000000000000000000000000000000009666973746675636b73000000000000000000000000000000000000000000000766697374696e6700000000000000000000000000000000000000000000000006666c616d65720000000000000000000000000000000000000000000000000006666c616e67650000000000000000000000000000000000000000000000000004666f6f6b00000000000000000000000000000000000000000000000000000006666f6f6b6572000000000000000000000000000000000000000000000000000b666f6f7420666574697368000000000000000000000000000000000000000007666f6f746a6f620000000000000000000000000000000000000000000000000a666f6f746c69636b65720000000000000000000000000000000000000000000866726f7474696e670000000000000000000000000000000000000000000000046675636b0000000000000000000000000000000000000000000000000000000c6675636b20627574746f6e7300000000000000000000000000000000000000056675636b610000000000000000000000000000000000000000000000000000066675636b656400000000000000000000000000000000000000000000000000066675636b657200000000000000000000000000000000000000000000000000076675636b657273000000000000000000000000000000000000000000000000086675636b686561640000000000000000000000000000000000000000000000096675636b686561647300000000000000000000000000000000000000000000066675636b696e00000000000000000000000000000000000000000000000000076675636b696e67000000000000000000000000000000000000000000000000086675636b696e67730000000000000000000000000000000000000000000000176675636b696e67736869746d6f746865726675636b65720000000000000000066675636b6d6500000000000000000000000000000000000000000000000000056675636b730000000000000000000000000000000000000000000000000000096675636b746172647300000000000000000000000000000000000000000000086675636b776869740000000000000000000000000000000000000000000000076675636b7769740000000000000000000000000000000000000000000000000c6675646765207061636b6572000000000000000000000000000000000000000b66756467657061636b657200000000000000000000000000000000000000000366756b000000000000000000000000000000000000000000000000000000000566756b657200000000000000000000000000000000000000000000000000000666756b6b6572000000000000000000000000000000000000000000000000000666756b6b696e000000000000000000000000000000000000000000000000000466756b730000000000000000000000000000000000000000000000000000000766756b776869740000000000000000000000000000000000000000000000000666756b7769740000000000000000000000000000000000000000000000000008667574616e61726900000000000000000000000000000000000000000000000366757800000000000000000000000000000000000000000000000000000000056675783072000000000000000000000000000000000000000000000000000006672d73706f74000000000000000000000000000000000000000000000000000967616e672062616e67000000000000000000000000000000000000000000000867616e6762616e6700000000000000000000000000000000000000000000000a67616e6762616e6765640000000000000000000000000000000000000000000967616e6762616e67730000000000000000000000000000000000000000000003676179000000000000000000000000000000000000000000000000000000000767617920736578000000000000000000000000000000000000000000000000066761796173730000000000000000000000000000000000000000000000000006676179626f620000000000000000000000000000000000000000000000000005676179646f0000000000000000000000000000000000000000000000000000076761796c6f72640000000000000000000000000000000000000000000000000667617973657800000000000000000000000000000000000000000000000000076761797461726400000000000000000000000000000000000000000000000006676179776164000000000000000000000000000000000000000000000000000767656e6974616c0000000000000000000000000000000000000000000000000867656e6974616c7300000000000000000000000000000000000000000000000a6769616e7420636f636b000000000000000000000000000000000000000000066769676f6c6f00000000000000000000000000000000000000000000000000076769726c206f6e0000000000000000000000000000000000000000000000000b6769726c206f6e20746f7000000000000000000000000000000000000000000f6769726c7320676f6e652077696c640000000000000000000000000000000006676f617463780000000000000000000000000000000000000000000000000006676f617473650000000000000000000000000000000000000000000000000008676f642064616d6e000000000000000000000000000000000000000000000007676f642d64616d0000000000000000000000000000000000000000000000000a676f642d64616d6e656400000000000000000000000000000000000000000007676f6464616d6e00000000000000000000000000000000000000000000000009676f6464616d6e65640000000000000000000000000000000000000000000006676f6b6b756e000000000000000000000000000000000000000000000000000d676f6c64656e2073686f77657200000000000000000000000000000000000009676f6e6f72726865610000000000000000000000000000000000000000000008676f6f206769726c000000000000000000000000000000000000000000000005676f6f6368000000000000000000000000000000000000000000000000000008676f6f64706f6f70000000000000000000000000000000000000000000000004676f6f6b00000000000000000000000000000000000000000000000000000008676f72656761736d0000000000000000000000000000000000000000000000066772696e676f000000000000000000000000000000000000000000000000000567726f706500000000000000000000000000000000000000000000000000000967726f7570207365780000000000000000000000000000000000000000000005677569646f0000000000000000000000000000000000000000000000000000046775726f0000000000000000000000000000000000000000000000000000000868616e64206a6f6200000000000000000000000000000000000000000000000768616e646a6f62000000000000000000000000000000000000000000000000096861726420636f7265000000000000000000000000000000000000000000000868617264636f726500000000000000000000000000000000000000000000000b68617264636f7265736578000000000000000000000000000000000000000004686565620000000000000000000000000000000000000000000000000000000468656c6c0000000000000000000000000000000000000000000000000000000668656e74616900000000000000000000000000000000000000000000000000066865727065730000000000000000000000000000000000000000000000000005686573686500000000000000000000000000000000000000000000000000000c68657465726f73657875616c00000000000000000000000000000000000000066869746c65720000000000000000000000000000000000000000000000000002686f000000000000000000000000000000000000000000000000000000000004686f617200000000000000000000000000000000000000000000000000000005686f617265000000000000000000000000000000000000000000000000000003686f650000000000000000000000000000000000000000000000000000000004686f657200000000000000000000000000000000000000000000000000000004686f6d6f0000000000000000000000000000000000000000000000000000000a686f6d6f65726f7469630000000000000000000000000000000000000000000a686f6d6f73657875616c00000000000000000000000000000000000000000006686f6e6b65790000000000000000000000000000000000000000000000000005686f6e6b79000000000000000000000000000000000000000000000000000006686f6f6b65720000000000000000000000000000000000000000000000000004686f726500000000000000000000000000000000000000000000000000000008686f726e69657374000000000000000000000000000000000000000000000005686f726e79000000000000000000000000000000000000000000000000000007686f73656a6f6200000000000000000000000000000000000000000000000008686f74206361726c000000000000000000000000000000000000000000000009686f7420636869636b0000000000000000000000000000000000000000000006686f74736578000000000000000000000000000000000000000000000000000b686f7720746f206b696c6c00000000000000000000000000000000000000000d686f7720746f206d757264657200000000000000000000000000000000000008687567652066617400000000000000000000000000000000000000000000000768756d70696e67000000000000000000000000000000000000000000000000056964696f74000000000000000000000000000000000000000000000000000006696e63657374000000000000000000000000000000000000000000000000000b696e746572636f7572736500000000000000000000000000000000000000000b696e74657272616369616c0000000000000000000000000000000000000000086a61636b206f66660000000000000000000000000000000000000000000000086a61636b2d6f66660000000000000000000000000000000000000000000000076a61636b617373000000000000000000000000000000000000000000000000076a61636b6f6666000000000000000000000000000000000000000000000000096a61696c206261697400000000000000000000000000000000000000000000086a61696c626169740000000000000000000000000000000000000000000000036a6170000000000000000000000000000000000000000000000000000000000b6a656c6c7920646f6e75740000000000000000000000000000000000000000086a65726b206f66660000000000000000000000000000000000000000000000086a65726b2d6f66660000000000000000000000000000000000000000000000076a65726b6f6666000000000000000000000000000000000000000000000000056a657375730000000000000000000000000000000000000000000000000000066a657769736800000000000000000000000000000000000000000000000000076a696761626f6f000000000000000000000000000000000000000000000000086a69676761626f6f0000000000000000000000000000000000000000000000096a6967676572626f6f00000000000000000000000000000000000000000000046a69736d000000000000000000000000000000000000000000000000000000036a697a00000000000000000000000000000000000000000000000000000000046a697a6d000000000000000000000000000000000000000000000000000000046a697a7a000000000000000000000000000000000000000000000000000000056a756767730000000000000000000000000000000000000000000000000000046b61776b000000000000000000000000000000000000000000000000000000046b696b65000000000000000000000000000000000000000000000000000000076b696e62616b75000000000000000000000000000000000000000000000000086b696e6b737465720000000000000000000000000000000000000000000000056b696e6b790000000000000000000000000000000000000000000000000000056b69756e740000000000000000000000000000000000000000000000000000046b6e6f62000000000000000000000000000000000000000000000000000000086b6e6f6262696e670000000000000000000000000000000000000000000000076b6e6f62656164000000000000000000000000000000000000000000000000066b6e6f62656400000000000000000000000000000000000000000000000000076b6e6f62656e64000000000000000000000000000000000000000000000000086b6e6f62686561640000000000000000000000000000000000000000000000096b6e6f626a6f636b7900000000000000000000000000000000000000000000096b6e6f626a6f6b657900000000000000000000000000000000000000000000046b6f636b000000000000000000000000000000000000000000000000000000066b6f6e64756d00000000000000000000000000000000000000000000000000076b6f6e64756d73000000000000000000000000000000000000000000000000056b6f6f63680000000000000000000000000000000000000000000000000000066b6f6f74636800000000000000000000000000000000000000000000000000036b756d00000000000000000000000000000000000000000000000000000000056b756d65720000000000000000000000000000000000000000000000000000066b756d6d657200000000000000000000000000000000000000000000000000076b756d6d696e67000000000000000000000000000000000000000000000000046b756d730000000000000000000000000000000000000000000000000000000a6b756e696c696e677573000000000000000000000000000000000000000000046b756e74000000000000000000000000000000000000000000000000000000046b796b65000000000000000000000000000000000000000000000000000000066c33692b636800000000000000000000000000000000000000000000000000066c336974636800000000000000000000000000000000000000000000000000056c616269610000000000000000000000000000000000000000000000000000116c65617468657220726573747261696e740000000000000000000000000000176c656174686572207374726169676874206a61636b657400000000000000000b6c656d6f6e2070617274790000000000000000000000000000000000000000076c65736269616e000000000000000000000000000000000000000000000000056c6573626f0000000000000000000000000000000000000000000000000000066c657a7a696500000000000000000000000000000000000000000000000000066c696269646f00000000000000000000000000000000000000000000000000056c6d66616f0000000000000000000000000000000000000000000000000000066c6f6c697461000000000000000000000000000000000000000000000000000a6c6f76656d616b696e67000000000000000000000000000000000000000000046c757374000000000000000000000000000000000000000000000000000000076c757374696e67000000000000000000000000000000000000000000000000046d306630000000000000000000000000000000000000000000000000000000046d30666f0000000000000000000000000000000000000000000000000000000a6d343574657262617465000000000000000000000000000000000000000000086d6135746572623800000000000000000000000000000000000000000000000a6d6135746572626174650000000000000000000000000000000000000000000c6d616b65206d6520636f6d65000000000000000000000000000000000000000e6d616c6520737175697274696e670000000000000000000000000000000000096d6172696a75616e6100000000000000000000000000000000000000000000096d61736f6368697374000000000000000000000000000000000000000000000b6d61737465722d626174650000000000000000000000000000000000000000086d6173746572623800000000000000000000000000000000000000000000000a6d61737465726261742a0000000000000000000000000000000000000000000a6d6173746572626174330000000000000000000000000000000000000000000a6d6173746572626174650000000000000000000000000000000000000000000c6d6173746572626174696f6e000000000000000000000000000000000000000d6d6173746572626174696f6e730000000000000000000000000000000000000a6d6173747572626174650000000000000000000000000000000000000000000a6d6561746265617465720000000000000000000000000000000000000000000e6d656e61676520612074726f69730000000000000000000000000000000000046d696c66000000000000000000000000000000000000000000000000000000056d696e67650000000000000000000000000000000000000000000000000000136d697373696f6e61727920706f736974696f6e000000000000000000000000056d6f2d666f0000000000000000000000000000000000000000000000000000046d6f6630000000000000000000000000000000000000000000000000000000046d6f666f000000000000000000000000000000000000000000000000000000086d6f6c65737465720000000000000000000000000000000000000000000000096d6f6e676f6c6f696400000000000000000000000000000000000000000000066d6f726d6f6e00000000000000000000000000000000000000000000000000056d6f726f6e0000000000000000000000000000000000000000000000000000096d6f7468616675636b000000000000000000000000000000000000000000000a6d6f7468616675636b610000000000000000000000000000000000000000000b6d6f7468616675636b617300000000000000000000000000000000000000000b6d6f7468616675636b617a00000000000000000000000000000000000000000b6d6f7468616675636b656400000000000000000000000000000000000000000b6d6f7468616675636b657200000000000000000000000000000000000000000c6d6f7468616675636b657273000000000000000000000000000000000000000b6d6f7468616675636b696e00000000000000000000000000000000000000000c6d6f7468616675636b696e67000000000000000000000000000000000000000d6d6f7468616675636b696e67730000000000000000000000000000000000000a6d6f7468616675636b730000000000000000000000000000000000000000000d6d6f74686572206675636b65720000000000000000000000000000000000000a6d6f746865726675636b0000000000000000000000000000000000000000000c6d6f746865726675636b6564000000000000000000000000000000000000000c6d6f746865726675636b6572000000000000000000000000000000000000000d6d6f746865726675636b6572730000000000000000000000000000000000000c6d6f746865726675636b696e000000000000000000000000000000000000000d6d6f746865726675636b696e670000000000000000000000000000000000000e6d6f746865726675636b696e677300000000000000000000000000000000000c6d6f746865726675636b6b61000000000000000000000000000000000000000b6d6f746865726675636b7300000000000000000000000000000000000000000e6d6f756e64206f662076656e75730000000000000000000000000000000000086d722068616e64730000000000000000000000000000000000000000000000046d7566660000000000000000000000000000000000000000000000000000000a6d756666206469766572000000000000000000000000000000000000000000096d7566666469766572000000000000000000000000000000000000000000000a6d756666646976696e67000000000000000000000000000000000000000000066d75736c696d00000000000000000000000000000000000000000000000000056d7574686100000000000000000000000000000000000000000000000000000b6d757468616665636b657200000000000000000000000000000000000000000c6d757468616675636b6b657200000000000000000000000000000000000000066d7574686572000000000000000000000000000000000000000000000000000c6d75746865726675636b657200000000000000000000000000000000000000056e316767610000000000000000000000000000000000000000000000000000066e316767657200000000000000000000000000000000000000000000000000066e616d626c6100000000000000000000000000000000000000000000000000076e617761736869000000000000000000000000000000000000000000000000046e617a69000000000000000000000000000000000000000000000000000000056e6567726f0000000000000000000000000000000000000000000000000000076e656f6e617a69000000000000000000000000000000000000000000000000076e6967206e6f67000000000000000000000000000000000000000000000000066e696767337200000000000000000000000000000000000000000000000000066e696767346800000000000000000000000000000000000000000000000000056e696767610000000000000000000000000000000000000000000000000000066e696767616800000000000000000000000000000000000000000000000000066e696767617300000000000000000000000000000000000000000000000000066e696767617a00000000000000000000000000000000000000000000000000066e696767657200000000000000000000000000000000000000000000000000076e696767657273000000000000000000000000000000000000000000000000066e69676c6574000000000000000000000000000000000000000000000000000b6e696d70686f6d616e69610000000000000000000000000000000000000000066e6970706c6500000000000000000000000000000000000000000000000000076e6970706c6573000000000000000000000000000000000000000000000000036e6f6200000000000000000000000000000000000000000000000000000000096e6f62206a6f6b657900000000000000000000000000000000000000000000076e6f6268656164000000000000000000000000000000000000000000000000086e6f626a6f636b790000000000000000000000000000000000000000000000086e6f626a6f6b657900000000000000000000000000000000000000000000000b6e73667720696d616765730000000000000000000000000000000000000000046e756465000000000000000000000000000000000000000000000000000000066e756469747900000000000000000000000000000000000000000000000000086e756d626e7574730000000000000000000000000000000000000000000000076e75747361636b000000000000000000000000000000000000000000000000066e796d70686f000000000000000000000000000000000000000000000000000b6e796d70686f6d616e69610000000000000000000000000000000000000000096f63746f707573737900000000000000000000000000000000000000000000086f6d6f72617368690000000000000000000000000000000000000000000000116f6e65206375702074776f206769726c7300000000000000000000000000000f6f6e6520677579206f6e65206a617200000000000000000000000000000000076f72676173696d000000000000000000000000000000000000000000000000086f72676173696d730000000000000000000000000000000000000000000000066f726761736d00000000000000000000000000000000000000000000000000076f726761736d73000000000000000000000000000000000000000000000000046f726779000000000000000000000000000000000000000000000000000000047030726e0000000000000000000000000000000000000000000000000000000a706165646f7068696c650000000000000000000000000000000000000000000470616b690000000000000000000000000000000000000000000000000000000770616e6f6f63680000000000000000000000000000000000000000000000000770616e746965730000000000000000000000000000000000000000000000000570616e74790000000000000000000000000000000000000000000000000000047061776e000000000000000000000000000000000000000000000000000000067065636b6572000000000000000000000000000000000000000000000000000a7065636b657268656164000000000000000000000000000000000000000000087065646f626561720000000000000000000000000000000000000000000000097065646f7068696c650000000000000000000000000000000000000000000007706565686f6c650000000000000000000000000000000000000000000000000770656767696e670000000000000000000000000000000000000000000000000570656e697300000000000000000000000000000000000000000000000000000b70656e69736675636b657200000000000000000000000000000000000000000970686f6e6520736578000000000000000000000000000000000000000000000870686f6e65736578000000000000000000000000000000000000000000000005706875636b0000000000000000000000000000000000000000000000000000047068756b000000000000000000000000000000000000000000000000000000067068756b656400000000000000000000000000000000000000000000000000077068756b696e67000000000000000000000000000000000000000000000000077068756b6b6564000000000000000000000000000000000000000000000000087068756b6b696e670000000000000000000000000000000000000000000000057068756b73000000000000000000000000000000000000000000000000000004706875710000000000000000000000000000000000000000000000000000000d7069656365206f662073686974000000000000000000000000000000000000097069676675636b6572000000000000000000000000000000000000000000000670696d706973000000000000000000000000000000000000000000000000000370697300000000000000000000000000000000000000000000000000000000057069736573000000000000000000000000000000000000000000000000000005706973696e000000000000000000000000000000000000000000000000000006706973696e6700000000000000000000000000000000000000000000000000057069736f6600000000000000000000000000000000000000000000000000000470697373000000000000000000000000000000000000000000000000000000087069737320706967000000000000000000000000000000000000000000000006706973736564000000000000000000000000000000000000000000000000000670697373657200000000000000000000000000000000000000000000000000077069737365727300000000000000000000000000000000000000000000000006706973736573000000000000000000000000000000000000000000000000000870697373666c617000000000000000000000000000000000000000000000000970697373666c617073000000000000000000000000000000000000000000000670697373696e000000000000000000000000000000000000000000000000000770697373696e6700000000000000000000000000000000000000000000000007706973736f6666000000000000000000000000000000000000000000000000077069737370696700000000000000000000000000000000000000000000000007706c6179626f790000000000000000000000000000000000000000000000000e706c65617375726520636865737400000000000000000000000000000000000b706f6c6520736d6f6b657200000000000000000000000000000000000000000a706f6c65736d6f6b657200000000000000000000000000000000000000000007706f6c6c6f636b00000000000000000000000000000000000000000000000008706f6e79706c6179000000000000000000000000000000000000000000000003706f6f0000000000000000000000000000000000000000000000000000000004706f6f6600000000000000000000000000000000000000000000000000000004706f6f6e00000000000000000000000000000000000000000000000000000007706f6f6e616e6900000000000000000000000000000000000000000000000007706f6f6e616e7900000000000000000000000000000000000000000000000008706f6f6e74616e67000000000000000000000000000000000000000000000004706f6f700000000000000000000000000000000000000000000000000000000a706f6f7020636875746500000000000000000000000000000000000000000009706f6f7063687574650000000000000000000000000000000000000000000004706f726e00000000000000000000000000000000000000000000000000000005706f726e6f00000000000000000000000000000000000000000000000000000b706f726e6f677261706879000000000000000000000000000000000000000006706f726e6f730000000000000000000000000000000000000000000000000005707269636b000000000000000000000000000000000000000000000000000006707269636b7300000000000000000000000000000000000000000000000000167072696e636520616c62657274207069657263696e670000000000000000000470726f6e0000000000000000000000000000000000000000000000000000000a70726f7374697475746500000000000000000000000000000000000000000004707468630000000000000000000000000000000000000000000000000000000470756265000000000000000000000000000000000000000000000000000000057075626573000000000000000000000000000000000000000000000000000005707562696300000000000000000000000000000000000000000000000000000770756e616e6e790000000000000000000000000000000000000000000000000670756e616e79000000000000000000000000000000000000000000000000000570756e74610000000000000000000000000000000000000000000000000000067075736965730000000000000000000000000000000000000000000000000005707573736500000000000000000000000000000000000000000000000000000570757373690000000000000000000000000000000000000000000000000000077075737369657300000000000000000000000000000000000000000000000005707573737900000000000000000000000000000000000000000000000000000c70757373796c69636b696e670000000000000000000000000000000000000006707573737973000000000000000000000000000000000000000000000000000470757379000000000000000000000000000000000000000000000000000000047075746f0000000000000000000000000000000000000000000000000000000571756561660000000000000000000000000000000000000000000000000000057175656566000000000000000000000000000000000000000000000000000005717565657200000000000000000000000000000000000000000000000000000971756565726261697400000000000000000000000000000000000000000000097175656572686f6c6500000000000000000000000000000000000000000000047175696d000000000000000000000000000000000000000000000000000000067261636973740000000000000000000000000000000000000000000000000007726167686561640000000000000000000000000000000000000000000000000c726167696e6720626f6e657200000000000000000000000000000000000000047261706500000000000000000000000000000000000000000000000000000006726170696e670000000000000000000000000000000000000000000000000006726170697374000000000000000000000000000000000000000000000000000672656374756d000000000000000000000000000000000000000000000000000572656e6f62000000000000000000000000000000000000000000000000000006726574617264000000000000000000000000000000000000000000000000000f7265766572736520636f776769726c000000000000000000000000000000000672696d6a6177000000000000000000000000000000000000000000000000000672696d6a6f62000000000000000000000000000000000000000000000000000772696d6d696e6700000000000000000000000000000000000000000000000009726f73792070616c6d000000000000000000000000000000000000000000001b726f73792070616c6d20616e64206865722035207369737465727300000000057275736b6900000000000000000000000000000000000000000000000000000e72757374792074726f6d626f6e650000000000000000000000000000000000057320686974000000000000000000000000000000000000000000000000000007735f685f695f7400000000000000000000000000000000000000000000000006732e6f2e622e000000000000000000000000000000000000000000000000000373266d000000000000000000000000000000000000000000000000000000000673616469736d0000000000000000000000000000000000000000000000000006736164697374000000000000000000000000000000000000000000000000000873616e746f72756d00000000000000000000000000000000000000000000000473636174000000000000000000000000000000000000000000000000000000077363686c6f6e670000000000000000000000000000000000000000000000000a73636973736f72696e67000000000000000000000000000000000000000000087363726577696e670000000000000000000000000000000000000000000000067363726f617400000000000000000000000000000000000000000000000000067363726f746500000000000000000000000000000000000000000000000000077363726f74756d000000000000000000000000000000000000000000000000077363756d6261670000000000000000000000000000000000000000000000000573656d656e00000000000000000000000000000000000000000000000000000373657800000000000000000000000000000000000000000000000000000000047365786f0000000000000000000000000000000000000000000000000000000473657879000000000000000000000000000000000000000000000000000000047368212b0000000000000000000000000000000000000000000000000000000473682174000000000000000000000000000000000000000000000000000000047368317400000000000000000000000000000000000000000000000000000004736861670000000000000000000000000000000000000000000000000000000773686167676572000000000000000000000000000000000000000000000000077368616767696e000000000000000000000000000000000000000000000000087368616767696e6700000000000000000000000000000000000000000000000d736861766564206265617665720000000000000000000000000000000000000c73686176656420707573737900000000000000000000000000000000000000077368656d616c65000000000000000000000000000000000000000000000000047368692b0000000000000000000000000000000000000000000000000000000773686962617269000000000000000000000000000000000000000000000000047368697400000000000000000000000000000000000000000000000000000008736869742d617373000000000000000000000000000000000000000000000008736869742d62616700000000000000000000000000000000000000000000000b736869742d62616767657200000000000000000000000000000000000000000a736869742d627261696e0000000000000000000000000000000000000000000b736869742d627265617468000000000000000000000000000000000000000009736869742d63756e740000000000000000000000000000000000000000000009736869742d6469636b000000000000000000000000000000000000000000000b736869742d656174696e67000000000000000000000000000000000000000009736869742d66616365000000000000000000000000000000000000000000000a736869742d666163656400000000000000000000000000000000000000000008736869742d666974000000000000000000000000000000000000000000000009736869742d686561640000000000000000000000000000000000000000000009736869742d6865656c0000000000000000000000000000000000000000000009736869742d686f6c65000000000000000000000000000000000000000000000a736869742d686f75736500000000000000000000000000000000000000000009736869742d6c6f61640000000000000000000000000000000000000000000008736869742d706f7400000000000000000000000000000000000000000000000c736869742d73706974746572000000000000000000000000000000000000000a736869742d737461696e000000000000000000000000000000000000000000077368697461737300000000000000000000000000000000000000000000000007736869746261670000000000000000000000000000000000000000000000000a736869746261676765720000000000000000000000000000000000000000000973686974626c696d70000000000000000000000000000000000000000000000973686974627261696e000000000000000000000000000000000000000000000a73686974627265617468000000000000000000000000000000000000000000087368697463756e74000000000000000000000000000000000000000000000008736869746469636b000000000000000000000000000000000000000000000005736869746500000000000000000000000000000000000000000000000000000a73686974656174696e670000000000000000000000000000000000000000000673686974656400000000000000000000000000000000000000000000000000067368697465790000000000000000000000000000000000000000000000000008736869746661636500000000000000000000000000000000000000000000000973686974666163656400000000000000000000000000000000000000000000077368697466697400000000000000000000000000000000000000000000000008736869746675636b0000000000000000000000000000000000000000000000087368697466756c6c0000000000000000000000000000000000000000000000087368697468656164000000000000000000000000000000000000000000000008736869746865656c00000000000000000000000000000000000000000000000873686974686f6c6500000000000000000000000000000000000000000000000973686974686f757365000000000000000000000000000000000000000000000773686974696e670000000000000000000000000000000000000000000000000873686974696e6773000000000000000000000000000000000000000000000008736869746c6f616400000000000000000000000000000000000000000000000773686974706f7400000000000000000000000000000000000000000000000005736869747300000000000000000000000000000000000000000000000000000b736869747370697474657200000000000000000000000000000000000000000973686974737461696e000000000000000000000000000000000000000000000773686974746564000000000000000000000000000000000000000000000000077368697474657200000000000000000000000000000000000000000000000008736869747465727300000000000000000000000000000000000000000000000973686974746965737400000000000000000000000000000000000000000000087368697474696e670000000000000000000000000000000000000000000000097368697474696e67730000000000000000000000000000000000000000000006736869747479000000000000000000000000000000000000000000000000000573686974790000000000000000000000000000000000000000000000000000047368697a000000000000000000000000000000000000000000000000000000077368697a6e69740000000000000000000000000000000000000000000000000573686f7461000000000000000000000000000000000000000000000000000009736872696d70696e670000000000000000000000000000000000000000000005736b616e6b000000000000000000000000000000000000000000000000000005736b656574000000000000000000000000000000000000000000000000000008736c616e74657965000000000000000000000000000000000000000000000004736c757400000000000000000000000000000000000000000000000000000007736c757462616700000000000000000000000000000000000000000000000005736c757473000000000000000000000000000000000000000000000000000004736d656700000000000000000000000000000000000000000000000000000006736d65676d610000000000000000000000000000000000000000000000000004736d757400000000000000000000000000000000000000000000000000000006736e61746368000000000000000000000000000000000000000000000000000b736e6f7762616c6c696e67000000000000000000000000000000000000000008736f646f6d697a65000000000000000000000000000000000000000000000006736f646f6d79000000000000000000000000000000000000000000000000000e736f6e2d6f662d612d62697463680000000000000000000000000000000000047370616300000000000000000000000000000000000000000000000000000005737065726d0000000000000000000000000000000000000000000000000000047370696300000000000000000000000000000000000000000000000000000005737069636b00000000000000000000000000000000000000000000000000000773706c6f6f67650000000000000000000000000000000000000000000000000d73706c6f6f6765206d6f6f73650000000000000000000000000000000000000673706f6f6765000000000000000000000000000000000000000000000000000b737072656164206c6567730000000000000000000000000000000000000000057370756e6b0000000000000000000000000000000000000000000000000000087374726170206f6e00000000000000000000000000000000000000000000000773747261706f6e0000000000000000000000000000000000000000000000000973747261707061646f000000000000000000000000000000000000000000000a737472697020636c756200000000000000000000000000000000000000000006737475706964000000000000000000000000000000000000000000000000000b7374796c6520646f6767790000000000000000000000000000000000000000047375636b000000000000000000000000000000000000000000000000000000057375636b73000000000000000000000000000000000000000000000000000007737569636964650000000000000000000000000000000000000000000000000d73756963696465206769726c730000000000000000000000000000000000000c73756c74727920776f6d656e00000000000000000000000000000000000000087377617374696b610000000000000000000000000000000000000000000000077377696e6765720000000000000000000000000000000000000000000000000873797068696c69730000000000000000000000000000000000000000000000077431747431653500000000000000000000000000000000000000000000000007743174746965730000000000000000000000000000000000000000000000000c7461696e746564206c6f7665000000000000000000000000000000000000000474617264000000000000000000000000000000000000000000000000000000087461737465206d7900000000000000000000000000000000000000000000000b7465612062616767696e6700000000000000000000000000000000000000000574656574730000000000000000000000000000000000000000000000000000047465657a00000000000000000000000000000000000000000000000000000008746573746963616c0000000000000000000000000000000000000000000000087465737469636c650000000000000000000000000000000000000000000000097465737469636c657300000000000000000000000000000000000000000000097468726565736f6d6500000000000000000000000000000000000000000000097468726f6174696e67000000000000000000000000000000000000000000000b7468756e64657263756e74000000000000000000000000000000000000000007746965642075700000000000000000000000000000000000000000000000000b746967687420776869746500000000000000000000000000000000000000000374697400000000000000000000000000000000000000000000000000000000077469746675636b0000000000000000000000000000000000000000000000000474697473000000000000000000000000000000000000000000000000000000047469747400000000000000000000000000000000000000000000000000000007746974746965350000000000000000000000000000000000000000000000000c7469747469656675636b657200000000000000000000000000000000000000077469747469657300000000000000000000000000000000000000000000000005746974747900000000000000000000000000000000000000000000000000000974697474796675636b0000000000000000000000000000000000000000000009746974747977616e6b000000000000000000000000000000000000000000000774697477616e6b0000000000000000000000000000000000000000000000000b746f6e67756520696e2061000000000000000000000000000000000000000007746f706c65737300000000000000000000000000000000000000000000000006746f737365720000000000000000000000000000000000000000000000000009746f77656c6865616400000000000000000000000000000000000000000000067472616e6e79000000000000000000000000000000000000000000000000000974726962616469736d0000000000000000000000000000000000000000000008747562206769726c0000000000000000000000000000000000000000000000077475626769726c0000000000000000000000000000000000000000000000000474757264000000000000000000000000000000000000000000000000000000057475736879000000000000000000000000000000000000000000000000000004747734740000000000000000000000000000000000000000000000000000000474776174000000000000000000000000000000000000000000000000000000087477617468656164000000000000000000000000000000000000000000000008747761746c69707300000000000000000000000000000000000000000000000674776174747900000000000000000000000000000000000000000000000000057477696e6b0000000000000000000000000000000000000000000000000000077477696e6b69650000000000000000000000000000000000000000000000001174776f206769726c73206f6e65206375700000000000000000000000000000057477756e740000000000000000000000000000000000000000000000000000077477756e7465720000000000000000000000000000000000000000000000000a756e6472657373696e67000000000000000000000000000000000000000000077570736b6972740000000000000000000000000000000000000000000000000c7572657468726120706c6179000000000000000000000000000000000000000975726f7068696c696100000000000000000000000000000000000000000000067631346772610000000000000000000000000000000000000000000000000005763167726100000000000000000000000000000000000000000000000000000676612d6a2d6a00000000000000000000000000000000000000000000000000037661670000000000000000000000000000000000000000000000000000000006766167696e61000000000000000000000000000000000000000000000000000b76656e7573206d6f756e6400000000000000000000000000000000000000000676696167726100000000000000000000000000000000000000000000000000087669627261746f7200000000000000000000000000000000000000000000000b76696f6c65742077616e64000000000000000000000000000000000000000007766a61796a61790000000000000000000000000000000000000000000000000c766f726172657068696c69610000000000000000000000000000000000000006766f79657572000000000000000000000000000000000000000000000000000576756c7661000000000000000000000000000000000000000000000000000005773030736500000000000000000000000000000000000000000000000000000477616e670000000000000000000000000000000000000000000000000000000477616e6b0000000000000000000000000000000000000000000000000000000677616e6b6572000000000000000000000000000000000000000000000000000577616e6b79000000000000000000000000000000000000000000000000000004776565640000000000000000000000000000000000000000000000000000000977657420647265616d00000000000000000000000000000000000000000000077765746261636b0000000000000000000000000000000000000000000000000b776869746520706f77657200000000000000000000000000000000000000000577686f617200000000000000000000000000000000000000000000000000000577686f726500000000000000000000000000000000000000000000000000000777696c6c6965730000000000000000000000000000000000000000000000000577696c6c7900000000000000000000000000000000000000000000000000000c7772617070696e67206d656e00000000000000000000000000000000000000117772696e6b6c656420737461726669736800000000000000000000000000000678726174656400000000000000000000000000000000000000000000000000027878000000000000000000000000000000000000000000000000000000000003787878000000000000000000000000000000000000000000000000000000000479616f690000000000000000000000000000000000000000000000000000000e79656c6c6f772073686f7765727300000000000000000000000000000000000579696666790000000000000000000000000000000000000000000000000000097a6f6f7068696c696100000000000000000000000000000000000000000000", + "nonce": "0x2c8f7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x553cace89d412b26cc92e89120c8c23086f3c5c9ff96f8b67c64ad0ac93535ac", + "transactionIndex": "0x0", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x39aa32", + "gasUsed": "0x39aa32", + "contractAddress": "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "logs": [ + { + "address": "0x713139B9F92d4f2BC54832a47200B7b8C6718158", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x553cace89d412b26cc92e89120c8c23086f3c5c9ff96f8b67c64ad0ac93535ac", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000008000000000000000000000000000000000000400000400000000000000000000000000000000000000000010000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x4c0a95", + "gasUsed": "0x126063", + "contractAddress": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000713139b9f92d4f2bc54832a47200b7b8c6718158" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x2", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x4", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b108038", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x5", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xf765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6d657461646174612d726e732e736b796d617669732e6f6e652f736169676f6e2f0000000000000000000000000000000000000000000000", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x6", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000076a700", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x7", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x8", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0x9", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0xa", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0xb", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x84fa4fa79315c6056adff711e25a12a884726e647c0817b728888f406777fe84", + "transactionIndex": "0x1", + "logIndex": "0xc", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x000008040000004000000000000004004000000000000000000000000000000080000000000000000000000020000000000000080000000000000000000400040000000000000000000000090090020000000000000c0000000004000000000200000000020000004000000000000800000000800000000000000010000000000000001000000000000000000000008000000000000080100000080000800000000000000000000000000000000400080000000000000000001000000020000000000022000000000400000000040000040000000400080100002000000060000000004000000000000000000400000000008400000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x2273c7150d065f5a4783077c76d3937b84af0d9844ea0f04c7783a3b4aaa9d58", + "transactionIndex": "0x2", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x6c2b21", + "gasUsed": "0x20208c", + "contractAddress": "0xCcD3837278C083027DeF4537b3e66343D940377F", + "logs": [ + { + "address": "0xCcD3837278C083027DeF4537b3e66343D940377F", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2273c7150d065f5a4783077c76d3937b84af0d9844ea0f04c7783a3b4aaa9d58", + "transactionIndex": "0x2", + "logIndex": "0xd", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x796204", + "gasUsed": "0xd36e3", + "contractAddress": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "logs": [ + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000ccd3837278c083027def4537b3e66343d940377f" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0xe", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0xf", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab7067182342" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000003e8", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x10", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x11", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x12", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x13", + "removed": false + }, + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x2d37a1b8a7ec66d0df3b7444e9b5cc101fd2a67c0ac582b8ee0de756d8696bcf", + "transactionIndex": "0x3", + "logIndex": "0x14", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000000000000000000000000400000000000000000000000000000000200000000000000000000002000000000000008000000000000000000000000000000800000000000000000000002000002010000080000000000000000000000000000020000000000000000000800000002800000000000000000000000000000008000000000000000000000000000000000010080000000000100800000000000000004000000000000000400080000000000008000001400000000000000000020000000000000000000040000000000000400000100000000000020000000000000000201000000000000000000000000000000000000000100000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x8be57891432f175fa98311e1e197921abe10650d036cdb3432ce1762287ec002", + "transactionIndex": "0x4", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x90b2f2", + "gasUsed": "0x1750ee", + "contractAddress": "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "logs": [ + { + "address": "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x8be57891432f175fa98311e1e197921abe10650d036cdb3432ce1762287ec002", + "transactionIndex": "0x4", + "logIndex": "0x15", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x9bebd6", + "gasUsed": "0xb38e4", + "contractAddress": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "logs": [ + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000af4a77bc41320bedf62d33ad278d76731eaabcf4" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x16", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x17", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0xaabf778cd749a472313a9476aa3b29565e69697c48eb0f82b52fc9f071fd3c95", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x18", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x19", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xcf82c24c6f0f125c4107c6c72646136ea46eed7f527169d99429dd9bf800fa73", + "transactionIndex": "0x5", + "logIndex": "0x1a", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000000000000400000000000400000000000000000000000000000000000000000000000000000002000000000000000000000000200000000000000000000000000000000000000000402000000000000080000000000000000000000000000020000000000000000010800000000800000000000000000200000000000000000000000000000400000000000000000000080000000000000800000000000000000000000000000000400080000000000000100001000000000000000000020000001000000000000040000000000000400000500000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x75907324b5eaccf7026a2c425bdcd52383335de33068c0124a53d0ab46ccfee1", + "transactionIndex": "0x6", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0xc23034", + "gasUsed": "0x26445e", + "contractAddress": "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "logs": [ + { + "address": "0x7aC1624287b0959D664Cced3A01a51A440353B42", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x75907324b5eaccf7026a2c425bdcd52383335de33068c0124a53d0ab46ccfee1", + "transactionIndex": "0x6", + "logIndex": "0x1b", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0xd1d948", + "gasUsed": "0xfa914", + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "logs": [ + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000007ac1624287b0959d664cced3a01a51a440353b42" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x1c", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x1d", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x1e", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000005" + ], + "data": "0x00000000000000000000000000000000000000000000000000000024ea4122ae", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x1f", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000004" + ], + "data": "0x000000000000000000000000000000000000000000000000000002e24d16b5a8", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x20", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000003" + ], + "data": "0x000000000000000000000000000000000000000000000000000008a6e74420f9", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x21", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000000000000000000000000000000000000000005" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x22", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf073", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x00000000000000000000000000000000000000000000000000000000000005dc" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x23", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0xa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc64", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000076a700", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x24", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729", + "0x4cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x25", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x26", + "removed": false + }, + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x45f02ec1cb2c8dfb1fcefca7df5fde5f441251a611f125b17e4fa35171de35a6", + "transactionIndex": "0x7", + "logIndex": "0x27", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x200800040000004040000000000000204000000000000000a0000000000000000200000000000008008000012000000000000000020000000080000000000000000010000000000000000000000002040002000000083000000000000000a0000800100002000000100000000000080000000080000000000200000000000000000000400000000000000000c000001000000800000080000000000000804000050000000000000020000000000400080400000000808000003200000000400000000020000000000000000000050000000000008400000100000000000020000000000000000001000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "transactionIndex": "0x8", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0xe3e2ee", + "gasUsed": "0x1209a6", + "contractAddress": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "logs": [ + { + "address": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "transactionIndex": "0x8", + "logIndex": "0x28", + "removed": false + }, + { + "address": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x158eb4daa11ee2e6a4b4aed20915abbfcafefc74da2c498f28617f244fc0df6c", + "transactionIndex": "0x8", + "logIndex": "0x29", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000010000000000000000000000000000000000000000000001000000080000000000000000000000000000020000000000000200000800000000000000000000000000000000400000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400080000000000080000000000000000000000000000000000000000000000040000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0xedcd32", + "gasUsed": "0x9ea44", + "contractAddress": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "logs": [ + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000049e2f4aa6edd7453a4d9c91cc8fb02fcba68d7ea" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "logIndex": "0x2a", + "removed": false + }, + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "logIndex": "0x2b", + "removed": false + }, + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "logIndex": "0x2c", + "removed": false + }, + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x38b4d9a7cd7b1b40690884cc9ab61e3f0f0bddfe56d45e54be1736fe0075cfad", + "transactionIndex": "0x9", + "logIndex": "0x2d", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400080000000000200800000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000000002000001000000080000000000000000000000000000020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000800000000001000000000000000000000400080000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000100000000000000008000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x68422a6b0ad97b5b1e0b22f5615edc36f1f9162aba8064402b52e15e445c2db3", + "transactionIndex": "0xa", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x113ad8e", + "gasUsed": "0x25e05c", + "contractAddress": "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "logs": [ + { + "address": "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x68422a6b0ad97b5b1e0b22f5615edc36f1f9162aba8064402b52e15e445c2db3", + "transactionIndex": "0xa", + "logIndex": "0x2e", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000002000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionIndex": "0xb", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x11ddcab", + "gasUsed": "0xa2f1d", + "contractAddress": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "logs": [ + { + "address": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000933cd2272831334f1e46977bcc36153c8027dee8" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionIndex": "0xb", + "logIndex": "0x2f", + "removed": false + }, + { + "address": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionIndex": "0xb", + "logIndex": "0x30", + "removed": false + }, + { + "address": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x444915f15ba54eb51b166701e0f1eed78721a61b2e317bc64da9e10ead7a3db8", + "transactionIndex": "0xb", + "logIndex": "0x31", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000100000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000800000000000000000000000000000000000000004000000000000000000000000000080000000000000800000002000100000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xd8a479a76c31593e7feabb2f6b015593694ea059bdace9060b7376027824ceba", + "transactionIndex": "0xc", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x14732e4", + "gasUsed": "0x295639", + "contractAddress": "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "logs": [ + { + "address": "0x942B2DC201bACF99fec1f877BDD30C394325F3Cc", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xd8a479a76c31593e7feabb2f6b015593694ea059bdace9060b7376027824ceba", + "transactionIndex": "0xc", + "logIndex": "0x32", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000200000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x155be98", + "gasUsed": "0xe8bb4", + "contractAddress": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "logs": [ + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000942b2dc201bacf99fec1f877bdd30c394325f3cc" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x33", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x34", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x35", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0xa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x00000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x36", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x37", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x38", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x39", + "removed": false + }, + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000505d91e8fd2091794b45b27f86c045529fa92cd7", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x41bdc29d05e8416f789b9dca8ad1a075013644b86851b644c915def2ea5ea635", + "transactionIndex": "0xd", + "logIndex": "0x3a", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000800000080000000000000400000000000000000000000000000000000000000000000000000002000000000000000000000010000000000002000000000000002100008000000000002000000000002080000000000200000000000000000020008000000000000000800000000800000000000040000000000000000000000000000000000000000008000000000000080000000000000800000000000000000000000000000000400880000000000000000001000000000000000000020000000000000000000040000080000000400400100002000000020000000000000000000000000000000000000000402000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xfcafa09725cd7e3cb2cf509b49bceba0e18fa25a3748c222b6ffa84a66650ccb", + "transactionIndex": "0xe", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x15740b0", + "gasUsed": "0x18218", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357", + "0x000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xfcafa09725cd7e3cb2cf509b49bceba0e18fa25a3748c222b6ffa84a66650ccb", + "transactionIndex": "0xe", + "logIndex": "0x3b", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000804000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000080000000000000000000000001000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000200000000000000000000000000000000000000000000000000080000000000000000001000000000000000000002000000000000000000000000000000000000000100000000000000000000004000000000000000000400000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x6813cad5e382b91b0d75dd84fd880cdaa8a376843bcf2b4ec48897509c423361", + "transactionIndex": "0xf", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x158fd60", + "gasUsed": "0x1bcb0", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2", + "0x000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0x6813cad5e382b91b0d75dd84fd880cdaa8a376843bcf2b4ec48897509c423361", + "transactionIndex": "0xf", + "logIndex": "0x3c", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000804000000000000000000000400000000000000000000000000000000000000000000008000000000002000000000000000000000000000000000000080000000000000000000000001000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800800000000000000000000200000000000000000000000000000000000000000000000000080000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000200000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xdfebf6d29b4938b30b806e3b4ce35efceb7375b00a497723a8dc89d1893c5abb", + "transactionIndex": "0x10", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x15a7f78", + "gasUsed": "0x18218", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357", + "0x000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa799", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0xecb7ea7e0c48c218f22bd47e7e23fd773b5483c2a951ec6d684a9cd8b427f4d0", + "blockNumber": "0x143db5f", + "transactionHash": "0xdfebf6d29b4938b30b806e3b4ce35efceb7375b00a497723a8dc89d1893c5abb", + "transactionIndex": "0x10", + "logIndex": "0x3d", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000804000000000000000000000400000000000000000000000000400000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001000000000000000000080000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000001000000000000000000002000000000000000000000000000000000000000100000000000000000000004000000000000000000400000000000000000000020000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionIndex": "0x0", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x3ecb5", + "gasUsed": "0x3ecb5", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b", + "0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionIndex": "0x0", + "logIndex": "0x1", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba", + "0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688" + ], + "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000003726f6e0000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x42a82c1b89d85c63bba509dfe32742c026e276f157d0203625d030529d0ef118", + "transactionIndex": "0x0", + "logIndex": "0x2", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x000008000000004000000000000004000000000000000000000000000000000080000000000000000000000020000000000000800000000000000000000400000000000000000000000000090010000000000000000c0000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000080000000000002000000000000000000000000002000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000008000000000010000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionIndex": "0x1", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0x7d99a", + "gasUsed": "0x3ece5", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b", + "0xa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionIndex": "0x1", + "logIndex": "0x3", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0xa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionIndex": "0x1", + "logIndex": "0x4", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba", + "0xa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34" + ], + "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000077265766572736500000000000000000000000000000000000000000000000000", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x03d637b37858ec69fb28cb945338f11a534e514816963fa0842ca59f73681c02", + "transactionIndex": "0x1", + "logIndex": "0x5", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x000008000000004000000000000004000000000000000000000000000000000080000000000000000000000020000000000000000000000000000000000400000000000000000000000000090010000000000000000c0000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000080000000000000000000000000000000000000002000000000000000000000000001000000000000000000000000060000000000000000040000000000000000000008000000000000000000010000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionIndex": "0x2", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0xc12db", + "gasUsed": "0x43941", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b", + "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2", + "0x0000000000000000000000000000000000000000000000000000000000000001" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionIndex": "0x2", + "logIndex": "0x6", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionIndex": "0x2", + "logIndex": "0x7", + "removed": false + }, + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba", + "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2" + ], + "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000046164647200000000000000000000000000000000000000000000000000000000", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x0aab30ebbe0003e80d1df6220a894dd65aba008ccecede4256620b7f763faeec", + "transactionIndex": "0x2", + "logIndex": "0x8", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x000008000000004000000000000004000000000000000000000000000000000080000000000000000000000020000000000000000000000000000000000400000000000000000000000000090010000000000000000c0000000000000000000000000000020000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000080000000000000000008000000000000000000002000000000000000000001000000000000000000000000000000060000000000000000000000000000000000000008000001000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x98814fb702fc8202e3ca381c3ef0b2d33fdef857499e7c8ef7d4b2ced938c00b", + "transactionIndex": "0x3", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0xcccee", + "gasUsed": "0xba13", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x98814fb702fc8202e3ca381c3ef0b2d33fdef857499e7c8ef7d4b2ced938c00b", + "transactionIndex": "0x3", + "logIndex": "0x9", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000080000000000000000000000001000000000000000000080000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000200000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200800000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xc69718e4b0f311aa76c1dcccf3a4b0c4b090ff8462155fa121e32b8eda1ba8c1", + "transactionIndex": "0x4", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0xd8701", + "gasUsed": "0xba13", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa799" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0xc69718e4b0f311aa76c1dcccf3a4b0c4b090ff8462155fa121e32b8eda1ba8c1", + "transactionIndex": "0x4", + "logIndex": "0xa", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400000000000000000000000000400000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001000000000000000000080000000000000000000002000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200800000000000000000000000000000000000000020000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xb5da04ebceb3a3ca75a005e56d803fe8c716d5ae28b040572f8f30b63127bc2b", + "transactionIndex": "0x5", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "cumulativeGasUsed": "0xe49be", + "gasUsed": "0xc2bd", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x0000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716", + "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0xb5da04ebceb3a3ca75a005e56d803fe8c716d5ae28b040572f8f30b63127bc2b", + "transactionIndex": "0x5", + "logIndex": "0xb", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000000000000000000001000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000080000000000000000008000000000000000000000000000000000000000001000000000000000000000040000000000000010000000000000010000000000000000200000001000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xf60851be682c3c0e371b74cad3434c93e214fa5cb91854f27b498834ee1d5901", + "transactionIndex": "0x6", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "cumulativeGasUsed": "0xf0289", + "gasUsed": "0xb8cb", + "contractAddress": null, + "logs": [ + { + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "topics": [ + "0xeae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf", + "0x000000000000000000000000803c459dcb8771e5354d1fc567ecc6885a9fd5e6" + ], + "data": "0x", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0xf60851be682c3c0e371b74cad3434c93e214fa5cb91854f27b498834ee1d5901", + "transactionIndex": "0x6", + "logIndex": "0xc", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001004000000000000000000000000000000000000000000000800000000000000000000000000000008000000000000000000100000000000000000000000100000000000000088000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44", + "transactionIndex": "0x7", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "cumulativeGasUsed": "0x15bf57a", + "gasUsed": "0x14cf2f1", + "contractAddress": null, + "logs": [ + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0xaabf778cd749a472313a9476aa3b29565e69697c48eb0f82b52fc9f071fd3c95", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001b", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44", + "transactionIndex": "0x7", + "logIndex": "0xd", + "removed": false + }, + { + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "topics": [ + "0x060d5a3fc05fdd11d7ba941d00a4fdcde096fb95171930e19997ce2b7df89174", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000003f00000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x302b43c8e6072eb84ecc1b326223c7d359eb95477940779a6f901f33bc2dcd01", + "blockNumber": "0x143db60", + "transactionHash": "0x486842055469fa8f0b6235d694a96ab5dedb4bf071cf73be6d52694284553d44", + "transactionIndex": "0x7", + "logIndex": "0xe", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000400000000000000000000000800000000000000000000000000000000000000000002000000000000000000000000200000000000000000000000000000000000000000400000000000000080000000000000000000000000000000000000000000000010000000000000000000000000000200000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000100000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1697372932, + "chain": 2021, + "multi": false, + "commit": "e0d7c31" +} \ No newline at end of file diff --git a/broadcast/20231020_RNSUpgrade.s.sol/2021/run-1697784642.json b/broadcast/20231020_RNSUpgrade.s.sol/2021/run-1697784642.json new file mode 100644 index 00000000..819abd3f --- /dev/null +++ b/broadcast/20231020_RNSUpgrade.s.sol/2021/run-1697784642.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0xd2305936a8478dbfe257a31fba93e5bf0f8e8198c242ca768316397ac027c2b8", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x993Cab4b697f05BF5221EC78B491C08A148004Bf", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4b4e7c", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614303806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b6103096103043660046134aa565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c3660046134c7565b6107d7565b60405161031591906135b4565b61035161034c366004613642565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b60405161031591906136bf565b6103ba6103b53660046134c7565b610be4565b6040516001600160a01b039091168152602001610315565b6103e760008051602061428e83398151915281565b604051908152602001610315565b6104086104033660046136d2565b610c0b565b005b6103e7610418366004613787565b610d25565b61039a61042b3660046134c7565b610d30565b6103e761043e3660046134c7565b60096020526000908152604090205481565b603f546103e7565b61039a6104663660046134c7565b610d7d565b6104086104793660046137cf565b610e89565b61040861048c366004613810565b61101e565b6103e761049f3660046134c7565b6000908152600160208190526040909120015490565b6104086104c336600461384c565b611050565b6104086104d636600461384c565b6110aa565b6103e76104e93660046136d2565b6110d0565b6103e760008051602061426e83398151915281565b61040861051136600461384c565b611166565b6104086111e4565b61040861052c366004613810565b611207565b61040861053f3660046134c7565b611222565b6103e76105523660046134c7565b611250565b61056a610565366004613878565b6112e3565b6040516001600160401b039091168152602001610315565b61040861059036600461389b565b6113a8565b6104086105a33660046138b6565b6113d1565b603c5460ff16610309565b6103ba6105c13660046134c7565b6113e6565b6103e76105d43660046138f7565b611407565b61040861148d565b6103ba6105ef366004613912565b6114ad565b61030961060236600461384c565b6114cc565b604080518082019091526003815262524e5360e81b602082015261039a565b6103096106343660046134c7565b6114f7565b6103e7600081565b61040861064f366004613944565b611522565b6073546103e7565b61040861066a36600461396e565b61152d565b61040861067d366004613a04565b611745565b61056a6001600160401b0381565b61039a61069e3660046134c7565b611777565b6103e76106b13660046134c7565b6117ea565b6104086106c436600461384c565b611801565b60a7546001600160401b031661056a565b6103e76000805160206142ae83398151915281565b6103096106fd366004613a7f565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613aa9565b611827565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b610408610773366004613878565b611911565b61078b610786366004613b2c565b611992565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611ad3565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df613438565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613b5f565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613b5f565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611af8565b60208201516001600160401b03909116604090910152919050565b600080610938611b74565b6109423389611bbc565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bd892505050565b90506109a9816114f7565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b0316156109ec576109ec81611bee565b6109f68482611c5d565b610a0b426001600160401b0380861690611c70565b9150610a178883611ca6565b610a1f613438565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610a9f91166001613ba9565b60ff1681526020018a815260200189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250509183525082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b2d9082613c10565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b0319909316959096169490941717919091169290921790915551829060008051602061424e83398151915290610bd090600019908590613ccf565b60405180910390a250965096945050505050565b6000610bef82611cec565b506000908152600760205260409020546001600160a01b031690565b6000610c1682611d4b565b9050806001600160a01b0316836001600160a01b031603610c885760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610ca45750610ca481336106fd565b610d165760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610c7f565b610d208383611dab565b505050565b60006107d182611e19565b606081610d3c81611cec565b600083815260a8602090815260408083206009835292819020549051610d659392879101613ce8565b60405160208183030381529060405291505b50919050565b606081600003610d9b57505060408051602081019091526000815290565b600082815260a860205260409020600281018054610db890613b5f565b80601f0160208091040260200160405190810160405280929190818152602001828054610de490613b5f565b8015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b50505050509150806001015492505b8215610d775750600082815260a860209081526040918290209151610e6c918491600285019101613df6565b604051602081830303815290604052915080600101549250610e40565b610e91611b74565b8282610e9d8282611e8c565b610ea5613438565b600086815260a860205260409020600301610eca610ec36006611ead565b8790611ecf565b15610f0b57610edf6080860160608701613ea8565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f18610ec36005611ead565b15610f4e57610f4e87610f31606088016040890161389b565b60208501516001600160401b039091166040909101819052611edb565b610f5b610ec36003611ead565b15610f9157610f6d60208601866138f7565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b8660008051602061424e8339815191528784604051610fb1929190613ccf565b60405180910390a2610fc6610ec36004611ead565b1561101557600087815260a8602090815260409182902060040154611015926001600160a01b0390911691610fff9189019089016138f7565b8960405180602001604052806000815250611fb4565b50505050505050565b611029335b82611fe7565b6110455760405162461bcd60e51b8152600401610c7f90613ec3565b610d20838383612009565b611058611b74565b816110636004611ead565b61106d8282611e8c565b600084815260a8602090815260408083206004015481519283019091529181526110a4916001600160a01b03169085908790611fb4565b50505050565b600082815260016020819052604090912001546110c681612105565b610d20838361210f565b60006110db83611407565b821061113d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610c7f565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146111d65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c7f565b6111e08282612131565b5050565b6000805160206142ae8339815191526111fc81612105565b611204612153565b50565b610d2083838360405180602001604052806000815250611745565b61122b33611023565b6112475760405162461bcd60e51b8152600401610c7f90613ec3565b61120481611bee565b600061125b603f5490565b82106112be5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610c7f565b603f82815481106112d1576112d1613f10565b90600052602060002001549050919050565b60006112ed611b74565b60008051602061428e83398151915261130581612105565b61130d613438565b600085815260a8602052604090206004015461133f906001600160401b03600160a01b90910481169086811690611c70565b6020820180516001600160401b03909216604092830152510151611364908690611edb565b60208101516040015192508460008051602061424e8339815191526113896005611ead565b83604051611398929190613ccf565b60405180910390a2505092915050565b6113b0611b74565b60008051602061428e8339815191526113c881612105565b6111e0826121a5565b60006113dc81612105565b610d2083836121fd565b60006113f182612246565b156113fe57506000919050565b6107d182611d4b565b60006001600160a01b0382166114715760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c7f565b506001600160a01b031660009081526006602052604090205490565b6000805160206142ae8339815191526114a581612105565b611204612262565b60008281526002602052604081206114c5908361229f565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061151a61150583611af8565b60a7546001600160401b0391821691166122ab565b421192915050565b6111e03383836122bf565b600054610100900460ff161580801561154d5750600054600160ff909116105b806115675750303b158015611567575060005460ff166001145b6115ca5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c7f565b6000805460ff1916600117905580156115ed576000805461ff0019166101001790555b6115f860008961210f565b6116106000805160206142ae8339815191528861210f565b61162860008051602061428e8339815191528761210f565b61164060008051602061426e8339815191528661210f565b61164a83836121fd565b611653846121a5565b61165e886000611c5d565b611666613438565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b17905560008051602061424e8339815191526116dd6005611ead565b836040516116ec929190613ccf565b60405180910390a250801561173b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b61174f3383611fe7565b61176b5760405162461bcd60e51b8152600401610c7f90613ec3565b6110a484848484611fb4565b60608161178381611cec565b600061178d61238d565b905060008151116117ad57604051806020016040528060008152506117e2565b806117b73061241f565b6117c086612435565b6040516020016117d293929190613f26565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d1906124c7565b6000828152600160208190526040909120015461181d81612105565b610d208383612131565b60008051602061426e83398151915261183f81612105565b600061184b6006611ead565b90506000611857613438565b602081015185151560609091015260005b8681101561173b5787878281811061188257611882613f10565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461190957600083815260a8602052604090819020600401805460ff60e01b1916600160e01b8915150217905551839060008051602061424e833981519152906119009087908690613ccf565b60405180910390a25b600101611868565b611919611b74565b60008051602061428e83398151915261193181612105565b611939613438565b60208101516001600160401b038416604090910181905261195b908590611edb565b8360008051602061424e8339815191526119756005611ead565b83604051611984929190613ccf565b60405180910390a250505050565b6000806119a0836007611ecf565b156119b757506000905063da698a4d60e01b611acb565b6000848152600560205260409020546001600160a01b03166119e55750600090506304a3dbd560e51b611acb565b6119f96119f26006611ead565b8490611ecf565b8015611a1a5750611a1860008051602061426e833981519152866114cc565b155b15611a3157506000905063c24b0f3f60e01b611acb565b6000611a4b60008051602061428e833981519152876114cc565b9050611a61611a5a6005611ead565b8590611ecf565b8015611a6b575080155b15611a8457506000915063ed4b948760e01b9050611acb565b611a8f846018611ecf565b8015611aa957508080611aa75750611aa78686611bbc565b155b15611ac15750600091506282b42960e81b9050611acb565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d1826124d1565b600081815260056020526040812054611b3b907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b03166114cc565b15611b4e57506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611bba5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c7f565b565b6000611bc88383611fe7565b806114c557506114c58383612511565b6000918252805160209182012090526040902090565b611bf78161256f565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611c30613438565b8160008051602061424e833981519152601883604051611c51929190613ccf565b60405180910390a25050565b6073805460010190556111e08282612612565b600081841180611c7f57508183115b15611c8b5750806114c5565b611c9584846122ab565b9050818111156114c5575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156111e05760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b03166112045760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c7f565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c7f565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611de082611d4b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611e825760006020840160018303810160008052805b828110611e7d57828114602e600183035160f81c1480821715611e7257600186848603030180842060205260406000206000526001810187019650505b505060001901611e35565b505050505b5050600051919050565b600080611e9a338585611992565b91509150816110a4578060005260046000fd5b6000816006811115611ec157611ec1613e92565b60ff166001901b9050919050565b600082821615156114c5565b600082815260a86020526040902060010154611ef79082611ca6565b611f00826114f7565b15611f1e57604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611f6357604051631c21962760e11b815260040160405180910390fd5b611f6b613438565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b611fbf848484612009565b611fcb848484846127ab565b6110a45760405162461bcd60e51b8152600401610c7f90613f76565b6000611ff282612246565b15611fff575060006107d1565b6114c583836128ac565b61201483838361292a565b61201c613438565b60006120286004611ead565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b0319169091179055905061207b60008051602061426e833981519152336114cc565b1580156120a05750600083815260a86020526040902060040154600160e01b900460ff165b156120d657600083815260a860205260409020600401805460ff60e01b191690556120d3816120cf6006611ead565b1790565b90505b8260008051602061424e83398151915282846040516120f6929190613ccf565b60405180910390a25050505050565b6112048133612a9b565b6121198282612af4565b6000828152600260205260409020610d209082612b5f565b61213b8282612b74565b6000828152600260205260409020610d209082612bdb565b61215b612bf0565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461220a828483613fc8565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611c51929190614087565b600061225182611af8565b6001600160401b0316421192915050565b61226a611b74565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121883390565b60006114c58383612c39565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123205760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c7f565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461239c90613b5f565b80601f01602080910402602001604051908101604052809291908181526020018280546123c890613b5f565b80156124155780601f106123ea57610100808354040283529160200191612415565b820191906000526020600020905b8154815290600101906020018083116123f857829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612c63565b6060600061244283612dfe565b60010190506000816001600160401b03811115612461576124616136fc565b6040519080825280601f01601f19166020018201604052801561248b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461249557509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061250257506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612ed6565b6000805b82156125655750600082815260a860205260409020600401546001600160a01b03908116908416810361254c5760019150506107d1565b600092835260a860205260409092206001015491612515565b5060009392505050565b600061257a82611d4b565b905061258a816000846001612efb565b61259382611d4b565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126685760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c7f565b6000818152600560205260409020546001600160a01b0316156126cd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c7f565b6126db600083836001612efb565b6000818152600560205260409020546001600160a01b0316156127405760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c7f565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156128a157604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906127ef9033908990889088906004016140b6565b6020604051808303816000875af192505050801561282a575060408051601f3d908101601f19168201909252612827918101906140f3565b60015b612887573d808015612858576040519150601f19603f3d011682016040523d82523d6000602084013e61285d565b606091505b50805160000361287f5760405162461bcd60e51b8152600401610c7f90613f76565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117e2565b506001949350505050565b6000806128b883611d4b565b9050806001600160a01b0316846001600160a01b031614806128ff57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806117e25750836001600160a01b031661291884610be4565b6001600160a01b031614949350505050565b826001600160a01b031661293d82611d4b565b6001600160a01b0316146129635760405162461bcd60e51b8152600401610c7f90614110565b6001600160a01b0382166129c55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c7f565b6129d28383836001612efb565b826001600160a01b03166129e582611d4b565b6001600160a01b031614612a0b5760405162461bcd60e51b8152600401610c7f90614110565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612aa582826114cc565b6111e057612ab28161241f565b612abd836020612c63565b604051602001612ace929190614155565b60408051601f198184030181529082905262461bcd60e51b8252610c7f916004016136bf565b612afe82826114cc565b6111e05760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006114c5836001600160a01b038416612f07565b612b7e82826114cc565b156111e05760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006114c5836001600160a01b038416612f56565b603c5460ff16611bba5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c7f565b6000826000018281548110612c5057612c50613f10565b9060005260206000200154905092915050565b60606000612c728360026141ca565b612c7d9060026141e1565b6001600160401b03811115612c9457612c946136fc565b6040519080825280601f01601f191660200182016040528015612cbe576020820181803683370190505b509050600360fc1b81600081518110612cd957612cd9613f10565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d0857612d08613f10565b60200101906001600160f81b031916908160001a9053506000612d2c8460026141ca565b612d379060016141e1565b90505b6001811115612daf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612d6b57612d6b613f10565b1a60f81b828281518110612d8157612d81613f10565b60200101906001600160f81b031916908160001a90535060049490941c93612da8816141f4565b9050612d3a565b5083156114c55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c7f565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e3d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e69576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612e8757662386f26fc10000830492506010015b6305f5e1008310612e9f576305f5e100830492506008015b6127108310612eb357612710830492506004015b60648310612ec5576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d182613049565b6110a48484848461307e565b6000818152600183016020526040812054612f4e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b6000818152600183016020526040812054801561303f576000612f7a60018361420b565b8554909150600090612f8e9060019061420b565b9050818114612ff3576000866000018281548110612fae57612fae613f10565b9060005260206000200154905080876000018481548110612fd157612fd1613f10565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130045761300461421e565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b61308a848484846131be565b60018111156130f95760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610c7f565b816001600160a01b0385166131555761315081603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b613178565b836001600160a01b0316856001600160a01b031614613178576131788582613231565b6001600160a01b0384166131945761318f816132ce565b6131b7565b846001600160a01b0316846001600160a01b0316146131b7576131b7848261337d565b5050505050565b6131ca848484846133c1565b603c5460ff16156110a45760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610c7f565b6000600161323e84611407565b613248919061420b565b6000838152603e602052604090205490915080821461329b576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f546000906132e09060019061420b565b600083815260406020819052812054603f805493945090928490811061330857613308613f10565b9060005260206000200154905080603f838154811061332957613329613f10565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133615761336161421e565b6001900381819060005260206000200160009055905550505050565b600061338883611407565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6133cd82846141e1565b81101561343257600081815260096020526040812080549091906133f090614234565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a38061342a81614234565b9150506133c3565b506110a4565b604051806040016040528061346a6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461120457600080fd5b6000602082840312156134bc57600080fd5b81356114c581613494565b6000602082840312156134d957600080fd5b5035919050565b60005b838110156134fb5781810151838201526020016134e3565b50506000910152565b6000815180845261351c8160208601602086016134e0565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e0840152600090613566610100850182613504565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b6020815260006114c56020830184613530565b60008083601f8401126135d957600080fd5b5081356001600160401b038111156135f057600080fd5b60208301915083602082850101111561360857600080fd5b9250929050565b80356001600160a01b038116811461362657600080fd5b919050565b80356001600160401b038116811461362657600080fd5b60008060008060008060a0878903121561365b57600080fd5b8635955060208701356001600160401b0381111561367857600080fd5b61368489828a016135c7565b909650945061369790506040880161360f565b92506136a56060880161360f565b91506136b36080880161362b565b90509295509295509295565b6020815260006114c56020830184613504565b600080604083850312156136e557600080fd5b6136ee8361360f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561372c5761372c6136fc565b604051601f8501601f19908116603f01168101908282118183101715613754576137546136fc565b8160405280935085815286868601111561376d57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561379957600080fd5b81356001600160401b038111156137af57600080fd5b8201601f810184136137c057600080fd5b6117e284823560208401613712565b600080600083850360c08112156137e557600080fd5b84359350602085013592506080603f198201121561380257600080fd5b506040840190509250925092565b60008060006060848603121561382557600080fd5b61382e8461360f565b925061383c6020850161360f565b9150604084013590509250925092565b6000806040838503121561385f57600080fd5b8235915061386f6020840161360f565b90509250929050565b6000806040838503121561388b57600080fd5b8235915061386f6020840161362b565b6000602082840312156138ad57600080fd5b6114c58261362b565b600080602083850312156138c957600080fd5b82356001600160401b038111156138df57600080fd5b6138eb858286016135c7565b90969095509350505050565b60006020828403121561390957600080fd5b6114c58261360f565b6000806040838503121561392557600080fd5b50508035926020909101359150565b8035801515811461362657600080fd5b6000806040838503121561395757600080fd5b6139608361360f565b915061386f60208401613934565b600080600080600080600060c0888a03121561398957600080fd5b6139928861360f565b96506139a06020890161360f565b95506139ae6040890161360f565b94506139bc6060890161360f565b93506139ca6080890161362b565b925060a08801356001600160401b038111156139e557600080fd5b6139f18a828b016135c7565b989b979a50959850939692959293505050565b60008060008060808587031215613a1a57600080fd5b613a238561360f565b9350613a316020860161360f565b92506040850135915060608501356001600160401b03811115613a5357600080fd5b8501601f81018713613a6457600080fd5b613a7387823560208401613712565b91505092959194509250565b60008060408385031215613a9257600080fd5b613a9b8361360f565b915061386f6020840161360f565b600080600060408486031215613abe57600080fd5b83356001600160401b0380821115613ad557600080fd5b818601915086601f830112613ae957600080fd5b813581811115613af857600080fd5b8760208260051b8501011115613b0d57600080fd5b602092830195509350613b239186019050613934565b90509250925092565b600080600060608486031215613b4157600080fd5b613b4a8461360f565b95602085013595506040909401359392505050565b600181811c90821680613b7357607f821691505b602082108103610d7757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613b93565b601f821115610d2057600081815260208120601f850160051c81016020861015613be95750805b601f850160051c820191505b81811015613c0857828155600101613bf5565b505050505050565b81516001600160401b03811115613c2957613c296136fc565b613c3d81613c378454613b5f565b84613bc2565b602080601f831160018114613c725760008415613c5a5750858301515b600019600386901b1c1916600185901b178555613c08565b600085815260208120601f198616915b82811015613ca157888601518255948401946001909101908401613c82565b5085821015613cbf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006117e26040830184613530565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d2581613b5f565b8061016088015261018085831660008114613d475760018114613d6157613d92565b60ff1984168983015282151560051b890182019450613d92565b8560005260208060002060005b85811015613d895781548c8201860152908901908201613d6e565b8b018401965050505b50505050613de26080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e0982858389016134e0565b8184019150601760f91b8252600160008654613e2481613b5f565b8184168015613e3a5760018114613e5357613e83565b60ff198316878601528115158202870185019350613e83565b896000528560002060005b83811015613e79578154898201880152908601908701613e5e565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613eba57600080fd5b6114c582613934565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613f388184602089016134e0565b845190830190613f4c8183602089016134e0565b602f60f81b91019081528351613f698160018401602088016134e0565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b03831115613fdf57613fdf6136fc565b613ff383613fed8354613b5f565b83613bc2565b6000601f841160018114614027576000851561400f5750838201355b600019600387901b1c1916600186901b1783556131b7565b600083815260209020601f19861690835b828110156140585786850135825560209485019460019092019101614038565b50868210156140755760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906140e990830184613504565b9695505050505050565b60006020828403121561410557600080fd5b81516114c581613494565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161418d8160178501602088016134e0565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516141be8160288401602088016134e0565b01602801949350505050565b80820281158282048414176107d1576107d1613b93565b808201808211156107d1576107d1613b93565b60008161420357614203613b93565b506000190190565b818103818111156107d1576107d1613b93565b634e487b7160e01b600052603160045260246000fd5b60006001820161424657614246613b93565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212204db3ed4679558e8429254be43180048fcce7532decc01b27a22e7276258a69e364736f6c63430008150033", + "nonce": "0x2c920" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x1243a7797e99d9a2fddcfc402b8cec153a8c59f108b1bec843f83f5b70c7771f", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000993cab4b697f05bf5221ec78b491c08a148004bf", + "nonce": "0x2c921" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xd2305936a8478dbfe257a31fba93e5bf0f8e8198c242ca768316397ac027c2b8", + "0x1243a7797e99d9a2fddcfc402b8cec153a8c59f108b1bec843f83f5b70c7771f" + ], + "returns": {}, + "timestamp": 1697784642, + "chain": 2021, + "multi": false, + "commit": "3e2ea27" +} \ No newline at end of file diff --git a/broadcast/20231020_RNSUpgrade.s.sol/2021/run-1697784648.json b/broadcast/20231020_RNSUpgrade.s.sol/2021/run-1697784648.json new file mode 100644 index 00000000..df48ae33 --- /dev/null +++ b/broadcast/20231020_RNSUpgrade.s.sol/2021/run-1697784648.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0xd2305936a8478dbfe257a31fba93e5bf0f8e8198c242ca768316397ac027c2b8", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x993Cab4b697f05BF5221EC78B491C08A148004Bf", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4b4e7c", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614303806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b6103096103043660046134aa565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c3660046134c7565b6107d7565b60405161031591906135b4565b61035161034c366004613642565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b60405161031591906136bf565b6103ba6103b53660046134c7565b610be4565b6040516001600160a01b039091168152602001610315565b6103e760008051602061428e83398151915281565b604051908152602001610315565b6104086104033660046136d2565b610c0b565b005b6103e7610418366004613787565b610d25565b61039a61042b3660046134c7565b610d30565b6103e761043e3660046134c7565b60096020526000908152604090205481565b603f546103e7565b61039a6104663660046134c7565b610d7d565b6104086104793660046137cf565b610e89565b61040861048c366004613810565b61101e565b6103e761049f3660046134c7565b6000908152600160208190526040909120015490565b6104086104c336600461384c565b611050565b6104086104d636600461384c565b6110aa565b6103e76104e93660046136d2565b6110d0565b6103e760008051602061426e83398151915281565b61040861051136600461384c565b611166565b6104086111e4565b61040861052c366004613810565b611207565b61040861053f3660046134c7565b611222565b6103e76105523660046134c7565b611250565b61056a610565366004613878565b6112e3565b6040516001600160401b039091168152602001610315565b61040861059036600461389b565b6113a8565b6104086105a33660046138b6565b6113d1565b603c5460ff16610309565b6103ba6105c13660046134c7565b6113e6565b6103e76105d43660046138f7565b611407565b61040861148d565b6103ba6105ef366004613912565b6114ad565b61030961060236600461384c565b6114cc565b604080518082019091526003815262524e5360e81b602082015261039a565b6103096106343660046134c7565b6114f7565b6103e7600081565b61040861064f366004613944565b611522565b6073546103e7565b61040861066a36600461396e565b61152d565b61040861067d366004613a04565b611745565b61056a6001600160401b0381565b61039a61069e3660046134c7565b611777565b6103e76106b13660046134c7565b6117ea565b6104086106c436600461384c565b611801565b60a7546001600160401b031661056a565b6103e76000805160206142ae83398151915281565b6103096106fd366004613a7f565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613aa9565b611827565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b610408610773366004613878565b611911565b61078b610786366004613b2c565b611992565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611ad3565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df613438565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613b5f565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613b5f565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611af8565b60208201516001600160401b03909116604090910152919050565b600080610938611b74565b6109423389611bbc565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bd892505050565b90506109a9816114f7565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b0316156109ec576109ec81611bee565b6109f68482611c5d565b610a0b426001600160401b0380861690611c70565b9150610a178883611ca6565b610a1f613438565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610a9f91166001613ba9565b60ff1681526020018a815260200189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250509183525082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b2d9082613c10565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b0319909316959096169490941717919091169290921790915551829060008051602061424e83398151915290610bd090600019908590613ccf565b60405180910390a250965096945050505050565b6000610bef82611cec565b506000908152600760205260409020546001600160a01b031690565b6000610c1682611d4b565b9050806001600160a01b0316836001600160a01b031603610c885760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610ca45750610ca481336106fd565b610d165760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610c7f565b610d208383611dab565b505050565b60006107d182611e19565b606081610d3c81611cec565b600083815260a8602090815260408083206009835292819020549051610d659392879101613ce8565b60405160208183030381529060405291505b50919050565b606081600003610d9b57505060408051602081019091526000815290565b600082815260a860205260409020600281018054610db890613b5f565b80601f0160208091040260200160405190810160405280929190818152602001828054610de490613b5f565b8015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b50505050509150806001015492505b8215610d775750600082815260a860209081526040918290209151610e6c918491600285019101613df6565b604051602081830303815290604052915080600101549250610e40565b610e91611b74565b8282610e9d8282611e8c565b610ea5613438565b600086815260a860205260409020600301610eca610ec36006611ead565b8790611ecf565b15610f0b57610edf6080860160608701613ea8565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f18610ec36005611ead565b15610f4e57610f4e87610f31606088016040890161389b565b60208501516001600160401b039091166040909101819052611edb565b610f5b610ec36003611ead565b15610f9157610f6d60208601866138f7565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b8660008051602061424e8339815191528784604051610fb1929190613ccf565b60405180910390a2610fc6610ec36004611ead565b1561101557600087815260a8602090815260409182902060040154611015926001600160a01b0390911691610fff9189019089016138f7565b8960405180602001604052806000815250611fb4565b50505050505050565b611029335b82611fe7565b6110455760405162461bcd60e51b8152600401610c7f90613ec3565b610d20838383612009565b611058611b74565b816110636004611ead565b61106d8282611e8c565b600084815260a8602090815260408083206004015481519283019091529181526110a4916001600160a01b03169085908790611fb4565b50505050565b600082815260016020819052604090912001546110c681612105565b610d20838361210f565b60006110db83611407565b821061113d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610c7f565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146111d65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c7f565b6111e08282612131565b5050565b6000805160206142ae8339815191526111fc81612105565b611204612153565b50565b610d2083838360405180602001604052806000815250611745565b61122b33611023565b6112475760405162461bcd60e51b8152600401610c7f90613ec3565b61120481611bee565b600061125b603f5490565b82106112be5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610c7f565b603f82815481106112d1576112d1613f10565b90600052602060002001549050919050565b60006112ed611b74565b60008051602061428e83398151915261130581612105565b61130d613438565b600085815260a8602052604090206004015461133f906001600160401b03600160a01b90910481169086811690611c70565b6020820180516001600160401b03909216604092830152510151611364908690611edb565b60208101516040015192508460008051602061424e8339815191526113896005611ead565b83604051611398929190613ccf565b60405180910390a2505092915050565b6113b0611b74565b60008051602061428e8339815191526113c881612105565b6111e0826121a5565b60006113dc81612105565b610d2083836121fd565b60006113f182612246565b156113fe57506000919050565b6107d182611d4b565b60006001600160a01b0382166114715760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c7f565b506001600160a01b031660009081526006602052604090205490565b6000805160206142ae8339815191526114a581612105565b611204612262565b60008281526002602052604081206114c5908361229f565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061151a61150583611af8565b60a7546001600160401b0391821691166122ab565b421192915050565b6111e03383836122bf565b600054610100900460ff161580801561154d5750600054600160ff909116105b806115675750303b158015611567575060005460ff166001145b6115ca5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c7f565b6000805460ff1916600117905580156115ed576000805461ff0019166101001790555b6115f860008961210f565b6116106000805160206142ae8339815191528861210f565b61162860008051602061428e8339815191528761210f565b61164060008051602061426e8339815191528661210f565b61164a83836121fd565b611653846121a5565b61165e886000611c5d565b611666613438565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b17905560008051602061424e8339815191526116dd6005611ead565b836040516116ec929190613ccf565b60405180910390a250801561173b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b61174f3383611fe7565b61176b5760405162461bcd60e51b8152600401610c7f90613ec3565b6110a484848484611fb4565b60608161178381611cec565b600061178d61238d565b905060008151116117ad57604051806020016040528060008152506117e2565b806117b73061241f565b6117c086612435565b6040516020016117d293929190613f26565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d1906124c7565b6000828152600160208190526040909120015461181d81612105565b610d208383612131565b60008051602061426e83398151915261183f81612105565b600061184b6006611ead565b90506000611857613438565b602081015185151560609091015260005b8681101561173b5787878281811061188257611882613f10565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461190957600083815260a8602052604090819020600401805460ff60e01b1916600160e01b8915150217905551839060008051602061424e833981519152906119009087908690613ccf565b60405180910390a25b600101611868565b611919611b74565b60008051602061428e83398151915261193181612105565b611939613438565b60208101516001600160401b038416604090910181905261195b908590611edb565b8360008051602061424e8339815191526119756005611ead565b83604051611984929190613ccf565b60405180910390a250505050565b6000806119a0836007611ecf565b156119b757506000905063da698a4d60e01b611acb565b6000848152600560205260409020546001600160a01b03166119e55750600090506304a3dbd560e51b611acb565b6119f96119f26006611ead565b8490611ecf565b8015611a1a5750611a1860008051602061426e833981519152866114cc565b155b15611a3157506000905063c24b0f3f60e01b611acb565b6000611a4b60008051602061428e833981519152876114cc565b9050611a61611a5a6005611ead565b8590611ecf565b8015611a6b575080155b15611a8457506000915063ed4b948760e01b9050611acb565b611a8f846018611ecf565b8015611aa957508080611aa75750611aa78686611bbc565b155b15611ac15750600091506282b42960e81b9050611acb565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d1826124d1565b600081815260056020526040812054611b3b907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b03166114cc565b15611b4e57506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611bba5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c7f565b565b6000611bc88383611fe7565b806114c557506114c58383612511565b6000918252805160209182012090526040902090565b611bf78161256f565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611c30613438565b8160008051602061424e833981519152601883604051611c51929190613ccf565b60405180910390a25050565b6073805460010190556111e08282612612565b600081841180611c7f57508183115b15611c8b5750806114c5565b611c9584846122ab565b9050818111156114c5575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156111e05760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b03166112045760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c7f565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c7f565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611de082611d4b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611e825760006020840160018303810160008052805b828110611e7d57828114602e600183035160f81c1480821715611e7257600186848603030180842060205260406000206000526001810187019650505b505060001901611e35565b505050505b5050600051919050565b600080611e9a338585611992565b91509150816110a4578060005260046000fd5b6000816006811115611ec157611ec1613e92565b60ff166001901b9050919050565b600082821615156114c5565b600082815260a86020526040902060010154611ef79082611ca6565b611f00826114f7565b15611f1e57604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611f6357604051631c21962760e11b815260040160405180910390fd5b611f6b613438565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b611fbf848484612009565b611fcb848484846127ab565b6110a45760405162461bcd60e51b8152600401610c7f90613f76565b6000611ff282612246565b15611fff575060006107d1565b6114c583836128ac565b61201483838361292a565b61201c613438565b60006120286004611ead565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b0319169091179055905061207b60008051602061426e833981519152336114cc565b1580156120a05750600083815260a86020526040902060040154600160e01b900460ff165b156120d657600083815260a860205260409020600401805460ff60e01b191690556120d3816120cf6006611ead565b1790565b90505b8260008051602061424e83398151915282846040516120f6929190613ccf565b60405180910390a25050505050565b6112048133612a9b565b6121198282612af4565b6000828152600260205260409020610d209082612b5f565b61213b8282612b74565b6000828152600260205260409020610d209082612bdb565b61215b612bf0565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461220a828483613fc8565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611c51929190614087565b600061225182611af8565b6001600160401b0316421192915050565b61226a611b74565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121883390565b60006114c58383612c39565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123205760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c7f565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461239c90613b5f565b80601f01602080910402602001604051908101604052809291908181526020018280546123c890613b5f565b80156124155780601f106123ea57610100808354040283529160200191612415565b820191906000526020600020905b8154815290600101906020018083116123f857829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612c63565b6060600061244283612dfe565b60010190506000816001600160401b03811115612461576124616136fc565b6040519080825280601f01601f19166020018201604052801561248b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461249557509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061250257506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612ed6565b6000805b82156125655750600082815260a860205260409020600401546001600160a01b03908116908416810361254c5760019150506107d1565b600092835260a860205260409092206001015491612515565b5060009392505050565b600061257a82611d4b565b905061258a816000846001612efb565b61259382611d4b565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126685760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c7f565b6000818152600560205260409020546001600160a01b0316156126cd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c7f565b6126db600083836001612efb565b6000818152600560205260409020546001600160a01b0316156127405760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c7f565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156128a157604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906127ef9033908990889088906004016140b6565b6020604051808303816000875af192505050801561282a575060408051601f3d908101601f19168201909252612827918101906140f3565b60015b612887573d808015612858576040519150601f19603f3d011682016040523d82523d6000602084013e61285d565b606091505b50805160000361287f5760405162461bcd60e51b8152600401610c7f90613f76565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117e2565b506001949350505050565b6000806128b883611d4b565b9050806001600160a01b0316846001600160a01b031614806128ff57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806117e25750836001600160a01b031661291884610be4565b6001600160a01b031614949350505050565b826001600160a01b031661293d82611d4b565b6001600160a01b0316146129635760405162461bcd60e51b8152600401610c7f90614110565b6001600160a01b0382166129c55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c7f565b6129d28383836001612efb565b826001600160a01b03166129e582611d4b565b6001600160a01b031614612a0b5760405162461bcd60e51b8152600401610c7f90614110565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612aa582826114cc565b6111e057612ab28161241f565b612abd836020612c63565b604051602001612ace929190614155565b60408051601f198184030181529082905262461bcd60e51b8252610c7f916004016136bf565b612afe82826114cc565b6111e05760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006114c5836001600160a01b038416612f07565b612b7e82826114cc565b156111e05760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006114c5836001600160a01b038416612f56565b603c5460ff16611bba5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c7f565b6000826000018281548110612c5057612c50613f10565b9060005260206000200154905092915050565b60606000612c728360026141ca565b612c7d9060026141e1565b6001600160401b03811115612c9457612c946136fc565b6040519080825280601f01601f191660200182016040528015612cbe576020820181803683370190505b509050600360fc1b81600081518110612cd957612cd9613f10565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d0857612d08613f10565b60200101906001600160f81b031916908160001a9053506000612d2c8460026141ca565b612d379060016141e1565b90505b6001811115612daf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612d6b57612d6b613f10565b1a60f81b828281518110612d8157612d81613f10565b60200101906001600160f81b031916908160001a90535060049490941c93612da8816141f4565b9050612d3a565b5083156114c55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c7f565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e3d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e69576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612e8757662386f26fc10000830492506010015b6305f5e1008310612e9f576305f5e100830492506008015b6127108310612eb357612710830492506004015b60648310612ec5576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d182613049565b6110a48484848461307e565b6000818152600183016020526040812054612f4e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b6000818152600183016020526040812054801561303f576000612f7a60018361420b565b8554909150600090612f8e9060019061420b565b9050818114612ff3576000866000018281548110612fae57612fae613f10565b9060005260206000200154905080876000018481548110612fd157612fd1613f10565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130045761300461421e565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b61308a848484846131be565b60018111156130f95760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610c7f565b816001600160a01b0385166131555761315081603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b613178565b836001600160a01b0316856001600160a01b031614613178576131788582613231565b6001600160a01b0384166131945761318f816132ce565b6131b7565b846001600160a01b0316846001600160a01b0316146131b7576131b7848261337d565b5050505050565b6131ca848484846133c1565b603c5460ff16156110a45760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610c7f565b6000600161323e84611407565b613248919061420b565b6000838152603e602052604090205490915080821461329b576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f546000906132e09060019061420b565b600083815260406020819052812054603f805493945090928490811061330857613308613f10565b9060005260206000200154905080603f838154811061332957613329613f10565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133615761336161421e565b6001900381819060005260206000200160009055905550505050565b600061338883611407565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6133cd82846141e1565b81101561343257600081815260096020526040812080549091906133f090614234565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a38061342a81614234565b9150506133c3565b506110a4565b604051806040016040528061346a6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461120457600080fd5b6000602082840312156134bc57600080fd5b81356114c581613494565b6000602082840312156134d957600080fd5b5035919050565b60005b838110156134fb5781810151838201526020016134e3565b50506000910152565b6000815180845261351c8160208601602086016134e0565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e0840152600090613566610100850182613504565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b6020815260006114c56020830184613530565b60008083601f8401126135d957600080fd5b5081356001600160401b038111156135f057600080fd5b60208301915083602082850101111561360857600080fd5b9250929050565b80356001600160a01b038116811461362657600080fd5b919050565b80356001600160401b038116811461362657600080fd5b60008060008060008060a0878903121561365b57600080fd5b8635955060208701356001600160401b0381111561367857600080fd5b61368489828a016135c7565b909650945061369790506040880161360f565b92506136a56060880161360f565b91506136b36080880161362b565b90509295509295509295565b6020815260006114c56020830184613504565b600080604083850312156136e557600080fd5b6136ee8361360f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561372c5761372c6136fc565b604051601f8501601f19908116603f01168101908282118183101715613754576137546136fc565b8160405280935085815286868601111561376d57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561379957600080fd5b81356001600160401b038111156137af57600080fd5b8201601f810184136137c057600080fd5b6117e284823560208401613712565b600080600083850360c08112156137e557600080fd5b84359350602085013592506080603f198201121561380257600080fd5b506040840190509250925092565b60008060006060848603121561382557600080fd5b61382e8461360f565b925061383c6020850161360f565b9150604084013590509250925092565b6000806040838503121561385f57600080fd5b8235915061386f6020840161360f565b90509250929050565b6000806040838503121561388b57600080fd5b8235915061386f6020840161362b565b6000602082840312156138ad57600080fd5b6114c58261362b565b600080602083850312156138c957600080fd5b82356001600160401b038111156138df57600080fd5b6138eb858286016135c7565b90969095509350505050565b60006020828403121561390957600080fd5b6114c58261360f565b6000806040838503121561392557600080fd5b50508035926020909101359150565b8035801515811461362657600080fd5b6000806040838503121561395757600080fd5b6139608361360f565b915061386f60208401613934565b600080600080600080600060c0888a03121561398957600080fd5b6139928861360f565b96506139a06020890161360f565b95506139ae6040890161360f565b94506139bc6060890161360f565b93506139ca6080890161362b565b925060a08801356001600160401b038111156139e557600080fd5b6139f18a828b016135c7565b989b979a50959850939692959293505050565b60008060008060808587031215613a1a57600080fd5b613a238561360f565b9350613a316020860161360f565b92506040850135915060608501356001600160401b03811115613a5357600080fd5b8501601f81018713613a6457600080fd5b613a7387823560208401613712565b91505092959194509250565b60008060408385031215613a9257600080fd5b613a9b8361360f565b915061386f6020840161360f565b600080600060408486031215613abe57600080fd5b83356001600160401b0380821115613ad557600080fd5b818601915086601f830112613ae957600080fd5b813581811115613af857600080fd5b8760208260051b8501011115613b0d57600080fd5b602092830195509350613b239186019050613934565b90509250925092565b600080600060608486031215613b4157600080fd5b613b4a8461360f565b95602085013595506040909401359392505050565b600181811c90821680613b7357607f821691505b602082108103610d7757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613b93565b601f821115610d2057600081815260208120601f850160051c81016020861015613be95750805b601f850160051c820191505b81811015613c0857828155600101613bf5565b505050505050565b81516001600160401b03811115613c2957613c296136fc565b613c3d81613c378454613b5f565b84613bc2565b602080601f831160018114613c725760008415613c5a5750858301515b600019600386901b1c1916600185901b178555613c08565b600085815260208120601f198616915b82811015613ca157888601518255948401946001909101908401613c82565b5085821015613cbf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006117e26040830184613530565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d2581613b5f565b8061016088015261018085831660008114613d475760018114613d6157613d92565b60ff1984168983015282151560051b890182019450613d92565b8560005260208060002060005b85811015613d895781548c8201860152908901908201613d6e565b8b018401965050505b50505050613de26080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e0982858389016134e0565b8184019150601760f91b8252600160008654613e2481613b5f565b8184168015613e3a5760018114613e5357613e83565b60ff198316878601528115158202870185019350613e83565b896000528560002060005b83811015613e79578154898201880152908601908701613e5e565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613eba57600080fd5b6114c582613934565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613f388184602089016134e0565b845190830190613f4c8183602089016134e0565b602f60f81b91019081528351613f698160018401602088016134e0565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b03831115613fdf57613fdf6136fc565b613ff383613fed8354613b5f565b83613bc2565b6000601f841160018114614027576000851561400f5750838201355b600019600387901b1c1916600186901b1783556131b7565b600083815260209020601f19861690835b828110156140585786850135825560209485019460019092019101614038565b50868210156140755760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906140e990830184613504565b9695505050505050565b60006020828403121561410557600080fd5b81516114c581613494565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161418d8160178501602088016134e0565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516141be8160288401602088016134e0565b01602801949350505050565b80820281158282048414176107d1576107d1613b93565b808201808211156107d1576107d1613b93565b60008161420357614203613b93565b506000190190565b818103818111156107d1576107d1613b93565b634e487b7160e01b600052603160045260246000fd5b60006001820161424657614246613b93565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212204db3ed4679558e8429254be43180048fcce7532decc01b27a22e7276258a69e364736f6c63430008150033", + "nonce": "0x2c920" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x1243a7797e99d9a2fddcfc402b8cec153a8c59f108b1bec843f83f5b70c7771f", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000993cab4b697f05bf5221ec78b491c08a148004bf", + "nonce": "0x2c921" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xd2305936a8478dbfe257a31fba93e5bf0f8e8198c242ca768316397ac027c2b8", + "transactionIndex": "0x0", + "blockHash": "0x3f7f3b8a3a2ae2d421baafafcca0fcd2fe864f4e7cf08a4fe94d32f8b569d39a", + "blockNumber": "0x145f377", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x39ed9b", + "gasUsed": "0x39ed9b", + "contractAddress": "0x993Cab4b697f05BF5221EC78B491C08A148004Bf", + "logs": [ + { + "address": "0x993Cab4b697f05BF5221EC78B491C08A148004Bf", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x3f7f3b8a3a2ae2d421baafafcca0fcd2fe864f4e7cf08a4fe94d32f8b569d39a", + "blockNumber": "0x145f377", + "transactionHash": "0xd2305936a8478dbfe257a31fba93e5bf0f8e8198c242ca768316397ac027c2b8", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000001000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x1243a7797e99d9a2fddcfc402b8cec153a8c59f108b1bec843f83f5b70c7771f", + "transactionIndex": "0x1", + "blockHash": "0x3f7f3b8a3a2ae2d421baafafcca0fcd2fe864f4e7cf08a4fe94d32f8b569d39a", + "blockNumber": "0x145f377", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x3a72a5", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000993cab4b697f05bf5221ec78b491c08a148004bf" + ], + "data": "0x", + "blockHash": "0x3f7f3b8a3a2ae2d421baafafcca0fcd2fe864f4e7cf08a4fe94d32f8b569d39a", + "blockNumber": "0x145f377", + "transactionHash": "0x1243a7797e99d9a2fddcfc402b8cec153a8c59f108b1bec843f83f5b70c7771f", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000410400000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1697784648, + "chain": 2021, + "multi": false, + "commit": "3e2ea27" +} \ No newline at end of file diff --git a/broadcast/20231020_RNSUpgrade.s.sol/2021/run-latest.json b/broadcast/20231020_RNSUpgrade.s.sol/2021/run-latest.json new file mode 100644 index 00000000..df48ae33 --- /dev/null +++ b/broadcast/20231020_RNSUpgrade.s.sol/2021/run-latest.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0xd2305936a8478dbfe257a31fba93e5bf0f8e8198c242ca768316397ac027c2b8", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x993Cab4b697f05BF5221EC78B491C08A148004Bf", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4b4e7c", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614303806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b6103096103043660046134aa565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c3660046134c7565b6107d7565b60405161031591906135b4565b61035161034c366004613642565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b60405161031591906136bf565b6103ba6103b53660046134c7565b610be4565b6040516001600160a01b039091168152602001610315565b6103e760008051602061428e83398151915281565b604051908152602001610315565b6104086104033660046136d2565b610c0b565b005b6103e7610418366004613787565b610d25565b61039a61042b3660046134c7565b610d30565b6103e761043e3660046134c7565b60096020526000908152604090205481565b603f546103e7565b61039a6104663660046134c7565b610d7d565b6104086104793660046137cf565b610e89565b61040861048c366004613810565b61101e565b6103e761049f3660046134c7565b6000908152600160208190526040909120015490565b6104086104c336600461384c565b611050565b6104086104d636600461384c565b6110aa565b6103e76104e93660046136d2565b6110d0565b6103e760008051602061426e83398151915281565b61040861051136600461384c565b611166565b6104086111e4565b61040861052c366004613810565b611207565b61040861053f3660046134c7565b611222565b6103e76105523660046134c7565b611250565b61056a610565366004613878565b6112e3565b6040516001600160401b039091168152602001610315565b61040861059036600461389b565b6113a8565b6104086105a33660046138b6565b6113d1565b603c5460ff16610309565b6103ba6105c13660046134c7565b6113e6565b6103e76105d43660046138f7565b611407565b61040861148d565b6103ba6105ef366004613912565b6114ad565b61030961060236600461384c565b6114cc565b604080518082019091526003815262524e5360e81b602082015261039a565b6103096106343660046134c7565b6114f7565b6103e7600081565b61040861064f366004613944565b611522565b6073546103e7565b61040861066a36600461396e565b61152d565b61040861067d366004613a04565b611745565b61056a6001600160401b0381565b61039a61069e3660046134c7565b611777565b6103e76106b13660046134c7565b6117ea565b6104086106c436600461384c565b611801565b60a7546001600160401b031661056a565b6103e76000805160206142ae83398151915281565b6103096106fd366004613a7f565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613aa9565b611827565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b610408610773366004613878565b611911565b61078b610786366004613b2c565b611992565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611ad3565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df613438565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613b5f565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613b5f565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611af8565b60208201516001600160401b03909116604090910152919050565b600080610938611b74565b6109423389611bbc565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bd892505050565b90506109a9816114f7565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b0316156109ec576109ec81611bee565b6109f68482611c5d565b610a0b426001600160401b0380861690611c70565b9150610a178883611ca6565b610a1f613438565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610a9f91166001613ba9565b60ff1681526020018a815260200189898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250509183525082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b2d9082613c10565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b0319909316959096169490941717919091169290921790915551829060008051602061424e83398151915290610bd090600019908590613ccf565b60405180910390a250965096945050505050565b6000610bef82611cec565b506000908152600760205260409020546001600160a01b031690565b6000610c1682611d4b565b9050806001600160a01b0316836001600160a01b031603610c885760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610ca45750610ca481336106fd565b610d165760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610c7f565b610d208383611dab565b505050565b60006107d182611e19565b606081610d3c81611cec565b600083815260a8602090815260408083206009835292819020549051610d659392879101613ce8565b60405160208183030381529060405291505b50919050565b606081600003610d9b57505060408051602081019091526000815290565b600082815260a860205260409020600281018054610db890613b5f565b80601f0160208091040260200160405190810160405280929190818152602001828054610de490613b5f565b8015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b50505050509150806001015492505b8215610d775750600082815260a860209081526040918290209151610e6c918491600285019101613df6565b604051602081830303815290604052915080600101549250610e40565b610e91611b74565b8282610e9d8282611e8c565b610ea5613438565b600086815260a860205260409020600301610eca610ec36006611ead565b8790611ecf565b15610f0b57610edf6080860160608701613ea8565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f18610ec36005611ead565b15610f4e57610f4e87610f31606088016040890161389b565b60208501516001600160401b039091166040909101819052611edb565b610f5b610ec36003611ead565b15610f9157610f6d60208601866138f7565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b8660008051602061424e8339815191528784604051610fb1929190613ccf565b60405180910390a2610fc6610ec36004611ead565b1561101557600087815260a8602090815260409182902060040154611015926001600160a01b0390911691610fff9189019089016138f7565b8960405180602001604052806000815250611fb4565b50505050505050565b611029335b82611fe7565b6110455760405162461bcd60e51b8152600401610c7f90613ec3565b610d20838383612009565b611058611b74565b816110636004611ead565b61106d8282611e8c565b600084815260a8602090815260408083206004015481519283019091529181526110a4916001600160a01b03169085908790611fb4565b50505050565b600082815260016020819052604090912001546110c681612105565b610d20838361210f565b60006110db83611407565b821061113d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610c7f565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146111d65760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c7f565b6111e08282612131565b5050565b6000805160206142ae8339815191526111fc81612105565b611204612153565b50565b610d2083838360405180602001604052806000815250611745565b61122b33611023565b6112475760405162461bcd60e51b8152600401610c7f90613ec3565b61120481611bee565b600061125b603f5490565b82106112be5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610c7f565b603f82815481106112d1576112d1613f10565b90600052602060002001549050919050565b60006112ed611b74565b60008051602061428e83398151915261130581612105565b61130d613438565b600085815260a8602052604090206004015461133f906001600160401b03600160a01b90910481169086811690611c70565b6020820180516001600160401b03909216604092830152510151611364908690611edb565b60208101516040015192508460008051602061424e8339815191526113896005611ead565b83604051611398929190613ccf565b60405180910390a2505092915050565b6113b0611b74565b60008051602061428e8339815191526113c881612105565b6111e0826121a5565b60006113dc81612105565b610d2083836121fd565b60006113f182612246565b156113fe57506000919050565b6107d182611d4b565b60006001600160a01b0382166114715760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c7f565b506001600160a01b031660009081526006602052604090205490565b6000805160206142ae8339815191526114a581612105565b611204612262565b60008281526002602052604081206114c5908361229f565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061151a61150583611af8565b60a7546001600160401b0391821691166122ab565b421192915050565b6111e03383836122bf565b600054610100900460ff161580801561154d5750600054600160ff909116105b806115675750303b158015611567575060005460ff166001145b6115ca5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c7f565b6000805460ff1916600117905580156115ed576000805461ff0019166101001790555b6115f860008961210f565b6116106000805160206142ae8339815191528861210f565b61162860008051602061428e8339815191528761210f565b61164060008051602061426e8339815191528661210f565b61164a83836121fd565b611653846121a5565b61165e886000611c5d565b611666613438565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b17905560008051602061424e8339815191526116dd6005611ead565b836040516116ec929190613ccf565b60405180910390a250801561173b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b61174f3383611fe7565b61176b5760405162461bcd60e51b8152600401610c7f90613ec3565b6110a484848484611fb4565b60608161178381611cec565b600061178d61238d565b905060008151116117ad57604051806020016040528060008152506117e2565b806117b73061241f565b6117c086612435565b6040516020016117d293929190613f26565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d1906124c7565b6000828152600160208190526040909120015461181d81612105565b610d208383612131565b60008051602061426e83398151915261183f81612105565b600061184b6006611ead565b90506000611857613438565b602081015185151560609091015260005b8681101561173b5787878281811061188257611882613f10565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461190957600083815260a8602052604090819020600401805460ff60e01b1916600160e01b8915150217905551839060008051602061424e833981519152906119009087908690613ccf565b60405180910390a25b600101611868565b611919611b74565b60008051602061428e83398151915261193181612105565b611939613438565b60208101516001600160401b038416604090910181905261195b908590611edb565b8360008051602061424e8339815191526119756005611ead565b83604051611984929190613ccf565b60405180910390a250505050565b6000806119a0836007611ecf565b156119b757506000905063da698a4d60e01b611acb565b6000848152600560205260409020546001600160a01b03166119e55750600090506304a3dbd560e51b611acb565b6119f96119f26006611ead565b8490611ecf565b8015611a1a5750611a1860008051602061426e833981519152866114cc565b155b15611a3157506000905063c24b0f3f60e01b611acb565b6000611a4b60008051602061428e833981519152876114cc565b9050611a61611a5a6005611ead565b8590611ecf565b8015611a6b575080155b15611a8457506000915063ed4b948760e01b9050611acb565b611a8f846018611ecf565b8015611aa957508080611aa75750611aa78686611bbc565b155b15611ac15750600091506282b42960e81b9050611acb565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d1826124d1565b600081815260056020526040812054611b3b907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b03166114cc565b15611b4e57506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611bba5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c7f565b565b6000611bc88383611fe7565b806114c557506114c58383612511565b6000918252805160209182012090526040902090565b611bf78161256f565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611c30613438565b8160008051602061424e833981519152601883604051611c51929190613ccf565b60405180910390a25050565b6073805460010190556111e08282612612565b600081841180611c7f57508183115b15611c8b5750806114c5565b611c9584846122ab565b9050818111156114c5575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156111e05760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b03166112045760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c7f565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c7f565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611de082611d4b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611e825760006020840160018303810160008052805b828110611e7d57828114602e600183035160f81c1480821715611e7257600186848603030180842060205260406000206000526001810187019650505b505060001901611e35565b505050505b5050600051919050565b600080611e9a338585611992565b91509150816110a4578060005260046000fd5b6000816006811115611ec157611ec1613e92565b60ff166001901b9050919050565b600082821615156114c5565b600082815260a86020526040902060010154611ef79082611ca6565b611f00826114f7565b15611f1e57604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611f6357604051631c21962760e11b815260040160405180910390fd5b611f6b613438565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b611fbf848484612009565b611fcb848484846127ab565b6110a45760405162461bcd60e51b8152600401610c7f90613f76565b6000611ff282612246565b15611fff575060006107d1565b6114c583836128ac565b61201483838361292a565b61201c613438565b60006120286004611ead565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b0319169091179055905061207b60008051602061426e833981519152336114cc565b1580156120a05750600083815260a86020526040902060040154600160e01b900460ff165b156120d657600083815260a860205260409020600401805460ff60e01b191690556120d3816120cf6006611ead565b1790565b90505b8260008051602061424e83398151915282846040516120f6929190613ccf565b60405180910390a25050505050565b6112048133612a9b565b6121198282612af4565b6000828152600260205260409020610d209082612b5f565b61213b8282612b74565b6000828152600260205260409020610d209082612bdb565b61215b612bf0565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461220a828483613fc8565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611c51929190614087565b600061225182611af8565b6001600160401b0316421192915050565b61226a611b74565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121883390565b60006114c58383612c39565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123205760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c7f565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461239c90613b5f565b80601f01602080910402602001604051908101604052809291908181526020018280546123c890613b5f565b80156124155780601f106123ea57610100808354040283529160200191612415565b820191906000526020600020905b8154815290600101906020018083116123f857829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612c63565b6060600061244283612dfe565b60010190506000816001600160401b03811115612461576124616136fc565b6040519080825280601f01601f19166020018201604052801561248b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461249557509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061250257506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612ed6565b6000805b82156125655750600082815260a860205260409020600401546001600160a01b03908116908416810361254c5760019150506107d1565b600092835260a860205260409092206001015491612515565b5060009392505050565b600061257a82611d4b565b905061258a816000846001612efb565b61259382611d4b565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126685760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c7f565b6000818152600560205260409020546001600160a01b0316156126cd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c7f565b6126db600083836001612efb565b6000818152600560205260409020546001600160a01b0316156127405760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c7f565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156128a157604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906127ef9033908990889088906004016140b6565b6020604051808303816000875af192505050801561282a575060408051601f3d908101601f19168201909252612827918101906140f3565b60015b612887573d808015612858576040519150601f19603f3d011682016040523d82523d6000602084013e61285d565b606091505b50805160000361287f5760405162461bcd60e51b8152600401610c7f90613f76565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117e2565b506001949350505050565b6000806128b883611d4b565b9050806001600160a01b0316846001600160a01b031614806128ff57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806117e25750836001600160a01b031661291884610be4565b6001600160a01b031614949350505050565b826001600160a01b031661293d82611d4b565b6001600160a01b0316146129635760405162461bcd60e51b8152600401610c7f90614110565b6001600160a01b0382166129c55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c7f565b6129d28383836001612efb565b826001600160a01b03166129e582611d4b565b6001600160a01b031614612a0b5760405162461bcd60e51b8152600401610c7f90614110565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612aa582826114cc565b6111e057612ab28161241f565b612abd836020612c63565b604051602001612ace929190614155565b60408051601f198184030181529082905262461bcd60e51b8252610c7f916004016136bf565b612afe82826114cc565b6111e05760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006114c5836001600160a01b038416612f07565b612b7e82826114cc565b156111e05760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006114c5836001600160a01b038416612f56565b603c5460ff16611bba5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c7f565b6000826000018281548110612c5057612c50613f10565b9060005260206000200154905092915050565b60606000612c728360026141ca565b612c7d9060026141e1565b6001600160401b03811115612c9457612c946136fc565b6040519080825280601f01601f191660200182016040528015612cbe576020820181803683370190505b509050600360fc1b81600081518110612cd957612cd9613f10565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d0857612d08613f10565b60200101906001600160f81b031916908160001a9053506000612d2c8460026141ca565b612d379060016141e1565b90505b6001811115612daf576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612d6b57612d6b613f10565b1a60f81b828281518110612d8157612d81613f10565b60200101906001600160f81b031916908160001a90535060049490941c93612da8816141f4565b9050612d3a565b5083156114c55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c7f565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e3d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e69576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612e8757662386f26fc10000830492506010015b6305f5e1008310612e9f576305f5e100830492506008015b6127108310612eb357612710830492506004015b60648310612ec5576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d182613049565b6110a48484848461307e565b6000818152600183016020526040812054612f4e575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b6000818152600183016020526040812054801561303f576000612f7a60018361420b565b8554909150600090612f8e9060019061420b565b9050818114612ff3576000866000018281548110612fae57612fae613f10565b9060005260206000200154905080876000018481548110612fd157612fd1613f10565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130045761300461421e565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b61308a848484846131be565b60018111156130f95760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610c7f565b816001600160a01b0385166131555761315081603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b613178565b836001600160a01b0316856001600160a01b031614613178576131788582613231565b6001600160a01b0384166131945761318f816132ce565b6131b7565b846001600160a01b0316846001600160a01b0316146131b7576131b7848261337d565b5050505050565b6131ca848484846133c1565b603c5460ff16156110a45760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610c7f565b6000600161323e84611407565b613248919061420b565b6000838152603e602052604090205490915080821461329b576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f546000906132e09060019061420b565b600083815260406020819052812054603f805493945090928490811061330857613308613f10565b9060005260206000200154905080603f838154811061332957613329613f10565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133615761336161421e565b6001900381819060005260206000200160009055905550505050565b600061338883611407565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6133cd82846141e1565b81101561343257600081815260096020526040812080549091906133f090614234565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a38061342a81614234565b9150506133c3565b506110a4565b604051806040016040528061346a6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461120457600080fd5b6000602082840312156134bc57600080fd5b81356114c581613494565b6000602082840312156134d957600080fd5b5035919050565b60005b838110156134fb5781810151838201526020016134e3565b50506000910152565b6000815180845261351c8160208601602086016134e0565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e0840152600090613566610100850182613504565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b6020815260006114c56020830184613530565b60008083601f8401126135d957600080fd5b5081356001600160401b038111156135f057600080fd5b60208301915083602082850101111561360857600080fd5b9250929050565b80356001600160a01b038116811461362657600080fd5b919050565b80356001600160401b038116811461362657600080fd5b60008060008060008060a0878903121561365b57600080fd5b8635955060208701356001600160401b0381111561367857600080fd5b61368489828a016135c7565b909650945061369790506040880161360f565b92506136a56060880161360f565b91506136b36080880161362b565b90509295509295509295565b6020815260006114c56020830184613504565b600080604083850312156136e557600080fd5b6136ee8361360f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561372c5761372c6136fc565b604051601f8501601f19908116603f01168101908282118183101715613754576137546136fc565b8160405280935085815286868601111561376d57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561379957600080fd5b81356001600160401b038111156137af57600080fd5b8201601f810184136137c057600080fd5b6117e284823560208401613712565b600080600083850360c08112156137e557600080fd5b84359350602085013592506080603f198201121561380257600080fd5b506040840190509250925092565b60008060006060848603121561382557600080fd5b61382e8461360f565b925061383c6020850161360f565b9150604084013590509250925092565b6000806040838503121561385f57600080fd5b8235915061386f6020840161360f565b90509250929050565b6000806040838503121561388b57600080fd5b8235915061386f6020840161362b565b6000602082840312156138ad57600080fd5b6114c58261362b565b600080602083850312156138c957600080fd5b82356001600160401b038111156138df57600080fd5b6138eb858286016135c7565b90969095509350505050565b60006020828403121561390957600080fd5b6114c58261360f565b6000806040838503121561392557600080fd5b50508035926020909101359150565b8035801515811461362657600080fd5b6000806040838503121561395757600080fd5b6139608361360f565b915061386f60208401613934565b600080600080600080600060c0888a03121561398957600080fd5b6139928861360f565b96506139a06020890161360f565b95506139ae6040890161360f565b94506139bc6060890161360f565b93506139ca6080890161362b565b925060a08801356001600160401b038111156139e557600080fd5b6139f18a828b016135c7565b989b979a50959850939692959293505050565b60008060008060808587031215613a1a57600080fd5b613a238561360f565b9350613a316020860161360f565b92506040850135915060608501356001600160401b03811115613a5357600080fd5b8501601f81018713613a6457600080fd5b613a7387823560208401613712565b91505092959194509250565b60008060408385031215613a9257600080fd5b613a9b8361360f565b915061386f6020840161360f565b600080600060408486031215613abe57600080fd5b83356001600160401b0380821115613ad557600080fd5b818601915086601f830112613ae957600080fd5b813581811115613af857600080fd5b8760208260051b8501011115613b0d57600080fd5b602092830195509350613b239186019050613934565b90509250925092565b600080600060608486031215613b4157600080fd5b613b4a8461360f565b95602085013595506040909401359392505050565b600181811c90821680613b7357607f821691505b602082108103610d7757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613b93565b601f821115610d2057600081815260208120601f850160051c81016020861015613be95750805b601f850160051c820191505b81811015613c0857828155600101613bf5565b505050505050565b81516001600160401b03811115613c2957613c296136fc565b613c3d81613c378454613b5f565b84613bc2565b602080601f831160018114613c725760008415613c5a5750858301515b600019600386901b1c1916600185901b178555613c08565b600085815260208120601f198616915b82811015613ca157888601518255948401946001909101908401613c82565b5085821015613cbf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006117e26040830184613530565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d2581613b5f565b8061016088015261018085831660008114613d475760018114613d6157613d92565b60ff1984168983015282151560051b890182019450613d92565b8560005260208060002060005b85811015613d895781548c8201860152908901908201613d6e565b8b018401965050505b50505050613de26080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e0982858389016134e0565b8184019150601760f91b8252600160008654613e2481613b5f565b8184168015613e3a5760018114613e5357613e83565b60ff198316878601528115158202870185019350613e83565b896000528560002060005b83811015613e79578154898201880152908601908701613e5e565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613eba57600080fd5b6114c582613934565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613f388184602089016134e0565b845190830190613f4c8183602089016134e0565b602f60f81b91019081528351613f698160018401602088016134e0565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b03831115613fdf57613fdf6136fc565b613ff383613fed8354613b5f565b83613bc2565b6000601f841160018114614027576000851561400f5750838201355b600019600387901b1c1916600186901b1783556131b7565b600083815260209020601f19861690835b828110156140585786850135825560209485019460019092019101614038565b50868210156140755760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906140e990830184613504565b9695505050505050565b60006020828403121561410557600080fd5b81516114c581613494565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161418d8160178501602088016134e0565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516141be8160288401602088016134e0565b01602801949350505050565b80820281158282048414176107d1576107d1613b93565b808201808211156107d1576107d1613b93565b60008161420357614203613b93565b506000190190565b818103818111156107d1576107d1613b93565b634e487b7160e01b600052603160045260246000fd5b60006001820161424657614246613b93565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212204db3ed4679558e8429254be43180048fcce7532decc01b27a22e7276258a69e364736f6c63430008150033", + "nonce": "0x2c920" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x1243a7797e99d9a2fddcfc402b8cec153a8c59f108b1bec843f83f5b70c7771f", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000993cab4b697f05bf5221ec78b491c08a148004bf", + "nonce": "0x2c921" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xd2305936a8478dbfe257a31fba93e5bf0f8e8198c242ca768316397ac027c2b8", + "transactionIndex": "0x0", + "blockHash": "0x3f7f3b8a3a2ae2d421baafafcca0fcd2fe864f4e7cf08a4fe94d32f8b569d39a", + "blockNumber": "0x145f377", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x39ed9b", + "gasUsed": "0x39ed9b", + "contractAddress": "0x993Cab4b697f05BF5221EC78B491C08A148004Bf", + "logs": [ + { + "address": "0x993Cab4b697f05BF5221EC78B491C08A148004Bf", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x3f7f3b8a3a2ae2d421baafafcca0fcd2fe864f4e7cf08a4fe94d32f8b569d39a", + "blockNumber": "0x145f377", + "transactionHash": "0xd2305936a8478dbfe257a31fba93e5bf0f8e8198c242ca768316397ac027c2b8", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000001000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x1243a7797e99d9a2fddcfc402b8cec153a8c59f108b1bec843f83f5b70c7771f", + "transactionIndex": "0x1", + "blockHash": "0x3f7f3b8a3a2ae2d421baafafcca0fcd2fe864f4e7cf08a4fe94d32f8b569d39a", + "blockNumber": "0x145f377", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x3a72a5", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000993cab4b697f05bf5221ec78b491c08a148004bf" + ], + "data": "0x", + "blockHash": "0x3f7f3b8a3a2ae2d421baafafcca0fcd2fe864f4e7cf08a4fe94d32f8b569d39a", + "blockNumber": "0x145f377", + "transactionHash": "0x1243a7797e99d9a2fddcfc402b8cec153a8c59f108b1bec843f83f5b70c7771f", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000410400000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1697784648, + "chain": 2021, + "multi": false, + "commit": "3e2ea27" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeAuction.s.sol/2021/run-1698122959.json b/broadcast/20231024_UpgradeAuction.s.sol/2021/run-1698122959.json new file mode 100644 index 00000000..90846365 --- /dev/null +++ b/broadcast/20231024_UpgradeAuction.s.sol/2021/run-1698122959.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0xf1184db70a589477c8ad6e3d778977ccf71556865bae067260b851a3fdd918eb", + "transactionType": "CREATE", + "contractName": "RNSAuction", + "contractAddress": "0xc1A64532aB6e3EC0E01f2064A9075311B483Acb9", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x295707", + "value": "0x0", + "data": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612443806100df6000396000f3fe6080604052600436106101c25760003560e01c8063791a26b4116100f7578063a282d4ae11610095578063db5e1ec611610064578063db5e1ec6146105b4578063ec14cf37146105d4578063f0f44260146105f4578063f5b541a61461061457600080fd5b8063a282d4ae14610544578063b967169014610559578063ca15c87314610574578063d547741f1461059457600080fd5b80639010d07c116100d15780639010d07c146104dc57806391d14854146104fc5780639979ef451461051c578063a217fddf1461052f57600080fd5b8063791a26b41461047e57806381bec1b31461049e5780638c843314146104be57600080fd5b80633b19e84a1161016457806360223b441161013e57806360223b44146103a15780636e7d60f2146103c1578063777b0a18146103ee57806378bd79351461040e57600080fd5b80633b19e84a146103395780634c255c971461036b57806353f9195e1461038157600080fd5b806319a3ee40116101a057806319a3ee40146102a0578063248a9ca3146102b85780632f2ff15d146102f757806336568abe1461031957600080fd5b806301ffc9a7146101c75780630afe1bb3146101fc57806315a291621461022c575b600080fd5b3480156101d357600080fd5b506101e76101e2366004611cf6565b610636565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b506102146305a39a8081565b6040516001600160401b0390911681526020016101f3565b34801561023857600080fd5b50610285610247366004611d20565b604080518082019091526000808252602082015250600090815260366020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101f3565b3480156102ac57600080fd5b506102146301e1338081565b3480156102c457600080fd5b506102e96102d3366004611d20565b6000908152600160208190526040909120015490565b6040519081526020016101f3565b34801561030357600080fd5b50610317610312366004611d4e565b610661565b005b34801561032557600080fd5b50610317610334366004611d4e565b61068c565b34801561034557600080fd5b506038546001600160a01b03165b6040516001600160a01b0390911681526020016101f3565b34801561037757600080fd5b506102e961271081565b34801561038d57600080fd5b506101e761039c366004611d20565b61070f565b3480156103ad57600080fd5b506103176103bc366004611d20565b610732565b3480156103cd57600080fd5b506103e16103dc366004611dc9565b610746565b6040516101f39190611e0a565b3480156103fa57600080fd5b50610317610409366004611e4e565b610a35565b34801561041a57600080fd5b5061042e610429366004611d20565b610b98565b6040805183518152602080850151818301529382015180516001600160a01b0316828401529384015160608083019190915291840151608082015292015160a083015260c082015260e0016101f3565b34801561048a57600080fd5b506103e1610499366004611dc9565b610c4d565b3480156104aa57600080fd5b506103176104b9366004611edf565b610e08565b3480156104ca57600080fd5b506035546001600160a01b0316610353565b3480156104e857600080fd5b506103536104f7366004611f0c565b610e85565b34801561050857600080fd5b506101e7610517366004611d4e565b610ea4565b61031761052a366004611d20565b610ecf565b34801561053b57600080fd5b506102e9600081565b34801561055057600080fd5b506039546102e9565b34801561056557600080fd5b506102146001600160401b0381565b34801561058057600080fd5b506102e961058f366004611d20565b611081565b3480156105a057600080fd5b506103176105af366004611d4e565b611098565b3480156105c057600080fd5b506102e96105cf366004611f2e565b6110be565b3480156105e057600080fd5b506103176105ef366004611f4a565b61115b565b34801561060057600080fd5b5061031761060f366004611fce565b6112f8565b34801561062057600080fd5b506102e96000805160206123ee83398151915281565b60006001600160e01b03198216635a05180f60e01b148061065b575061065b8261130c565b92915050565b6000828152600160208190526040909120015461067d81611341565b610687838361134e565b505050565b6001600160a01b03811633146107015760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61070b8282611370565b5050565b600881901c6000908152603a6020526040812054600160ff84161b16151561065b565b600061073d81611341565b61070b82611392565b6060600080610768604051806040016040528060008152602001600081525090565b610770611ca1565b85806001600160401b0381111561078957610789611feb565b6040519080825280602002602001820160405280156107b2578160200160208202803683370190505b506035549096506001600160a01b031660006107da426301e133806001600160401b036113f0565b905060005b83811015610a11578a8a828181106107f9576107f9612001565b60209081029290920135600081815260378452604080822081516060808201845282548252600180840154838a0152845160808101865260028501546001600160a01b031681526003850154818b0152600485015481870152600590940154848301528285019384528251865260368952848620855180870190965280548652015497840197909752905190950151929c5099509297509091039050610a095760208601514210156108be576040516372d1250d60e01b815260040160405180910390fd5b8460400151604001516000036108e7576040516323bbcc0160e01b815260040160405180910390fd5b6040850151602001516108fa908861202d565b60405163fc284d1160e01b8152600481018a90526001600160401b03841660248201529097506001600160a01b0384169063fc284d1190604401600060405180830381600087803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b505050506040858101515190516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018a9052908416906323b872dd90606401600060405180830381600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b50505050428982815181106109e8576109e8612001565b602090810291909101810182905260008a8152603790915260409020600501555b6001016107df565b50603854610a28906001600160a01b031687611426565b5050505050505092915050565b6000805160206123ee833981519152610a4d81611341565b85610a578161148b565b84801580610a655750808414155b15610a8357604051634ec4810560e11b815260040160405180910390fd5b6000806000805b84811015610b4c578a8a82818110610aa457610aa4612001565b905060200201359350610ab68461070f565b610ad357604051637d6fe8d760e11b815260040160405180910390fd5b6000848152603760205260409020805493509150821580610af357508b83145b80610b0057506004820154155b610b1d57604051631dc8374160e01b815260040160405180910390fd5b8b8255888882818110610b3257610b32612001565b905060200201358260010181905550806001019050610a8a565b508a7f9a845a1c4235343a450f5e39d4179b7e2a6c9586c02bff45d956717f4a19dd948b8b8b8b604051610b839493929190612072565b60405180910390a25050505050505050505050565b610ba0611ca1565b5060008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b03168152600385015481880152600485015481870152600590940154918401919091528184019290925280518351808501855286815285018690528552603684528285208351808501909452805484529091015492820192909252909190610c4583826114d8565b915050915091565b60606000805160206123ee833981519152610c6781611341565b826000819003610c8a57604051634ec4810560e11b815260040160405180910390fd5b806001600160401b03811115610ca257610ca2611feb565b604051908082528060200260200182016040528015610ccb578160200160208202803683370190505b506035549093506001600160a01b03167fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6886301e1338060005b84811015610dfc57836001600160a01b0316630570891f848b8b85818110610d2e57610d2e612001565b9050602002810190610d4091906120a4565b600030886040518763ffffffff1660e01b8152600401610d65969594939291906120ea565b60408051808303816000875af1158015610d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190612146565b9050878281518110610dbb57610dbb612001565b602002602001018181525050610df4878281518110610ddc57610ddc612001565b6020026020010151603a61153090919063ffffffff16565b600101610d04565b50505050505092915050565b6000610e1381611341565b81610e1d81611559565b83610e278161148b565b60008581526036602090815260409091208535815590850135600182015550847fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b85604051610e769190612180565b60405180910390a25050505050565b6000828152600260205260408120610e9d908361159e565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b031681526003850154818801526004850154818701526005909401549184019190915281840192909252805185526036845282852083518085019094528054845290910154928201929092529091610f6383836114d8565b9050610f6e826115aa565b610f8b576040516348c6117b60e11b815260040160405180910390fd5b80341015610fac57604051632ca2f52b60e11b815260040160405180910390fd5b33328114610fcc576040516259ca3d60e61b815260040160405180910390fd5b604084810151805160209182015160008981526037845284902034600382018190556002820180546001600160a01b0319166001600160a01b038981169182178355426004909501949094558b5188519384529683015295810183905290831660608201529193909290918991907f5934294f4724ea4bb71fee8511b9ccb8dd6d2249ac4d120a81ccfcbbd0ad905f9060800160405180910390a38115611077576110778383611426565b5050505050505050565b600081815260026020526040812061065b906115c5565b600082815260016020819052604090912001546110b481611341565b6106878383611370565b6000806110ca81611341565b826110d481611559565b33846040516020016110e7929190612197565b60408051808303601f1901815291815281516020928301206000818152603684529190912086358155918601356001830155935050827fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b8560405161114c9190612180565b60405180910390a25050919050565b600054610100900460ff161580801561117b5750600054600160ff909116105b806111955750303b158015611195575060005460ff166001145b6111f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106f8565b6000805460ff19166001179055801561121b576000805461ff0019166101001790555b611224836115cf565b61122d82611392565b611238600088611640565b846000805160206123ee83398151915260005b8281101561128b57611283828a8a8481811061126957611269612001565b905060200201602081019061127e9190611fce565b611640565b60010161124b565b5050603580546001600160a01b0319166001600160a01b0387161790555080156112ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b600061130381611341565b61070b826115cf565b60006001600160e01b03198216637965db0b60e01b148061065b57506301ffc9a760e01b6001600160e01b031983161461065b565b61134b813361164a565b50565b611358828261167d565b600082815260026020526040902061068790826116e8565b61137a82826116fd565b60008281526002602052604090206106879082611764565b6127108111156113b55760405163220f1a1560e01b815260040160405180910390fd5b60398190556040518181527f846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab70671823429060200160405180910390a150565b6000818411806113ff57508183115b1561140b575080610e9d565b6114158484611779565b905081811115610e9d575092915050565b6000611432838361178d565b9050806106875761144b836001600160a01b0316611803565b61145483611819565b6040516020016114659291906121e2565b60408051601f198184030181529082905262461bcd60e51b82526106f891600401612260565b60008181526036602090815260409182902082518084019093528054835260010154908201526114bb9051421090565b61134b5760405163028e4e9760e51b815260040160405180910390fd5b60006114f08360200151846040015160200151611830565b905082604001516020015160001415801561150e5750602082015142105b1561065b576115268360200151603954612710611846565b610e9d908261202d565b600881901c600090815260209290925260409091208054600160ff9093169290921b9091179055565b6020810135813511158015611581575061158161157b36839003830183612293565b51421090565b61134b576040516302ef0c7360e21b815260040160405180910390fd5b6000610e9d8383611930565b60004282600001511115801561065b57505060200151421090565b600061065b825490565b6001600160a01b0381166115f6576040516362daafb160e11b815260040160405180910390fd5b603880546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b61070b828261134e565b6116548282610ea4565b61070b5761166181611803565b61166c83602061195a565b6040516020016114659291906122ef565b6116878282610ea4565b61070b5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610e9d836001600160a01b038416611af5565b6117078282610ea4565b1561070b5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e9d836001600160a01b038416611b44565b8181018281101561065b575060001961065b565b604080516000808252602082019092526001600160a01b0384169083906040516117b79190612364565b60006040518083038185875af1925050503d80600081146117f4576040519150601f19603f3d011682016040523d82523d6000602084013e6117f9565b606091505b5090949350505050565b606061065b6001600160a01b038316601461195a565b606061065b8261182884611c37565b60010161195a565b600081831161183f5781610e9d565b5090919050565b60008080600019858709858702925082811083820303915050806000036118805783828161187657611876612380565b0492505050610e9d565b8084116118c75760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106f8565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082600001828154811061194757611947612001565b9060005260206000200154905092915050565b60606000611969836002612396565b61197490600261202d565b6001600160401b0381111561198b5761198b611feb565b6040519080825280601f01601f1916602001820160405280156119b5576020820181803683370190505b509050600360fc1b816000815181106119d0576119d0612001565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119ff576119ff612001565b60200101906001600160f81b031916908160001a9053506000611a23846002612396565b611a2e90600161202d565b90505b6001811115611aa6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a6257611a62612001565b1a60f81b828281518110611a7857611a78612001565b60200101906001600160f81b031916908160001a90535060049490941c93611a9f816123ad565b9050611a31565b508315610e9d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106f8565b6000818152600183016020526040812054611b3c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561065b565b50600061065b565b60008181526001830160205260408120548015611c2d576000611b686001836123c4565b8554909150600090611b7c906001906123c4565b9050818114611be1576000866000018281548110611b9c57611b9c612001565b9060005260206000200154905080876000018481548110611bbf57611bbf612001565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611bf257611bf26123d7565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061065b565b600091505061065b565b600080608083901c15611c4f5760809290921c916010015b604083901c15611c645760409290921c916008015b602083901c15611c795760209290921c916004015b601083901c15611c8e5760109290921c916002015b600883901c1561065b5760010192915050565b60405180606001604052806000801916815260200160008152602001611cf1604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b905290565b600060208284031215611d0857600080fd5b81356001600160e01b031981168114610e9d57600080fd5b600060208284031215611d3257600080fd5b5035919050565b6001600160a01b038116811461134b57600080fd5b60008060408385031215611d6157600080fd5b823591506020830135611d7381611d39565b809150509250929050565b60008083601f840112611d9057600080fd5b5081356001600160401b03811115611da757600080fd5b6020830191508360208260051b8501011115611dc257600080fd5b9250929050565b60008060208385031215611ddc57600080fd5b82356001600160401b03811115611df257600080fd5b611dfe85828601611d7e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015611e4257835183529284019291840191600101611e26565b50909695505050505050565b600080600080600060608688031215611e6657600080fd5b8535945060208601356001600160401b0380821115611e8457600080fd5b611e9089838a01611d7e565b90965094506040880135915080821115611ea957600080fd5b50611eb688828901611d7e565b969995985093965092949392505050565b600060408284031215611ed957600080fd5b50919050565b60008060608385031215611ef257600080fd5b82359150611f038460208501611ec7565b90509250929050565b60008060408385031215611f1f57600080fd5b50508035926020909101359150565b600060408284031215611f4057600080fd5b610e9d8383611ec7565b60008060008060008060a08789031215611f6357600080fd5b8635611f6e81611d39565b955060208701356001600160401b03811115611f8957600080fd5b611f9589828a01611d7e565b9096509450506040870135611fa981611d39565b92506060870135611fb981611d39565b80925050608087013590509295509295509295565b600060208284031215611fe057600080fd5b8135610e9d81611d39565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561065b5761065b612017565b81835260006001600160fb1b0383111561205957600080fd5b8260051b80836020870137939093016020019392505050565b604081526000612086604083018688612040565b8281036020840152612099818587612040565b979650505050505050565b6000808335601e198436030181126120bb57600080fd5b8301803591506001600160401b038211156120d557600080fd5b602001915036819003821315611dc257600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b6000806040838503121561215957600080fd5b82516001600160401b038116811461217057600080fd5b6020939093015192949293505050565b81358152602080830135908201526040810161065b565b6001600160a01b038316815260608101610e9d602083018480358252602090810135910152565b60005b838110156121d95781810151838201526020016121c1565b50506000910152565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b60208201526000835161222d81602a8501602088016121be565b660103b30b63ab2960cd1b602a9184019182015283516122548160318401602088016121be565b01603101949350505050565b602081526000825180602084015261227f8160408501602087016121be565b601f01601f19169190910160400192915050565b6000604082840312156122a557600080fd5b604051604081018181106001600160401b03821117156122d557634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123278160178501602088016121be565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123588160288401602088016121be565b01602801949350505050565b600082516123768184602087016121be565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b808202811582820484141761065b5761065b612017565b6000816123bc576123bc612017565b506000190190565b8181038181111561065b5761065b612017565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220af269df2a00739b1d11f4b9dfe6c9748aae7893d5be6658d7c88083e147efb3764736f6c63430008150033", + "nonce": "0x2c940" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2d53957b78a0c0ae46f7ec589a8fa990d9906e33dfe246ee56fd546d8b77b0b8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8000000000000000000000000c1a64532ab6e3ec0e01f2064a9075311b483acb9", + "nonce": "0x2c941" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xf1184db70a589477c8ad6e3d778977ccf71556865bae067260b851a3fdd918eb", + "0x2d53957b78a0c0ae46f7ec589a8fa990d9906e33dfe246ee56fd546d8b77b0b8" + ], + "returns": {}, + "timestamp": 1698122959, + "chain": 2021, + "multi": false, + "commit": "9ecc86f" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeAuction.s.sol/2021/run-1698122966.json b/broadcast/20231024_UpgradeAuction.s.sol/2021/run-1698122966.json new file mode 100644 index 00000000..5b9d09f8 --- /dev/null +++ b/broadcast/20231024_UpgradeAuction.s.sol/2021/run-1698122966.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0xf1184db70a589477c8ad6e3d778977ccf71556865bae067260b851a3fdd918eb", + "transactionType": "CREATE", + "contractName": "RNSAuction", + "contractAddress": "0xc1A64532aB6e3EC0E01f2064A9075311B483Acb9", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x295707", + "value": "0x0", + "data": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612443806100df6000396000f3fe6080604052600436106101c25760003560e01c8063791a26b4116100f7578063a282d4ae11610095578063db5e1ec611610064578063db5e1ec6146105b4578063ec14cf37146105d4578063f0f44260146105f4578063f5b541a61461061457600080fd5b8063a282d4ae14610544578063b967169014610559578063ca15c87314610574578063d547741f1461059457600080fd5b80639010d07c116100d15780639010d07c146104dc57806391d14854146104fc5780639979ef451461051c578063a217fddf1461052f57600080fd5b8063791a26b41461047e57806381bec1b31461049e5780638c843314146104be57600080fd5b80633b19e84a1161016457806360223b441161013e57806360223b44146103a15780636e7d60f2146103c1578063777b0a18146103ee57806378bd79351461040e57600080fd5b80633b19e84a146103395780634c255c971461036b57806353f9195e1461038157600080fd5b806319a3ee40116101a057806319a3ee40146102a0578063248a9ca3146102b85780632f2ff15d146102f757806336568abe1461031957600080fd5b806301ffc9a7146101c75780630afe1bb3146101fc57806315a291621461022c575b600080fd5b3480156101d357600080fd5b506101e76101e2366004611cf6565b610636565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b506102146305a39a8081565b6040516001600160401b0390911681526020016101f3565b34801561023857600080fd5b50610285610247366004611d20565b604080518082019091526000808252602082015250600090815260366020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101f3565b3480156102ac57600080fd5b506102146301e1338081565b3480156102c457600080fd5b506102e96102d3366004611d20565b6000908152600160208190526040909120015490565b6040519081526020016101f3565b34801561030357600080fd5b50610317610312366004611d4e565b610661565b005b34801561032557600080fd5b50610317610334366004611d4e565b61068c565b34801561034557600080fd5b506038546001600160a01b03165b6040516001600160a01b0390911681526020016101f3565b34801561037757600080fd5b506102e961271081565b34801561038d57600080fd5b506101e761039c366004611d20565b61070f565b3480156103ad57600080fd5b506103176103bc366004611d20565b610732565b3480156103cd57600080fd5b506103e16103dc366004611dc9565b610746565b6040516101f39190611e0a565b3480156103fa57600080fd5b50610317610409366004611e4e565b610a35565b34801561041a57600080fd5b5061042e610429366004611d20565b610b98565b6040805183518152602080850151818301529382015180516001600160a01b0316828401529384015160608083019190915291840151608082015292015160a083015260c082015260e0016101f3565b34801561048a57600080fd5b506103e1610499366004611dc9565b610c4d565b3480156104aa57600080fd5b506103176104b9366004611edf565b610e08565b3480156104ca57600080fd5b506035546001600160a01b0316610353565b3480156104e857600080fd5b506103536104f7366004611f0c565b610e85565b34801561050857600080fd5b506101e7610517366004611d4e565b610ea4565b61031761052a366004611d20565b610ecf565b34801561053b57600080fd5b506102e9600081565b34801561055057600080fd5b506039546102e9565b34801561056557600080fd5b506102146001600160401b0381565b34801561058057600080fd5b506102e961058f366004611d20565b611081565b3480156105a057600080fd5b506103176105af366004611d4e565b611098565b3480156105c057600080fd5b506102e96105cf366004611f2e565b6110be565b3480156105e057600080fd5b506103176105ef366004611f4a565b61115b565b34801561060057600080fd5b5061031761060f366004611fce565b6112f8565b34801561062057600080fd5b506102e96000805160206123ee83398151915281565b60006001600160e01b03198216635a05180f60e01b148061065b575061065b8261130c565b92915050565b6000828152600160208190526040909120015461067d81611341565b610687838361134e565b505050565b6001600160a01b03811633146107015760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61070b8282611370565b5050565b600881901c6000908152603a6020526040812054600160ff84161b16151561065b565b600061073d81611341565b61070b82611392565b6060600080610768604051806040016040528060008152602001600081525090565b610770611ca1565b85806001600160401b0381111561078957610789611feb565b6040519080825280602002602001820160405280156107b2578160200160208202803683370190505b506035549096506001600160a01b031660006107da426301e133806001600160401b036113f0565b905060005b83811015610a11578a8a828181106107f9576107f9612001565b60209081029290920135600081815260378452604080822081516060808201845282548252600180840154838a0152845160808101865260028501546001600160a01b031681526003850154818b0152600485015481870152600590940154848301528285019384528251865260368952848620855180870190965280548652015497840197909752905190950151929c5099509297509091039050610a095760208601514210156108be576040516372d1250d60e01b815260040160405180910390fd5b8460400151604001516000036108e7576040516323bbcc0160e01b815260040160405180910390fd5b6040850151602001516108fa908861202d565b60405163fc284d1160e01b8152600481018a90526001600160401b03841660248201529097506001600160a01b0384169063fc284d1190604401600060405180830381600087803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b505050506040858101515190516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018a9052908416906323b872dd90606401600060405180830381600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b50505050428982815181106109e8576109e8612001565b602090810291909101810182905260008a8152603790915260409020600501555b6001016107df565b50603854610a28906001600160a01b031687611426565b5050505050505092915050565b6000805160206123ee833981519152610a4d81611341565b85610a578161148b565b84801580610a655750808414155b15610a8357604051634ec4810560e11b815260040160405180910390fd5b6000806000805b84811015610b4c578a8a82818110610aa457610aa4612001565b905060200201359350610ab68461070f565b610ad357604051637d6fe8d760e11b815260040160405180910390fd5b6000848152603760205260409020805493509150821580610af357508b83145b80610b0057506004820154155b610b1d57604051631dc8374160e01b815260040160405180910390fd5b8b8255888882818110610b3257610b32612001565b905060200201358260010181905550806001019050610a8a565b508a7f9a845a1c4235343a450f5e39d4179b7e2a6c9586c02bff45d956717f4a19dd948b8b8b8b604051610b839493929190612072565b60405180910390a25050505050505050505050565b610ba0611ca1565b5060008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b03168152600385015481880152600485015481870152600590940154918401919091528184019290925280518351808501855286815285018690528552603684528285208351808501909452805484529091015492820192909252909190610c4583826114d8565b915050915091565b60606000805160206123ee833981519152610c6781611341565b826000819003610c8a57604051634ec4810560e11b815260040160405180910390fd5b806001600160401b03811115610ca257610ca2611feb565b604051908082528060200260200182016040528015610ccb578160200160208202803683370190505b506035549093506001600160a01b03167fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6886301e1338060005b84811015610dfc57836001600160a01b0316630570891f848b8b85818110610d2e57610d2e612001565b9050602002810190610d4091906120a4565b600030886040518763ffffffff1660e01b8152600401610d65969594939291906120ea565b60408051808303816000875af1158015610d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190612146565b9050878281518110610dbb57610dbb612001565b602002602001018181525050610df4878281518110610ddc57610ddc612001565b6020026020010151603a61153090919063ffffffff16565b600101610d04565b50505050505092915050565b6000610e1381611341565b81610e1d81611559565b83610e278161148b565b60008581526036602090815260409091208535815590850135600182015550847fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b85604051610e769190612180565b60405180910390a25050505050565b6000828152600260205260408120610e9d908361159e565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b031681526003850154818801526004850154818701526005909401549184019190915281840192909252805185526036845282852083518085019094528054845290910154928201929092529091610f6383836114d8565b9050610f6e826115aa565b610f8b576040516348c6117b60e11b815260040160405180910390fd5b80341015610fac57604051632ca2f52b60e11b815260040160405180910390fd5b33328114610fcc576040516259ca3d60e61b815260040160405180910390fd5b604084810151805160209182015160008981526037845284902034600382018190556002820180546001600160a01b0319166001600160a01b038981169182178355426004909501949094558b5188519384529683015295810183905290831660608201529193909290918991907f5934294f4724ea4bb71fee8511b9ccb8dd6d2249ac4d120a81ccfcbbd0ad905f9060800160405180910390a38115611077576110778383611426565b5050505050505050565b600081815260026020526040812061065b906115c5565b600082815260016020819052604090912001546110b481611341565b6106878383611370565b6000806110ca81611341565b826110d481611559565b33846040516020016110e7929190612197565b60408051808303601f1901815291815281516020928301206000818152603684529190912086358155918601356001830155935050827fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b8560405161114c9190612180565b60405180910390a25050919050565b600054610100900460ff161580801561117b5750600054600160ff909116105b806111955750303b158015611195575060005460ff166001145b6111f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106f8565b6000805460ff19166001179055801561121b576000805461ff0019166101001790555b611224836115cf565b61122d82611392565b611238600088611640565b846000805160206123ee83398151915260005b8281101561128b57611283828a8a8481811061126957611269612001565b905060200201602081019061127e9190611fce565b611640565b60010161124b565b5050603580546001600160a01b0319166001600160a01b0387161790555080156112ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b600061130381611341565b61070b826115cf565b60006001600160e01b03198216637965db0b60e01b148061065b57506301ffc9a760e01b6001600160e01b031983161461065b565b61134b813361164a565b50565b611358828261167d565b600082815260026020526040902061068790826116e8565b61137a82826116fd565b60008281526002602052604090206106879082611764565b6127108111156113b55760405163220f1a1560e01b815260040160405180910390fd5b60398190556040518181527f846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab70671823429060200160405180910390a150565b6000818411806113ff57508183115b1561140b575080610e9d565b6114158484611779565b905081811115610e9d575092915050565b6000611432838361178d565b9050806106875761144b836001600160a01b0316611803565b61145483611819565b6040516020016114659291906121e2565b60408051601f198184030181529082905262461bcd60e51b82526106f891600401612260565b60008181526036602090815260409182902082518084019093528054835260010154908201526114bb9051421090565b61134b5760405163028e4e9760e51b815260040160405180910390fd5b60006114f08360200151846040015160200151611830565b905082604001516020015160001415801561150e5750602082015142105b1561065b576115268360200151603954612710611846565b610e9d908261202d565b600881901c600090815260209290925260409091208054600160ff9093169290921b9091179055565b6020810135813511158015611581575061158161157b36839003830183612293565b51421090565b61134b576040516302ef0c7360e21b815260040160405180910390fd5b6000610e9d8383611930565b60004282600001511115801561065b57505060200151421090565b600061065b825490565b6001600160a01b0381166115f6576040516362daafb160e11b815260040160405180910390fd5b603880546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b61070b828261134e565b6116548282610ea4565b61070b5761166181611803565b61166c83602061195a565b6040516020016114659291906122ef565b6116878282610ea4565b61070b5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610e9d836001600160a01b038416611af5565b6117078282610ea4565b1561070b5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e9d836001600160a01b038416611b44565b8181018281101561065b575060001961065b565b604080516000808252602082019092526001600160a01b0384169083906040516117b79190612364565b60006040518083038185875af1925050503d80600081146117f4576040519150601f19603f3d011682016040523d82523d6000602084013e6117f9565b606091505b5090949350505050565b606061065b6001600160a01b038316601461195a565b606061065b8261182884611c37565b60010161195a565b600081831161183f5781610e9d565b5090919050565b60008080600019858709858702925082811083820303915050806000036118805783828161187657611876612380565b0492505050610e9d565b8084116118c75760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106f8565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082600001828154811061194757611947612001565b9060005260206000200154905092915050565b60606000611969836002612396565b61197490600261202d565b6001600160401b0381111561198b5761198b611feb565b6040519080825280601f01601f1916602001820160405280156119b5576020820181803683370190505b509050600360fc1b816000815181106119d0576119d0612001565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119ff576119ff612001565b60200101906001600160f81b031916908160001a9053506000611a23846002612396565b611a2e90600161202d565b90505b6001811115611aa6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a6257611a62612001565b1a60f81b828281518110611a7857611a78612001565b60200101906001600160f81b031916908160001a90535060049490941c93611a9f816123ad565b9050611a31565b508315610e9d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106f8565b6000818152600183016020526040812054611b3c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561065b565b50600061065b565b60008181526001830160205260408120548015611c2d576000611b686001836123c4565b8554909150600090611b7c906001906123c4565b9050818114611be1576000866000018281548110611b9c57611b9c612001565b9060005260206000200154905080876000018481548110611bbf57611bbf612001565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611bf257611bf26123d7565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061065b565b600091505061065b565b600080608083901c15611c4f5760809290921c916010015b604083901c15611c645760409290921c916008015b602083901c15611c795760209290921c916004015b601083901c15611c8e5760109290921c916002015b600883901c1561065b5760010192915050565b60405180606001604052806000801916815260200160008152602001611cf1604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b905290565b600060208284031215611d0857600080fd5b81356001600160e01b031981168114610e9d57600080fd5b600060208284031215611d3257600080fd5b5035919050565b6001600160a01b038116811461134b57600080fd5b60008060408385031215611d6157600080fd5b823591506020830135611d7381611d39565b809150509250929050565b60008083601f840112611d9057600080fd5b5081356001600160401b03811115611da757600080fd5b6020830191508360208260051b8501011115611dc257600080fd5b9250929050565b60008060208385031215611ddc57600080fd5b82356001600160401b03811115611df257600080fd5b611dfe85828601611d7e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015611e4257835183529284019291840191600101611e26565b50909695505050505050565b600080600080600060608688031215611e6657600080fd5b8535945060208601356001600160401b0380821115611e8457600080fd5b611e9089838a01611d7e565b90965094506040880135915080821115611ea957600080fd5b50611eb688828901611d7e565b969995985093965092949392505050565b600060408284031215611ed957600080fd5b50919050565b60008060608385031215611ef257600080fd5b82359150611f038460208501611ec7565b90509250929050565b60008060408385031215611f1f57600080fd5b50508035926020909101359150565b600060408284031215611f4057600080fd5b610e9d8383611ec7565b60008060008060008060a08789031215611f6357600080fd5b8635611f6e81611d39565b955060208701356001600160401b03811115611f8957600080fd5b611f9589828a01611d7e565b9096509450506040870135611fa981611d39565b92506060870135611fb981611d39565b80925050608087013590509295509295509295565b600060208284031215611fe057600080fd5b8135610e9d81611d39565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561065b5761065b612017565b81835260006001600160fb1b0383111561205957600080fd5b8260051b80836020870137939093016020019392505050565b604081526000612086604083018688612040565b8281036020840152612099818587612040565b979650505050505050565b6000808335601e198436030181126120bb57600080fd5b8301803591506001600160401b038211156120d557600080fd5b602001915036819003821315611dc257600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b6000806040838503121561215957600080fd5b82516001600160401b038116811461217057600080fd5b6020939093015192949293505050565b81358152602080830135908201526040810161065b565b6001600160a01b038316815260608101610e9d602083018480358252602090810135910152565b60005b838110156121d95781810151838201526020016121c1565b50506000910152565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b60208201526000835161222d81602a8501602088016121be565b660103b30b63ab2960cd1b602a9184019182015283516122548160318401602088016121be565b01603101949350505050565b602081526000825180602084015261227f8160408501602087016121be565b601f01601f19169190910160400192915050565b6000604082840312156122a557600080fd5b604051604081018181106001600160401b03821117156122d557634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123278160178501602088016121be565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123588160288401602088016121be565b01602801949350505050565b600082516123768184602087016121be565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b808202811582820484141761065b5761065b612017565b6000816123bc576123bc612017565b506000190190565b8181038181111561065b5761065b612017565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220af269df2a00739b1d11f4b9dfe6c9748aae7893d5be6658d7c88083e147efb3764736f6c63430008150033", + "nonce": "0x2c940" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2d53957b78a0c0ae46f7ec589a8fa990d9906e33dfe246ee56fd546d8b77b0b8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8000000000000000000000000c1a64532ab6e3ec0e01f2064a9075311b483acb9", + "nonce": "0x2c941" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xf1184db70a589477c8ad6e3d778977ccf71556865bae067260b851a3fdd918eb", + "transactionIndex": "0x0", + "blockHash": "0xfb57aec2cfaf3202c08e9872bf1cb563df29686429cd036fee68e47ff9351422", + "blockNumber": "0x147abf9", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x1fcccb", + "gasUsed": "0x1fcccb", + "contractAddress": "0xc1A64532aB6e3EC0E01f2064A9075311B483Acb9", + "logs": [ + { + "address": "0xc1A64532aB6e3EC0E01f2064A9075311B483Acb9", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xfb57aec2cfaf3202c08e9872bf1cb563df29686429cd036fee68e47ff9351422", + "blockNumber": "0x147abf9", + "transactionHash": "0xf1184db70a589477c8ad6e3d778977ccf71556865bae067260b851a3fdd918eb", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000200000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x2d53957b78a0c0ae46f7ec589a8fa990d9906e33dfe246ee56fd546d8b77b0b8", + "transactionIndex": "0x1", + "blockHash": "0xfb57aec2cfaf3202c08e9872bf1cb563df29686429cd036fee68e47ff9351422", + "blockNumber": "0x147abf9", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x2051d5", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000c1a64532ab6e3ec0e01f2064a9075311b483acb9" + ], + "data": "0x", + "blockHash": "0xfb57aec2cfaf3202c08e9872bf1cb563df29686429cd036fee68e47ff9351422", + "blockNumber": "0x147abf9", + "transactionHash": "0x2d53957b78a0c0ae46f7ec589a8fa990d9906e33dfe246ee56fd546d8b77b0b8", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000000000000000000000000200000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000020000000000000000000000000000000000008000000000000000000000000000000000200000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698122966, + "chain": 2021, + "multi": false, + "commit": "9ecc86f" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeAuction.s.sol/2021/run-latest.json b/broadcast/20231024_UpgradeAuction.s.sol/2021/run-latest.json new file mode 100644 index 00000000..5b9d09f8 --- /dev/null +++ b/broadcast/20231024_UpgradeAuction.s.sol/2021/run-latest.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0xf1184db70a589477c8ad6e3d778977ccf71556865bae067260b851a3fdd918eb", + "transactionType": "CREATE", + "contractName": "RNSAuction", + "contractAddress": "0xc1A64532aB6e3EC0E01f2064A9075311B483Acb9", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x295707", + "value": "0x0", + "data": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612443806100df6000396000f3fe6080604052600436106101c25760003560e01c8063791a26b4116100f7578063a282d4ae11610095578063db5e1ec611610064578063db5e1ec6146105b4578063ec14cf37146105d4578063f0f44260146105f4578063f5b541a61461061457600080fd5b8063a282d4ae14610544578063b967169014610559578063ca15c87314610574578063d547741f1461059457600080fd5b80639010d07c116100d15780639010d07c146104dc57806391d14854146104fc5780639979ef451461051c578063a217fddf1461052f57600080fd5b8063791a26b41461047e57806381bec1b31461049e5780638c843314146104be57600080fd5b80633b19e84a1161016457806360223b441161013e57806360223b44146103a15780636e7d60f2146103c1578063777b0a18146103ee57806378bd79351461040e57600080fd5b80633b19e84a146103395780634c255c971461036b57806353f9195e1461038157600080fd5b806319a3ee40116101a057806319a3ee40146102a0578063248a9ca3146102b85780632f2ff15d146102f757806336568abe1461031957600080fd5b806301ffc9a7146101c75780630afe1bb3146101fc57806315a291621461022c575b600080fd5b3480156101d357600080fd5b506101e76101e2366004611cf6565b610636565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b506102146305a39a8081565b6040516001600160401b0390911681526020016101f3565b34801561023857600080fd5b50610285610247366004611d20565b604080518082019091526000808252602082015250600090815260366020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101f3565b3480156102ac57600080fd5b506102146301e1338081565b3480156102c457600080fd5b506102e96102d3366004611d20565b6000908152600160208190526040909120015490565b6040519081526020016101f3565b34801561030357600080fd5b50610317610312366004611d4e565b610661565b005b34801561032557600080fd5b50610317610334366004611d4e565b61068c565b34801561034557600080fd5b506038546001600160a01b03165b6040516001600160a01b0390911681526020016101f3565b34801561037757600080fd5b506102e961271081565b34801561038d57600080fd5b506101e761039c366004611d20565b61070f565b3480156103ad57600080fd5b506103176103bc366004611d20565b610732565b3480156103cd57600080fd5b506103e16103dc366004611dc9565b610746565b6040516101f39190611e0a565b3480156103fa57600080fd5b50610317610409366004611e4e565b610a35565b34801561041a57600080fd5b5061042e610429366004611d20565b610b98565b6040805183518152602080850151818301529382015180516001600160a01b0316828401529384015160608083019190915291840151608082015292015160a083015260c082015260e0016101f3565b34801561048a57600080fd5b506103e1610499366004611dc9565b610c4d565b3480156104aa57600080fd5b506103176104b9366004611edf565b610e08565b3480156104ca57600080fd5b506035546001600160a01b0316610353565b3480156104e857600080fd5b506103536104f7366004611f0c565b610e85565b34801561050857600080fd5b506101e7610517366004611d4e565b610ea4565b61031761052a366004611d20565b610ecf565b34801561053b57600080fd5b506102e9600081565b34801561055057600080fd5b506039546102e9565b34801561056557600080fd5b506102146001600160401b0381565b34801561058057600080fd5b506102e961058f366004611d20565b611081565b3480156105a057600080fd5b506103176105af366004611d4e565b611098565b3480156105c057600080fd5b506102e96105cf366004611f2e565b6110be565b3480156105e057600080fd5b506103176105ef366004611f4a565b61115b565b34801561060057600080fd5b5061031761060f366004611fce565b6112f8565b34801561062057600080fd5b506102e96000805160206123ee83398151915281565b60006001600160e01b03198216635a05180f60e01b148061065b575061065b8261130c565b92915050565b6000828152600160208190526040909120015461067d81611341565b610687838361134e565b505050565b6001600160a01b03811633146107015760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61070b8282611370565b5050565b600881901c6000908152603a6020526040812054600160ff84161b16151561065b565b600061073d81611341565b61070b82611392565b6060600080610768604051806040016040528060008152602001600081525090565b610770611ca1565b85806001600160401b0381111561078957610789611feb565b6040519080825280602002602001820160405280156107b2578160200160208202803683370190505b506035549096506001600160a01b031660006107da426301e133806001600160401b036113f0565b905060005b83811015610a11578a8a828181106107f9576107f9612001565b60209081029290920135600081815260378452604080822081516060808201845282548252600180840154838a0152845160808101865260028501546001600160a01b031681526003850154818b0152600485015481870152600590940154848301528285019384528251865260368952848620855180870190965280548652015497840197909752905190950151929c5099509297509091039050610a095760208601514210156108be576040516372d1250d60e01b815260040160405180910390fd5b8460400151604001516000036108e7576040516323bbcc0160e01b815260040160405180910390fd5b6040850151602001516108fa908861202d565b60405163fc284d1160e01b8152600481018a90526001600160401b03841660248201529097506001600160a01b0384169063fc284d1190604401600060405180830381600087803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b505050506040858101515190516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018a9052908416906323b872dd90606401600060405180830381600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b50505050428982815181106109e8576109e8612001565b602090810291909101810182905260008a8152603790915260409020600501555b6001016107df565b50603854610a28906001600160a01b031687611426565b5050505050505092915050565b6000805160206123ee833981519152610a4d81611341565b85610a578161148b565b84801580610a655750808414155b15610a8357604051634ec4810560e11b815260040160405180910390fd5b6000806000805b84811015610b4c578a8a82818110610aa457610aa4612001565b905060200201359350610ab68461070f565b610ad357604051637d6fe8d760e11b815260040160405180910390fd5b6000848152603760205260409020805493509150821580610af357508b83145b80610b0057506004820154155b610b1d57604051631dc8374160e01b815260040160405180910390fd5b8b8255888882818110610b3257610b32612001565b905060200201358260010181905550806001019050610a8a565b508a7f9a845a1c4235343a450f5e39d4179b7e2a6c9586c02bff45d956717f4a19dd948b8b8b8b604051610b839493929190612072565b60405180910390a25050505050505050505050565b610ba0611ca1565b5060008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b03168152600385015481880152600485015481870152600590940154918401919091528184019290925280518351808501855286815285018690528552603684528285208351808501909452805484529091015492820192909252909190610c4583826114d8565b915050915091565b60606000805160206123ee833981519152610c6781611341565b826000819003610c8a57604051634ec4810560e11b815260040160405180910390fd5b806001600160401b03811115610ca257610ca2611feb565b604051908082528060200260200182016040528015610ccb578160200160208202803683370190505b506035549093506001600160a01b03167fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6886301e1338060005b84811015610dfc57836001600160a01b0316630570891f848b8b85818110610d2e57610d2e612001565b9050602002810190610d4091906120a4565b600030886040518763ffffffff1660e01b8152600401610d65969594939291906120ea565b60408051808303816000875af1158015610d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190612146565b9050878281518110610dbb57610dbb612001565b602002602001018181525050610df4878281518110610ddc57610ddc612001565b6020026020010151603a61153090919063ffffffff16565b600101610d04565b50505050505092915050565b6000610e1381611341565b81610e1d81611559565b83610e278161148b565b60008581526036602090815260409091208535815590850135600182015550847fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b85604051610e769190612180565b60405180910390a25050505050565b6000828152600260205260408120610e9d908361159e565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b031681526003850154818801526004850154818701526005909401549184019190915281840192909252805185526036845282852083518085019094528054845290910154928201929092529091610f6383836114d8565b9050610f6e826115aa565b610f8b576040516348c6117b60e11b815260040160405180910390fd5b80341015610fac57604051632ca2f52b60e11b815260040160405180910390fd5b33328114610fcc576040516259ca3d60e61b815260040160405180910390fd5b604084810151805160209182015160008981526037845284902034600382018190556002820180546001600160a01b0319166001600160a01b038981169182178355426004909501949094558b5188519384529683015295810183905290831660608201529193909290918991907f5934294f4724ea4bb71fee8511b9ccb8dd6d2249ac4d120a81ccfcbbd0ad905f9060800160405180910390a38115611077576110778383611426565b5050505050505050565b600081815260026020526040812061065b906115c5565b600082815260016020819052604090912001546110b481611341565b6106878383611370565b6000806110ca81611341565b826110d481611559565b33846040516020016110e7929190612197565b60408051808303601f1901815291815281516020928301206000818152603684529190912086358155918601356001830155935050827fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b8560405161114c9190612180565b60405180910390a25050919050565b600054610100900460ff161580801561117b5750600054600160ff909116105b806111955750303b158015611195575060005460ff166001145b6111f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106f8565b6000805460ff19166001179055801561121b576000805461ff0019166101001790555b611224836115cf565b61122d82611392565b611238600088611640565b846000805160206123ee83398151915260005b8281101561128b57611283828a8a8481811061126957611269612001565b905060200201602081019061127e9190611fce565b611640565b60010161124b565b5050603580546001600160a01b0319166001600160a01b0387161790555080156112ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b600061130381611341565b61070b826115cf565b60006001600160e01b03198216637965db0b60e01b148061065b57506301ffc9a760e01b6001600160e01b031983161461065b565b61134b813361164a565b50565b611358828261167d565b600082815260026020526040902061068790826116e8565b61137a82826116fd565b60008281526002602052604090206106879082611764565b6127108111156113b55760405163220f1a1560e01b815260040160405180910390fd5b60398190556040518181527f846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab70671823429060200160405180910390a150565b6000818411806113ff57508183115b1561140b575080610e9d565b6114158484611779565b905081811115610e9d575092915050565b6000611432838361178d565b9050806106875761144b836001600160a01b0316611803565b61145483611819565b6040516020016114659291906121e2565b60408051601f198184030181529082905262461bcd60e51b82526106f891600401612260565b60008181526036602090815260409182902082518084019093528054835260010154908201526114bb9051421090565b61134b5760405163028e4e9760e51b815260040160405180910390fd5b60006114f08360200151846040015160200151611830565b905082604001516020015160001415801561150e5750602082015142105b1561065b576115268360200151603954612710611846565b610e9d908261202d565b600881901c600090815260209290925260409091208054600160ff9093169290921b9091179055565b6020810135813511158015611581575061158161157b36839003830183612293565b51421090565b61134b576040516302ef0c7360e21b815260040160405180910390fd5b6000610e9d8383611930565b60004282600001511115801561065b57505060200151421090565b600061065b825490565b6001600160a01b0381166115f6576040516362daafb160e11b815260040160405180910390fd5b603880546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b61070b828261134e565b6116548282610ea4565b61070b5761166181611803565b61166c83602061195a565b6040516020016114659291906122ef565b6116878282610ea4565b61070b5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610e9d836001600160a01b038416611af5565b6117078282610ea4565b1561070b5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e9d836001600160a01b038416611b44565b8181018281101561065b575060001961065b565b604080516000808252602082019092526001600160a01b0384169083906040516117b79190612364565b60006040518083038185875af1925050503d80600081146117f4576040519150601f19603f3d011682016040523d82523d6000602084013e6117f9565b606091505b5090949350505050565b606061065b6001600160a01b038316601461195a565b606061065b8261182884611c37565b60010161195a565b600081831161183f5781610e9d565b5090919050565b60008080600019858709858702925082811083820303915050806000036118805783828161187657611876612380565b0492505050610e9d565b8084116118c75760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106f8565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082600001828154811061194757611947612001565b9060005260206000200154905092915050565b60606000611969836002612396565b61197490600261202d565b6001600160401b0381111561198b5761198b611feb565b6040519080825280601f01601f1916602001820160405280156119b5576020820181803683370190505b509050600360fc1b816000815181106119d0576119d0612001565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119ff576119ff612001565b60200101906001600160f81b031916908160001a9053506000611a23846002612396565b611a2e90600161202d565b90505b6001811115611aa6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a6257611a62612001565b1a60f81b828281518110611a7857611a78612001565b60200101906001600160f81b031916908160001a90535060049490941c93611a9f816123ad565b9050611a31565b508315610e9d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106f8565b6000818152600183016020526040812054611b3c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561065b565b50600061065b565b60008181526001830160205260408120548015611c2d576000611b686001836123c4565b8554909150600090611b7c906001906123c4565b9050818114611be1576000866000018281548110611b9c57611b9c612001565b9060005260206000200154905080876000018481548110611bbf57611bbf612001565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611bf257611bf26123d7565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061065b565b600091505061065b565b600080608083901c15611c4f5760809290921c916010015b604083901c15611c645760409290921c916008015b602083901c15611c795760209290921c916004015b601083901c15611c8e5760109290921c916002015b600883901c1561065b5760010192915050565b60405180606001604052806000801916815260200160008152602001611cf1604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b905290565b600060208284031215611d0857600080fd5b81356001600160e01b031981168114610e9d57600080fd5b600060208284031215611d3257600080fd5b5035919050565b6001600160a01b038116811461134b57600080fd5b60008060408385031215611d6157600080fd5b823591506020830135611d7381611d39565b809150509250929050565b60008083601f840112611d9057600080fd5b5081356001600160401b03811115611da757600080fd5b6020830191508360208260051b8501011115611dc257600080fd5b9250929050565b60008060208385031215611ddc57600080fd5b82356001600160401b03811115611df257600080fd5b611dfe85828601611d7e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015611e4257835183529284019291840191600101611e26565b50909695505050505050565b600080600080600060608688031215611e6657600080fd5b8535945060208601356001600160401b0380821115611e8457600080fd5b611e9089838a01611d7e565b90965094506040880135915080821115611ea957600080fd5b50611eb688828901611d7e565b969995985093965092949392505050565b600060408284031215611ed957600080fd5b50919050565b60008060608385031215611ef257600080fd5b82359150611f038460208501611ec7565b90509250929050565b60008060408385031215611f1f57600080fd5b50508035926020909101359150565b600060408284031215611f4057600080fd5b610e9d8383611ec7565b60008060008060008060a08789031215611f6357600080fd5b8635611f6e81611d39565b955060208701356001600160401b03811115611f8957600080fd5b611f9589828a01611d7e565b9096509450506040870135611fa981611d39565b92506060870135611fb981611d39565b80925050608087013590509295509295509295565b600060208284031215611fe057600080fd5b8135610e9d81611d39565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561065b5761065b612017565b81835260006001600160fb1b0383111561205957600080fd5b8260051b80836020870137939093016020019392505050565b604081526000612086604083018688612040565b8281036020840152612099818587612040565b979650505050505050565b6000808335601e198436030181126120bb57600080fd5b8301803591506001600160401b038211156120d557600080fd5b602001915036819003821315611dc257600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b6000806040838503121561215957600080fd5b82516001600160401b038116811461217057600080fd5b6020939093015192949293505050565b81358152602080830135908201526040810161065b565b6001600160a01b038316815260608101610e9d602083018480358252602090810135910152565b60005b838110156121d95781810151838201526020016121c1565b50506000910152565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b60208201526000835161222d81602a8501602088016121be565b660103b30b63ab2960cd1b602a9184019182015283516122548160318401602088016121be565b01603101949350505050565b602081526000825180602084015261227f8160408501602087016121be565b601f01601f19169190910160400192915050565b6000604082840312156122a557600080fd5b604051604081018181106001600160401b03821117156122d557634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123278160178501602088016121be565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123588160288401602088016121be565b01602801949350505050565b600082516123768184602087016121be565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b808202811582820484141761065b5761065b612017565b6000816123bc576123bc612017565b506000190190565b8181038181111561065b5761065b612017565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220af269df2a00739b1d11f4b9dfe6c9748aae7893d5be6658d7c88083e147efb3764736f6c63430008150033", + "nonce": "0x2c940" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2d53957b78a0c0ae46f7ec589a8fa990d9906e33dfe246ee56fd546d8b77b0b8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000b962edded164f55d136e491a3022246815e1b5a8000000000000000000000000c1a64532ab6e3ec0e01f2064a9075311b483acb9", + "nonce": "0x2c941" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xf1184db70a589477c8ad6e3d778977ccf71556865bae067260b851a3fdd918eb", + "transactionIndex": "0x0", + "blockHash": "0xfb57aec2cfaf3202c08e9872bf1cb563df29686429cd036fee68e47ff9351422", + "blockNumber": "0x147abf9", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x1fcccb", + "gasUsed": "0x1fcccb", + "contractAddress": "0xc1A64532aB6e3EC0E01f2064A9075311B483Acb9", + "logs": [ + { + "address": "0xc1A64532aB6e3EC0E01f2064A9075311B483Acb9", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xfb57aec2cfaf3202c08e9872bf1cb563df29686429cd036fee68e47ff9351422", + "blockNumber": "0x147abf9", + "transactionHash": "0xf1184db70a589477c8ad6e3d778977ccf71556865bae067260b851a3fdd918eb", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000200000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x2d53957b78a0c0ae46f7ec589a8fa990d9906e33dfe246ee56fd546d8b77b0b8", + "transactionIndex": "0x1", + "blockHash": "0xfb57aec2cfaf3202c08e9872bf1cb563df29686429cd036fee68e47ff9351422", + "blockNumber": "0x147abf9", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x2051d5", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000c1a64532ab6e3ec0e01f2064a9075311b483acb9" + ], + "data": "0x", + "blockHash": "0xfb57aec2cfaf3202c08e9872bf1cb563df29686429cd036fee68e47ff9351422", + "blockNumber": "0x147abf9", + "transactionHash": "0x2d53957b78a0c0ae46f7ec589a8fa990d9906e33dfe246ee56fd546d8b77b0b8", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000200000000000000000000000000000000200000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000020000000000000000000000000000000000008000000000000000000000000000000000200000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698122966, + "chain": 2021, + "multi": false, + "commit": "9ecc86f" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeDomainPrice.s.sol/2021/run-1698139056.json b/broadcast/20231024_UpgradeDomainPrice.s.sol/2021/run-1698139056.json new file mode 100644 index 00000000..92656837 --- /dev/null +++ b/broadcast/20231024_UpgradeDomainPrice.s.sol/2021/run-1698139056.json @@ -0,0 +1,75 @@ +{ + "transactions": [ + { + "hash": "0x4b783661fcdbb729be9d9e746fa603b8a2d46fc3eee3c8a0881d7eaaddccabf6", + "transactionType": "CREATE", + "contractName": "RNSDomainPrice", + "contractAddress": "0x79Abf4410D7c76d2b38F75eaE7bD6Fc6099797Ac", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x37bfb7", + "value": "0x0", + "data": "0x60806040526200000e62000014565b620000d5565b600054610100900460ff1615620000815760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000d3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61316780620000e56000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80635ef32e2c11610104578063ca15c873116100a2578063e229a67011610071578063e229a670146104b2578063f4651f49146104c5578063f5b541a6146104e6578063fe303ebf1461050d57600080fd5b8063ca15c87314610466578063d40ed58c14610479578063d547741f1461048c578063dd28776d1461049f57600080fd5b80637174026e116100de5780637174026e1461040d5780639010d07c1461042057806391d148541461044b578063a217fddf1461045e57600080fd5b80635ef32e2c146103b6578063700213c8146103be578063713a69a7146103e557600080fd5b80632f6ee6951161017c5780634c255c971161014b5780634c255c971461034f57806353faf90914610370578063599eaabf146103905780635c68c830146103a357600080fd5b80632f6ee695146102b757806335feb741146102d157806336568abe146102e457806339e47da7146102f757600080fd5b8063248a9ca3116101b8578063248a9ca31461023d57806328dd3065146102615780632be09ecc146102765780632f2ff15d146102a457600080fd5b806301ffc9a7146101df578063037f1769146102075780630a44f51f14610228575b600080fd5b6101f26101ed36600461236d565b610520565b60405190151581526020015b60405180910390f35b61021a610215366004612397565b61054b565b6040519081526020016101fe565b6102306105dd565b6040516101fe91906123b0565b61021a61024b366004612397565b6000908152600160208190526040909120015490565b61027461026f366004612427565b6106ba565b005b603554603954603a54604080516001600160a01b0390941684526020840192909252908201526060016101fe565b6102746102b236600461245c565b6106d6565b6102bf601281565b60405160ff90911681526020016101fe565b6102746102df3660046124d0565b610701565b6102746102f236600461245c565b610716565b604080518082018252600080825260209182015281518083018352603b546001600160c01b0381168083526001600160401b03600160c01b9092048216928401928352845190815291511691810191909152016101fe565b61035861271081565b6040516001600160401b0390911681526020016101fe565b61038361037e366004612555565b610799565b6040516101fe9190612618565b61027461039e366004612555565b6108d2565b61021a6103b136600461265e565b6109a2565b60375461021a565b61021a7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad81565b6103f86103f33660046127fe565b610a20565b604080519283526020830191909152016101fe565b61021a61041b366004612397565b610a4c565b61043361042e366004612832565b610adf565b6040516001600160a01b0390911681526020016101fe565b6101f261045936600461245c565b610afe565b61021a600081565b61021a610474366004612397565b610b29565b61027461048736600461286c565b610b40565b61027461049a36600461245c565b610d08565b6102746104ad366004612945565b610d2e565b6102746104c03660046129b0565b610e4c565b6104d86104d33660046129cc565b610e60565b6040516101fe929190612a10565b61021a7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b61027461051b366004612397565b611216565b60006001600160e01b03198216635a05180f60e01b148061054557506105458261122a565b92915050565b603554603a5460395460405163052571af60e51b815260009361054593869360129384936001600160a01b03169263a4ae35e09261059492600401918252602082015260400190565b608060405180830381865afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190612a4b565b92919061125f565b603854606090806001600160401b038111156105fb576105fb6126cf565b60405190808252806020026020018201604052801561064057816020015b60408051808201909152600080825260208201528152602001906001900390816106195790505b5091506000805b828110156106b4578060010191508184828151811061066857610668612ab8565b60200260200101516000018181525050603c60008381526020019081526020016000205484828151811061069e5761069e612ab8565b6020908102919091018101510152600101610647565b50505090565b60006106c5816112a0565b6106d08484846112ad565b50505050565b600082815260016020819052604090912001546106f2816112a0565b6106fc838361131f565b505050565b600061070c816112a0565b6106fc8383611341565b6001600160a01b038116331461078b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610795828261145a565b5050565b60607f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296107c5816112a0565b60006107d78b8b8b8b8b8b8b8b61147c565b905033816001600160401b038111156107f2576107f26126cf565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50935060005b828110156108c257610898828e8e8481811061083f5761083f612ab8565b905060200201358d8d8581811061085857610858612ab8565b905060200201358c8c8681811061087157610871612ab8565b905060200201358b8b8781811061088a5761088a612ab8565b9050602002013560006114ca565b8582815181106108aa576108aa612ab8565b91151560209283029190910190910152600101610821565b5050505098975050505050505050565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad6108fc816112a0565b600061090e8a8a8a8a8a8a8a8a61147c565b90503360005b828110156109945761098b828d8d8481811061093257610932612ab8565b905060200201358c8c8581811061094b5761094b612ab8565b905060200201358b8b8681811061096457610964612ab8565b905060200201358a8a8781811061097d5761097d612ab8565b9050602002013560016114ca565b50600101610914565b505050505050505050505050565b6000603e60006109e785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155992505050565b815260200190815260200160002054905080600003610a1957604051635421761560e11b815260040160405180910390fd5b1992915050565b600080610a3a610a3584805160209091012090565b611564565b9150610a4582610a4c565b9050915091565b603554603a5460395460405163052571af60e51b81526004810192909252602482015260009161054591849160129182916105d591601119916001600160a01b03169063a4ae35e090604401608060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad99190612a4b565b906115de565b6000828152600260205260408120610af79083611738565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260026020526040812061054590611744565b600054610100900460ff1615808015610b605750600054600160ff909116105b80610b7a5750303b158015610b7a575060005460ff166001145b610bdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610782565b6000805460ff191660011790558015610c00576000805461ff0019166101001790555b897f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960005b82811015610c6557610c5d828f8f84818110610c4357610c43612ab8565b9050602002016020810190610c589190612ace565b61174e565b600101610c25565b50603680546001600160a01b0319166001600160a01b038816179055610c8c60008f61174e565b610c968b8b611341565b610c9f89611758565b610ca88861178d565b610cb38786866112ad565b50508015610994576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b60008281526001602081905260409091200154610d24816112a0565b6106fc838361145a565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad610d58816112a0565b83801580610d665750808314155b15610d8457604051634ec4810560e11b815260040160405180910390fd5b600033815b83811015610e4157868682818110610da357610da3612ab8565b9050602002013519925082603e60008b8b85818110610dc457610dc4612ab8565b90506020020135815260200190815260200160002081905550888882818110610def57610def612ab8565b90506020020135826001600160a01b03167fb52d278cb3ef3b003bdfb385ce2eb23a83eb6d713724abfba1acaa16ccf6621485604051610e3191815260200190565b60405180910390a3600101610d89565b505050505050505050565b6000610e57816112a0565b6107958261178d565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610e9385611809565b855160208701209091506000906000818152603e60205260409020549091508015610eca57610ec3811987612b01565b85526111e9565b6000603c6000610edc866038546118f7565b81526020019081526020016000205490508087610ef99190612b01565b86526000610f387fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888a6000918252805160209182012090526040902090565b6036546040516329fc8caf60e11b8152600481018390529192506001600160a01b03169081906353f9195e90602401602060405180830381865afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190612b28565b156111e5576000816001600160a01b0316638c8433146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190612b43565b905060006110ac826001600160a01b03166303e9e609866040518263ffffffff1660e01b815260040161104691815260200190565b600060405180830381865afa158015611063573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261108b9190810190612bea565b60200151604001516001600160401b03168c6001600160401b03801661190d565b6040516378bd793560e01b8152600481018690529091506000906001600160a01b038516906378bd79359060240160e060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190612cf1565b5060408101516060015190915080158015906111a95750846001600160a01b0316630afe1bb36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190612d8e565b6001600160401b03166111a78285612dab565b115b156111c757604051631bb03f9d60e01b815260040160405180910390fd5b6111de6037546111d68b611564565b612710611943565b8b52505050505b5050505b83516111f490610a4c565b6020850152845161120490610a4c565b60208601525092959194509092505050565b6000611221816112a0565b61079582611758565b60006001600160e01b03198216637965db0b60e01b148061054557506301ffc9a760e01b6001600160e01b0319831614610545565b600061129584611285876000015160070b8860400151866112809190612dbe565b611a2d565b611290600187611a2d565b611943565b90505b949350505050565b6112aa8133611a87565b50565b603580546001600160a01b0319166001600160a01b0385169081179091556039839055603a8290558190336001600160a01b03167f671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b8560405161131291815260200190565b60405180910390a4505050565b6113298282611ae0565b60008281526002602052604090206106fc9082611b4b565b60408051808201909152600080825260208201523390603854839060005b8281101561140c5786868281811061137957611379612ab8565b90506040020180360381019061138f9190612de5565b935061139f828560000151611b60565b6020808601805187516000908152603c90935260409283902055865190519151929450916001600160a01b038816917f85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77916113fc91815260200190565b60405180910390a360010161135f565b50603854811461145257603881905560405181906001600160a01b038616907f7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b90600090a35b505050505050565b6114648282611b6f565b60008281526002602052604090206106fc9082611bd6565b8680158061148a5750858114155b806114955750838114155b806114a05750818114155b156114be57604051634ec4810560e11b815260040160405180910390fd5b98975050505050505050565b6000806114d68661054b565b6000888152603d6020526040902090915083806114f35750805482115b9250821561154d57818155426001820155604080518381526020810187905287918a916001600160a01b038d16917f60d5fd6d2284807447aae62f93c05517a647b8e8479c3af2c27ee1d1c85b540f910160405180910390a45b50509695505050505050565b805160209091012090565b6000818152603d602052604081206001810154808303611588575060009392505050565b60006115948242612dab565b835460408051808201909152603b546001600160c01b0381168252600160c01b90046001600160401b031660208201529192506115d5919061271084611beb565b95945050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260006116176001856040015161128090612e17565b90506001600160ff1b0381111561164d576040808501519051633e87ca5d60e11b815260039190910b6004820152602401610782565b600061165d600161128086612e17565b90506001600160ff1b0381111561168d57604051633e87ca5d60e11b8152600385900b6004820152602401610782565b845160009060070b61169f8385612e3a565b6116a99190612e80565b9050677fffffffffffffff8113156116f557604086810151875191516329b2fb5560e11b8152600391820b60048201529087900b602482015260079190910b6044820152606401610782565b60405180608001604052808260070b815260200187602001516001600160401b031681526020018660030b81526020018760600151815250935050505092915050565b6000610af78383611cc1565b6000610545825490565b610795828261131f565b6037819055604051819033907f1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf07390600090a350565b80603b61179a8282612ec3565b503390507fa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc646117cc6020840184612f05565b6117dc6040850160208601612f22565b604080516001600160c01b0390931683526001600160401b0390911660208301520160405180910390a250565b600080600080845190505b808310156118ef57600085848151811061183057611830612ab8565b01602001516001600160f81b0319169050600160ff1b811015611858576001840193506118e3565b600760fd1b6001600160f81b031982161015611879576002840193506118e3565b600f60fc1b6001600160f81b03198216101561189a576003840193506118e3565b601f60fb1b6001600160f81b0319821610156118bb576004840193506118e3565b603f60fa1b6001600160f81b0319821610156118dc576005840193506118e3565b6006840193505b50600190910190611814565b509392505050565b60008183106119065781610af7565b5090919050565b60008184118061191c57508183115b15611928575080610af7565b6119328484611ceb565b905081811115610af7575092915050565b600080806000198587098587029250828110838203039150508060000361197d5783828161197357611973612e6a565b0492505050610af7565b8084116119c45760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610782565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000808260030b1215611a5f57611a4382612e17565b611a4e90600a613023565b611a589084613035565b9050610545565b60008260030b1315611a8057611a7682600a613023565b611a589084612b01565b5081610545565b611a918282610afe565b61079557611a9e81611cff565b611aa9836020611d11565b604051602001611aba929190613049565b60408051601f198184030181529082905262461bcd60e51b8252610782916004016130be565b611aea8282610afe565b6107955760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610af7836001600160a01b038416611eac565b60008183116119065781610af7565b611b798282610afe565b156107955760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610af7836001600160a01b038416611efb565b60008085602001516001600160401b031683611c079190613035565b9050801580611c1e575085516001600160c01b0316155b15611c2c5784915050611298565b85516001600160c01b03166001600160401b03851603611c50576000915050611298565b61ffff811115611c7657604051637359f25f60e01b815260048101829052602401610782565b6000611ca68760000151866001600160401b0316036001600160c01b0316612710876001600160401b0316611943565b9050611cb6868261271085611fee565b979650505050505050565b6000826000018281548110611cd857611cd8612ab8565b9060005260206000200154905092915050565b818101828110156105455750600019610545565b60606105456001600160a01b03831660145b60606000611d20836002612b01565b611d2b9060026130f1565b6001600160401b03811115611d4257611d426126cf565b6040519080825280601f01601f191660200182016040528015611d6c576020820181803683370190505b509050600360fc1b81600081518110611d8757611d87612ab8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611db657611db6612ab8565b60200101906001600160f81b031916908160001a9053506000611dda846002612b01565b611de59060016130f1565b90505b6001811115611e5d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e1957611e19612ab8565b1a60f81b828281518110611e2f57611e2f612ab8565b60200101906001600160f81b031916908160001a90535060049490941c93611e5681613104565b9050611de8565b508315610af75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610782565b6000818152600183016020526040812054611ef357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610545565b506000610545565b60008181526001830160205260408120548015611fe4576000611f1f600183612dab565b8554909150600090611f3390600190612dab565b9050818114611f98576000866000018281548110611f5357611f53612ab8565b9060005260206000200154905080876000018481548110611f7657611f76612ab8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fa957611fa961311b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610545565b6000915050610545565b600082841480612000575061ffff8216155b1561200c575083611298565b5083600080808061202d61ffff87166120248a612151565b61ffff166118f7565b90505b61ffff8116156120835761204a8561ffff83168a0a612322565b9094509250831561206357829450808603955080820191505b61207c600261ffff83160461ffff168761ffff166118f7565b9050612030565b505b61ffff8516156120f6576120998488612322565b909350915082156120b857600019909401939092508290600101612085565b61ffff8116156120dd578584816120d1576120d1612e6a565b04935060001901612085565b6120e8848888611943565b600019909501949350612085565b600061210187612151565b90505b61ffff8216156121455760006121228261ffff168461ffff166118f7565b90508061ffff16880a868161213957612139612e6a565b04955090910390612104565b50505050949350505050565b60006003821015612164575060ff919050565b600482101561217557506080919050565b601082101561218657506040919050565b61010082101561219857506020919050565b611bdc8210156121aa57506014919050565b612c708210156121bc57506013919050565b614aa98210156121ce57506012919050565b6185548210156121e057506011919050565b620100008210156121f357506010919050565b620218378210156122065750600f919050565b6204e0468210156122195750600e919050565b620ced4c82101561222c5750600d919050565b6228514682101561223f5750600c919050565b629aa2ad8210156122525750600b919050565b6303080c018210156122665750600a919050565b6315c5cbbd82101561227a57506009919050565b64010000000082101561228f57506008919050565b6417c6a1f29f8210156122a457506007919050565b6506597fa94f5c8210156122ba57506006919050565b66093088c35d733b8210156122d157506005919050565b680100000000000000008210156122ea57506004919050565b6a285145f31ae515c447bb5782101561230557506003919050565b600160801b82101561231957506002919050565b5060015b919050565b600080836000036123395750600190506000612366565b8383028385828161234c5761234c612e6a565b041461235f576000809250925050612366565b6001925090505b9250929050565b60006020828403121561237f57600080fd5b81356001600160e01b031981168114610af757600080fd5b6000602082840312156123a957600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b828110156123fa576123ea84835180518252602090810151910152565b92840192908501906001016123cd565b5091979650505050505050565b6001600160a01b03811681146112aa57600080fd5b803561231d81612407565b60008060006060848603121561243c57600080fd5b833561244781612407565b95602085013595506040909401359392505050565b6000806040838503121561246f57600080fd5b82359150602083013561248181612407565b809150509250929050565b60008083601f84011261249e57600080fd5b5081356001600160401b038111156124b557600080fd5b6020830191508360208260061b850101111561236657600080fd5b600080602083850312156124e357600080fd5b82356001600160401b038111156124f957600080fd5b6125058582860161248c565b90969095509350505050565b60008083601f84011261252357600080fd5b5081356001600160401b0381111561253a57600080fd5b6020830191508360208260051b850101111561236657600080fd5b6000806000806000806000806080898b03121561257157600080fd5b88356001600160401b038082111561258857600080fd5b6125948c838d01612511565b909a50985060208b01359150808211156125ad57600080fd5b6125b98c838d01612511565b909850965060408b01359150808211156125d257600080fd5b6125de8c838d01612511565b909650945060608b01359150808211156125f757600080fd5b506126048b828c01612511565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b81811015612652578351151583529284019291840191600101612634565b50909695505050505050565b6000806020838503121561267157600080fd5b82356001600160401b038082111561268857600080fd5b818501915085601f83011261269c57600080fd5b8135818111156126ab57600080fd5b8660208285010111156126bd57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715612707576127076126cf565b60405290565b604080519081016001600160401b0381118282101715612707576127076126cf565b604051606081016001600160401b0381118282101715612707576127076126cf565b604051601f8201601f191681016001600160401b0381118282101715612779576127796126cf565b604052919050565b60006001600160401b0382111561279a5761279a6126cf565b50601f01601f191660200190565b600082601f8301126127b957600080fd5b81356127cc6127c782612781565b612751565b8181528460208386010111156127e157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561281057600080fd5b81356001600160401b0381111561282657600080fd5b611298848285016127a8565b6000806040838503121561284557600080fd5b50508035926020909101359150565b60006040828403121561286657600080fd5b50919050565b60008060008060008060008060008060006101408c8e03121561288e57600080fd5b6128988c35612407565b8b359a506001600160401b038060208e013511156128b557600080fd5b6128c58e60208f01358f01612511565b909b50995060408d01358110156128db57600080fd5b506128ec8d60408e01358e0161248c565b909850965060608c013595506129058d60808e01612854565b945060c08c013561291581612407565b935061292360e08d0161241c565b92506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806040858703121561295b57600080fd5b84356001600160401b038082111561297257600080fd5b61297e88838901612511565b9096509450602087013591508082111561299757600080fd5b506129a487828801612511565b95989497509550505050565b6000604082840312156129c257600080fd5b610af78383612854565b600080604083850312156129df57600080fd5b82356001600160401b038111156129f557600080fd5b612a01858286016127a8565b95602094909401359450505050565b825181526020808401518183015282516040830152820151606082015260808101610af7565b6001600160401b03811681146112aa57600080fd5b600060808284031215612a5d57600080fd5b612a656126e5565b82518060070b8114612a7657600080fd5b81526020830151612a8681612a36565b60208201526040830151600381900b8114612aa057600080fd5b60408201526060928301519281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ae057600080fd5b8135610af781612407565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761054557610545612aeb565b8051801515811461231d57600080fd5b600060208284031215612b3a57600080fd5b610af782612b18565b600060208284031215612b5557600080fd5b8151610af781612407565b60005b83811015612b7b578181015183820152602001612b63565b50506000910152565b600060808284031215612b9657600080fd5b612b9e6126e5565b90508151612bab81612407565b81526020820151612bbb81612407565b60208201526040820151612bce81612a36565b6040820152612bdf60608301612b18565b606082015292915050565b60006020808385031215612bfd57600080fd5b82516001600160401b0380821115612c1457600080fd5b9084019060a08287031215612c2857600080fd5b612c3061270d565b825182811115612c3f57600080fd5b830160608189031215612c5157600080fd5b612c5961272f565b815160ff81168114612c6a57600080fd5b81528186015186820152604082015184811115612c8657600080fd5b82019350601f84018913612c9957600080fd5b83519150612ca96127c783612781565b8281528987848701011115612cbd57600080fd5b612ccc83888301898801612b60565b6040820152825250612ce087848601612b84565b848201528094505050505092915050565b60008082840360e0811215612d0557600080fd5b60c0811215612d1357600080fd5b612d1b61272f565b84518152602085015160208201526080603f1983011215612d3b57600080fd5b612d436126e5565b91506040850151612d5381612407565b80835250606085015160208301526080850151604083015260a08501516060830152816040820152809350505060c083015190509250929050565b600060208284031215612da057600080fd5b8151610af781612a36565b8181038181111561054557610545612aeb565b600381810b9083900b01637fffffff8113637fffffff198212171561054557610545612aeb565b600060408284031215612df757600080fd5b612dff61270d565b82358152602083013560208201528091505092915050565b60008160030b637fffffff198103612e3157612e31612aeb565b60000392915050565b80820260008212600160ff1b84141615612e5657612e56612aeb565b818105831482151761054557610545612aeb565b634e487b7160e01b600052601260045260246000fd5b600082612e8f57612e8f612e6a565b600160ff1b821460001984141615612ea957612ea9612aeb565b500590565b6001600160c01b03811681146112aa57600080fd5b8135612ece81612eae565b81546001600160c01b03199081166001600160c01b039290921691821783556020840135612efb81612a36565b60c01b1617905550565b600060208284031215612f1757600080fd5b8135610af781612eae565b600060208284031215612f3457600080fd5b8135610af781612a36565b600181815b80851115612f7a578160001904821115612f6057612f60612aeb565b80851615612f6d57918102915b93841c9390800290612f44565b509250929050565b600082612f9157506001610545565b81612f9e57506000610545565b8160018114612fb45760028114612fbe57612fda565b6001915050610545565b60ff841115612fcf57612fcf612aeb565b50506001821b610545565b5060208310610133831016604e8410600b8410161715612ffd575081810a610545565b6130078383612f3f565b806000190482111561301b5761301b612aeb565b029392505050565b6000610af763ffffffff841683612f82565b60008261304457613044612e6a565b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613081816017850160208801612b60565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516130b2816028840160208801612b60565b01602801949350505050565b60208152600082518060208401526130dd816040850160208701612b60565b601f01601f19169190910160400192915050565b8082018082111561054557610545612aeb565b60008161311357613113612aeb565b506000190190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d0496611adae861791435296e0aae2099af9499031b6826466a4fe91423b08e564736f6c63430008150033", + "nonce": "0x2c94a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2b688d5651cf2786ad62eff7153e55a2b055734160900055ceba698ce43bfbf1", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec400000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab500000000000000000000000079abf4410d7c76d2b38f75eae7bd6fc6099797ac", + "nonce": "0x2c94b" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0ae785f2c1b42a12b45749521df65bfaf4519d6dccbd3a98032262d49ff5fd83", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "function": "grantRole(bytes32,address)", + "arguments": [ + "0x033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad", + "0x968D0Cd7343f711216817E617d3f92a23dC91c07" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x51caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "gas": "0x28a39", + "value": "0x0", + "data": "0x2f2ff15d033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "nonce": "0x2c94c" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x4b783661fcdbb729be9d9e746fa603b8a2d46fc3eee3c8a0881d7eaaddccabf6", + "0x2b688d5651cf2786ad62eff7153e55a2b055734160900055ceba698ce43bfbf1", + "0x0ae785f2c1b42a12b45749521df65bfaf4519d6dccbd3a98032262d49ff5fd83" + ], + "returns": {}, + "timestamp": 1698139056, + "chain": 2021, + "multi": false, + "commit": "f35ddbd" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeDomainPrice.s.sol/2021/run-1698139063.json b/broadcast/20231024_UpgradeDomainPrice.s.sol/2021/run-1698139063.json new file mode 100644 index 00000000..72dd2da8 --- /dev/null +++ b/broadcast/20231024_UpgradeDomainPrice.s.sol/2021/run-1698139063.json @@ -0,0 +1,166 @@ +{ + "transactions": [ + { + "hash": "0x4b783661fcdbb729be9d9e746fa603b8a2d46fc3eee3c8a0881d7eaaddccabf6", + "transactionType": "CREATE", + "contractName": "RNSDomainPrice", + "contractAddress": "0x79Abf4410D7c76d2b38F75eaE7bD6Fc6099797Ac", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x37bfb7", + "value": "0x0", + "data": "0x60806040526200000e62000014565b620000d5565b600054610100900460ff1615620000815760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000d3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61316780620000e56000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80635ef32e2c11610104578063ca15c873116100a2578063e229a67011610071578063e229a670146104b2578063f4651f49146104c5578063f5b541a6146104e6578063fe303ebf1461050d57600080fd5b8063ca15c87314610466578063d40ed58c14610479578063d547741f1461048c578063dd28776d1461049f57600080fd5b80637174026e116100de5780637174026e1461040d5780639010d07c1461042057806391d148541461044b578063a217fddf1461045e57600080fd5b80635ef32e2c146103b6578063700213c8146103be578063713a69a7146103e557600080fd5b80632f6ee6951161017c5780634c255c971161014b5780634c255c971461034f57806353faf90914610370578063599eaabf146103905780635c68c830146103a357600080fd5b80632f6ee695146102b757806335feb741146102d157806336568abe146102e457806339e47da7146102f757600080fd5b8063248a9ca3116101b8578063248a9ca31461023d57806328dd3065146102615780632be09ecc146102765780632f2ff15d146102a457600080fd5b806301ffc9a7146101df578063037f1769146102075780630a44f51f14610228575b600080fd5b6101f26101ed36600461236d565b610520565b60405190151581526020015b60405180910390f35b61021a610215366004612397565b61054b565b6040519081526020016101fe565b6102306105dd565b6040516101fe91906123b0565b61021a61024b366004612397565b6000908152600160208190526040909120015490565b61027461026f366004612427565b6106ba565b005b603554603954603a54604080516001600160a01b0390941684526020840192909252908201526060016101fe565b6102746102b236600461245c565b6106d6565b6102bf601281565b60405160ff90911681526020016101fe565b6102746102df3660046124d0565b610701565b6102746102f236600461245c565b610716565b604080518082018252600080825260209182015281518083018352603b546001600160c01b0381168083526001600160401b03600160c01b9092048216928401928352845190815291511691810191909152016101fe565b61035861271081565b6040516001600160401b0390911681526020016101fe565b61038361037e366004612555565b610799565b6040516101fe9190612618565b61027461039e366004612555565b6108d2565b61021a6103b136600461265e565b6109a2565b60375461021a565b61021a7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad81565b6103f86103f33660046127fe565b610a20565b604080519283526020830191909152016101fe565b61021a61041b366004612397565b610a4c565b61043361042e366004612832565b610adf565b6040516001600160a01b0390911681526020016101fe565b6101f261045936600461245c565b610afe565b61021a600081565b61021a610474366004612397565b610b29565b61027461048736600461286c565b610b40565b61027461049a36600461245c565b610d08565b6102746104ad366004612945565b610d2e565b6102746104c03660046129b0565b610e4c565b6104d86104d33660046129cc565b610e60565b6040516101fe929190612a10565b61021a7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b61027461051b366004612397565b611216565b60006001600160e01b03198216635a05180f60e01b148061054557506105458261122a565b92915050565b603554603a5460395460405163052571af60e51b815260009361054593869360129384936001600160a01b03169263a4ae35e09261059492600401918252602082015260400190565b608060405180830381865afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190612a4b565b92919061125f565b603854606090806001600160401b038111156105fb576105fb6126cf565b60405190808252806020026020018201604052801561064057816020015b60408051808201909152600080825260208201528152602001906001900390816106195790505b5091506000805b828110156106b4578060010191508184828151811061066857610668612ab8565b60200260200101516000018181525050603c60008381526020019081526020016000205484828151811061069e5761069e612ab8565b6020908102919091018101510152600101610647565b50505090565b60006106c5816112a0565b6106d08484846112ad565b50505050565b600082815260016020819052604090912001546106f2816112a0565b6106fc838361131f565b505050565b600061070c816112a0565b6106fc8383611341565b6001600160a01b038116331461078b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610795828261145a565b5050565b60607f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296107c5816112a0565b60006107d78b8b8b8b8b8b8b8b61147c565b905033816001600160401b038111156107f2576107f26126cf565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50935060005b828110156108c257610898828e8e8481811061083f5761083f612ab8565b905060200201358d8d8581811061085857610858612ab8565b905060200201358c8c8681811061087157610871612ab8565b905060200201358b8b8781811061088a5761088a612ab8565b9050602002013560006114ca565b8582815181106108aa576108aa612ab8565b91151560209283029190910190910152600101610821565b5050505098975050505050505050565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad6108fc816112a0565b600061090e8a8a8a8a8a8a8a8a61147c565b90503360005b828110156109945761098b828d8d8481811061093257610932612ab8565b905060200201358c8c8581811061094b5761094b612ab8565b905060200201358b8b8681811061096457610964612ab8565b905060200201358a8a8781811061097d5761097d612ab8565b9050602002013560016114ca565b50600101610914565b505050505050505050505050565b6000603e60006109e785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155992505050565b815260200190815260200160002054905080600003610a1957604051635421761560e11b815260040160405180910390fd5b1992915050565b600080610a3a610a3584805160209091012090565b611564565b9150610a4582610a4c565b9050915091565b603554603a5460395460405163052571af60e51b81526004810192909252602482015260009161054591849160129182916105d591601119916001600160a01b03169063a4ae35e090604401608060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad99190612a4b565b906115de565b6000828152600260205260408120610af79083611738565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260026020526040812061054590611744565b600054610100900460ff1615808015610b605750600054600160ff909116105b80610b7a5750303b158015610b7a575060005460ff166001145b610bdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610782565b6000805460ff191660011790558015610c00576000805461ff0019166101001790555b897f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960005b82811015610c6557610c5d828f8f84818110610c4357610c43612ab8565b9050602002016020810190610c589190612ace565b61174e565b600101610c25565b50603680546001600160a01b0319166001600160a01b038816179055610c8c60008f61174e565b610c968b8b611341565b610c9f89611758565b610ca88861178d565b610cb38786866112ad565b50508015610994576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b60008281526001602081905260409091200154610d24816112a0565b6106fc838361145a565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad610d58816112a0565b83801580610d665750808314155b15610d8457604051634ec4810560e11b815260040160405180910390fd5b600033815b83811015610e4157868682818110610da357610da3612ab8565b9050602002013519925082603e60008b8b85818110610dc457610dc4612ab8565b90506020020135815260200190815260200160002081905550888882818110610def57610def612ab8565b90506020020135826001600160a01b03167fb52d278cb3ef3b003bdfb385ce2eb23a83eb6d713724abfba1acaa16ccf6621485604051610e3191815260200190565b60405180910390a3600101610d89565b505050505050505050565b6000610e57816112a0565b6107958261178d565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610e9385611809565b855160208701209091506000906000818152603e60205260409020549091508015610eca57610ec3811987612b01565b85526111e9565b6000603c6000610edc866038546118f7565b81526020019081526020016000205490508087610ef99190612b01565b86526000610f387fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888a6000918252805160209182012090526040902090565b6036546040516329fc8caf60e11b8152600481018390529192506001600160a01b03169081906353f9195e90602401602060405180830381865afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190612b28565b156111e5576000816001600160a01b0316638c8433146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190612b43565b905060006110ac826001600160a01b03166303e9e609866040518263ffffffff1660e01b815260040161104691815260200190565b600060405180830381865afa158015611063573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261108b9190810190612bea565b60200151604001516001600160401b03168c6001600160401b03801661190d565b6040516378bd793560e01b8152600481018690529091506000906001600160a01b038516906378bd79359060240160e060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190612cf1565b5060408101516060015190915080158015906111a95750846001600160a01b0316630afe1bb36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190612d8e565b6001600160401b03166111a78285612dab565b115b156111c757604051631bb03f9d60e01b815260040160405180910390fd5b6111de6037546111d68b611564565b612710611943565b8b52505050505b5050505b83516111f490610a4c565b6020850152845161120490610a4c565b60208601525092959194509092505050565b6000611221816112a0565b61079582611758565b60006001600160e01b03198216637965db0b60e01b148061054557506301ffc9a760e01b6001600160e01b0319831614610545565b600061129584611285876000015160070b8860400151866112809190612dbe565b611a2d565b611290600187611a2d565b611943565b90505b949350505050565b6112aa8133611a87565b50565b603580546001600160a01b0319166001600160a01b0385169081179091556039839055603a8290558190336001600160a01b03167f671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b8560405161131291815260200190565b60405180910390a4505050565b6113298282611ae0565b60008281526002602052604090206106fc9082611b4b565b60408051808201909152600080825260208201523390603854839060005b8281101561140c5786868281811061137957611379612ab8565b90506040020180360381019061138f9190612de5565b935061139f828560000151611b60565b6020808601805187516000908152603c90935260409283902055865190519151929450916001600160a01b038816917f85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77916113fc91815260200190565b60405180910390a360010161135f565b50603854811461145257603881905560405181906001600160a01b038616907f7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b90600090a35b505050505050565b6114648282611b6f565b60008281526002602052604090206106fc9082611bd6565b8680158061148a5750858114155b806114955750838114155b806114a05750818114155b156114be57604051634ec4810560e11b815260040160405180910390fd5b98975050505050505050565b6000806114d68661054b565b6000888152603d6020526040902090915083806114f35750805482115b9250821561154d57818155426001820155604080518381526020810187905287918a916001600160a01b038d16917f60d5fd6d2284807447aae62f93c05517a647b8e8479c3af2c27ee1d1c85b540f910160405180910390a45b50509695505050505050565b805160209091012090565b6000818152603d602052604081206001810154808303611588575060009392505050565b60006115948242612dab565b835460408051808201909152603b546001600160c01b0381168252600160c01b90046001600160401b031660208201529192506115d5919061271084611beb565b95945050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260006116176001856040015161128090612e17565b90506001600160ff1b0381111561164d576040808501519051633e87ca5d60e11b815260039190910b6004820152602401610782565b600061165d600161128086612e17565b90506001600160ff1b0381111561168d57604051633e87ca5d60e11b8152600385900b6004820152602401610782565b845160009060070b61169f8385612e3a565b6116a99190612e80565b9050677fffffffffffffff8113156116f557604086810151875191516329b2fb5560e11b8152600391820b60048201529087900b602482015260079190910b6044820152606401610782565b60405180608001604052808260070b815260200187602001516001600160401b031681526020018660030b81526020018760600151815250935050505092915050565b6000610af78383611cc1565b6000610545825490565b610795828261131f565b6037819055604051819033907f1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf07390600090a350565b80603b61179a8282612ec3565b503390507fa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc646117cc6020840184612f05565b6117dc6040850160208601612f22565b604080516001600160c01b0390931683526001600160401b0390911660208301520160405180910390a250565b600080600080845190505b808310156118ef57600085848151811061183057611830612ab8565b01602001516001600160f81b0319169050600160ff1b811015611858576001840193506118e3565b600760fd1b6001600160f81b031982161015611879576002840193506118e3565b600f60fc1b6001600160f81b03198216101561189a576003840193506118e3565b601f60fb1b6001600160f81b0319821610156118bb576004840193506118e3565b603f60fa1b6001600160f81b0319821610156118dc576005840193506118e3565b6006840193505b50600190910190611814565b509392505050565b60008183106119065781610af7565b5090919050565b60008184118061191c57508183115b15611928575080610af7565b6119328484611ceb565b905081811115610af7575092915050565b600080806000198587098587029250828110838203039150508060000361197d5783828161197357611973612e6a565b0492505050610af7565b8084116119c45760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610782565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000808260030b1215611a5f57611a4382612e17565b611a4e90600a613023565b611a589084613035565b9050610545565b60008260030b1315611a8057611a7682600a613023565b611a589084612b01565b5081610545565b611a918282610afe565b61079557611a9e81611cff565b611aa9836020611d11565b604051602001611aba929190613049565b60408051601f198184030181529082905262461bcd60e51b8252610782916004016130be565b611aea8282610afe565b6107955760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610af7836001600160a01b038416611eac565b60008183116119065781610af7565b611b798282610afe565b156107955760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610af7836001600160a01b038416611efb565b60008085602001516001600160401b031683611c079190613035565b9050801580611c1e575085516001600160c01b0316155b15611c2c5784915050611298565b85516001600160c01b03166001600160401b03851603611c50576000915050611298565b61ffff811115611c7657604051637359f25f60e01b815260048101829052602401610782565b6000611ca68760000151866001600160401b0316036001600160c01b0316612710876001600160401b0316611943565b9050611cb6868261271085611fee565b979650505050505050565b6000826000018281548110611cd857611cd8612ab8565b9060005260206000200154905092915050565b818101828110156105455750600019610545565b60606105456001600160a01b03831660145b60606000611d20836002612b01565b611d2b9060026130f1565b6001600160401b03811115611d4257611d426126cf565b6040519080825280601f01601f191660200182016040528015611d6c576020820181803683370190505b509050600360fc1b81600081518110611d8757611d87612ab8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611db657611db6612ab8565b60200101906001600160f81b031916908160001a9053506000611dda846002612b01565b611de59060016130f1565b90505b6001811115611e5d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e1957611e19612ab8565b1a60f81b828281518110611e2f57611e2f612ab8565b60200101906001600160f81b031916908160001a90535060049490941c93611e5681613104565b9050611de8565b508315610af75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610782565b6000818152600183016020526040812054611ef357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610545565b506000610545565b60008181526001830160205260408120548015611fe4576000611f1f600183612dab565b8554909150600090611f3390600190612dab565b9050818114611f98576000866000018281548110611f5357611f53612ab8565b9060005260206000200154905080876000018481548110611f7657611f76612ab8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fa957611fa961311b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610545565b6000915050610545565b600082841480612000575061ffff8216155b1561200c575083611298565b5083600080808061202d61ffff87166120248a612151565b61ffff166118f7565b90505b61ffff8116156120835761204a8561ffff83168a0a612322565b9094509250831561206357829450808603955080820191505b61207c600261ffff83160461ffff168761ffff166118f7565b9050612030565b505b61ffff8516156120f6576120998488612322565b909350915082156120b857600019909401939092508290600101612085565b61ffff8116156120dd578584816120d1576120d1612e6a565b04935060001901612085565b6120e8848888611943565b600019909501949350612085565b600061210187612151565b90505b61ffff8216156121455760006121228261ffff168461ffff166118f7565b90508061ffff16880a868161213957612139612e6a565b04955090910390612104565b50505050949350505050565b60006003821015612164575060ff919050565b600482101561217557506080919050565b601082101561218657506040919050565b61010082101561219857506020919050565b611bdc8210156121aa57506014919050565b612c708210156121bc57506013919050565b614aa98210156121ce57506012919050565b6185548210156121e057506011919050565b620100008210156121f357506010919050565b620218378210156122065750600f919050565b6204e0468210156122195750600e919050565b620ced4c82101561222c5750600d919050565b6228514682101561223f5750600c919050565b629aa2ad8210156122525750600b919050565b6303080c018210156122665750600a919050565b6315c5cbbd82101561227a57506009919050565b64010000000082101561228f57506008919050565b6417c6a1f29f8210156122a457506007919050565b6506597fa94f5c8210156122ba57506006919050565b66093088c35d733b8210156122d157506005919050565b680100000000000000008210156122ea57506004919050565b6a285145f31ae515c447bb5782101561230557506003919050565b600160801b82101561231957506002919050565b5060015b919050565b600080836000036123395750600190506000612366565b8383028385828161234c5761234c612e6a565b041461235f576000809250925050612366565b6001925090505b9250929050565b60006020828403121561237f57600080fd5b81356001600160e01b031981168114610af757600080fd5b6000602082840312156123a957600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b828110156123fa576123ea84835180518252602090810151910152565b92840192908501906001016123cd565b5091979650505050505050565b6001600160a01b03811681146112aa57600080fd5b803561231d81612407565b60008060006060848603121561243c57600080fd5b833561244781612407565b95602085013595506040909401359392505050565b6000806040838503121561246f57600080fd5b82359150602083013561248181612407565b809150509250929050565b60008083601f84011261249e57600080fd5b5081356001600160401b038111156124b557600080fd5b6020830191508360208260061b850101111561236657600080fd5b600080602083850312156124e357600080fd5b82356001600160401b038111156124f957600080fd5b6125058582860161248c565b90969095509350505050565b60008083601f84011261252357600080fd5b5081356001600160401b0381111561253a57600080fd5b6020830191508360208260051b850101111561236657600080fd5b6000806000806000806000806080898b03121561257157600080fd5b88356001600160401b038082111561258857600080fd5b6125948c838d01612511565b909a50985060208b01359150808211156125ad57600080fd5b6125b98c838d01612511565b909850965060408b01359150808211156125d257600080fd5b6125de8c838d01612511565b909650945060608b01359150808211156125f757600080fd5b506126048b828c01612511565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b81811015612652578351151583529284019291840191600101612634565b50909695505050505050565b6000806020838503121561267157600080fd5b82356001600160401b038082111561268857600080fd5b818501915085601f83011261269c57600080fd5b8135818111156126ab57600080fd5b8660208285010111156126bd57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715612707576127076126cf565b60405290565b604080519081016001600160401b0381118282101715612707576127076126cf565b604051606081016001600160401b0381118282101715612707576127076126cf565b604051601f8201601f191681016001600160401b0381118282101715612779576127796126cf565b604052919050565b60006001600160401b0382111561279a5761279a6126cf565b50601f01601f191660200190565b600082601f8301126127b957600080fd5b81356127cc6127c782612781565b612751565b8181528460208386010111156127e157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561281057600080fd5b81356001600160401b0381111561282657600080fd5b611298848285016127a8565b6000806040838503121561284557600080fd5b50508035926020909101359150565b60006040828403121561286657600080fd5b50919050565b60008060008060008060008060008060006101408c8e03121561288e57600080fd5b6128988c35612407565b8b359a506001600160401b038060208e013511156128b557600080fd5b6128c58e60208f01358f01612511565b909b50995060408d01358110156128db57600080fd5b506128ec8d60408e01358e0161248c565b909850965060608c013595506129058d60808e01612854565b945060c08c013561291581612407565b935061292360e08d0161241c565b92506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806040858703121561295b57600080fd5b84356001600160401b038082111561297257600080fd5b61297e88838901612511565b9096509450602087013591508082111561299757600080fd5b506129a487828801612511565b95989497509550505050565b6000604082840312156129c257600080fd5b610af78383612854565b600080604083850312156129df57600080fd5b82356001600160401b038111156129f557600080fd5b612a01858286016127a8565b95602094909401359450505050565b825181526020808401518183015282516040830152820151606082015260808101610af7565b6001600160401b03811681146112aa57600080fd5b600060808284031215612a5d57600080fd5b612a656126e5565b82518060070b8114612a7657600080fd5b81526020830151612a8681612a36565b60208201526040830151600381900b8114612aa057600080fd5b60408201526060928301519281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ae057600080fd5b8135610af781612407565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761054557610545612aeb565b8051801515811461231d57600080fd5b600060208284031215612b3a57600080fd5b610af782612b18565b600060208284031215612b5557600080fd5b8151610af781612407565b60005b83811015612b7b578181015183820152602001612b63565b50506000910152565b600060808284031215612b9657600080fd5b612b9e6126e5565b90508151612bab81612407565b81526020820151612bbb81612407565b60208201526040820151612bce81612a36565b6040820152612bdf60608301612b18565b606082015292915050565b60006020808385031215612bfd57600080fd5b82516001600160401b0380821115612c1457600080fd5b9084019060a08287031215612c2857600080fd5b612c3061270d565b825182811115612c3f57600080fd5b830160608189031215612c5157600080fd5b612c5961272f565b815160ff81168114612c6a57600080fd5b81528186015186820152604082015184811115612c8657600080fd5b82019350601f84018913612c9957600080fd5b83519150612ca96127c783612781565b8281528987848701011115612cbd57600080fd5b612ccc83888301898801612b60565b6040820152825250612ce087848601612b84565b848201528094505050505092915050565b60008082840360e0811215612d0557600080fd5b60c0811215612d1357600080fd5b612d1b61272f565b84518152602085015160208201526080603f1983011215612d3b57600080fd5b612d436126e5565b91506040850151612d5381612407565b80835250606085015160208301526080850151604083015260a08501516060830152816040820152809350505060c083015190509250929050565b600060208284031215612da057600080fd5b8151610af781612a36565b8181038181111561054557610545612aeb565b600381810b9083900b01637fffffff8113637fffffff198212171561054557610545612aeb565b600060408284031215612df757600080fd5b612dff61270d565b82358152602083013560208201528091505092915050565b60008160030b637fffffff198103612e3157612e31612aeb565b60000392915050565b80820260008212600160ff1b84141615612e5657612e56612aeb565b818105831482151761054557610545612aeb565b634e487b7160e01b600052601260045260246000fd5b600082612e8f57612e8f612e6a565b600160ff1b821460001984141615612ea957612ea9612aeb565b500590565b6001600160c01b03811681146112aa57600080fd5b8135612ece81612eae565b81546001600160c01b03199081166001600160c01b039290921691821783556020840135612efb81612a36565b60c01b1617905550565b600060208284031215612f1757600080fd5b8135610af781612eae565b600060208284031215612f3457600080fd5b8135610af781612a36565b600181815b80851115612f7a578160001904821115612f6057612f60612aeb565b80851615612f6d57918102915b93841c9390800290612f44565b509250929050565b600082612f9157506001610545565b81612f9e57506000610545565b8160018114612fb45760028114612fbe57612fda565b6001915050610545565b60ff841115612fcf57612fcf612aeb565b50506001821b610545565b5060208310610133831016604e8410600b8410161715612ffd575081810a610545565b6130078383612f3f565b806000190482111561301b5761301b612aeb565b029392505050565b6000610af763ffffffff841683612f82565b60008261304457613044612e6a565b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613081816017850160208801612b60565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516130b2816028840160208801612b60565b01602801949350505050565b60208152600082518060208401526130dd816040850160208701612b60565b601f01601f19169190910160400192915050565b8082018082111561054557610545612aeb565b60008161311357613113612aeb565b506000190190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d0496611adae861791435296e0aae2099af9499031b6826466a4fe91423b08e564736f6c63430008150033", + "nonce": "0x2c94a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2b688d5651cf2786ad62eff7153e55a2b055734160900055ceba698ce43bfbf1", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec400000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab500000000000000000000000079abf4410d7c76d2b38f75eae7bd6fc6099797ac", + "nonce": "0x2c94b" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0ae785f2c1b42a12b45749521df65bfaf4519d6dccbd3a98032262d49ff5fd83", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "function": "grantRole(bytes32,address)", + "arguments": [ + "0x033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad", + "0x968D0Cd7343f711216817E617d3f92a23dC91c07" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x51caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "gas": "0x28a39", + "value": "0x0", + "data": "0x2f2ff15d033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "nonce": "0x2c94c" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x4b783661fcdbb729be9d9e746fa603b8a2d46fc3eee3c8a0881d7eaaddccabf6", + "transactionIndex": "0x0", + "blockHash": "0xad4e080e697ac41acd2549ce736f02799801b70e59b185e8bdc2bb0d6d7ee841", + "blockNumber": "0x147c0ee", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x2ae23e", + "gasUsed": "0x2ae23e", + "contractAddress": "0x79Abf4410D7c76d2b38F75eaE7bD6Fc6099797Ac", + "logs": [ + { + "address": "0x79Abf4410D7c76d2b38F75eaE7bD6Fc6099797Ac", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xad4e080e697ac41acd2549ce736f02799801b70e59b185e8bdc2bb0d6d7ee841", + "blockNumber": "0x147c0ee", + "transactionHash": "0x4b783661fcdbb729be9d9e746fa603b8a2d46fc3eee3c8a0881d7eaaddccabf6", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000800000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x2b688d5651cf2786ad62eff7153e55a2b055734160900055ceba698ce43bfbf1", + "transactionIndex": "0x1", + "blockHash": "0xad4e080e697ac41acd2549ce736f02799801b70e59b185e8bdc2bb0d6d7ee841", + "blockNumber": "0x147c0ee", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x2b6748", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000079abf4410d7c76d2b38f75eae7bd6fc6099797ac" + ], + "data": "0x", + "blockHash": "0xad4e080e697ac41acd2549ce736f02799801b70e59b185e8bdc2bb0d6d7ee841", + "blockNumber": "0x147c0ee", + "transactionHash": "0x2b688d5651cf2786ad62eff7153e55a2b055734160900055ceba698ce43bfbf1", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000020400000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x0ae785f2c1b42a12b45749521df65bfaf4519d6dccbd3a98032262d49ff5fd83", + "transactionIndex": "0x0", + "blockHash": "0x5e6ed8d0562b16dbba65404635f58d05665cf4b8c0947970d80f1f58ff930c44", + "blockNumber": "0x147c0ef", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "cumulativeGasUsed": "0x1bc99", + "gasUsed": "0x1bc99", + "contractAddress": null, + "logs": [ + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0x5e6ed8d0562b16dbba65404635f58d05665cf4b8c0947970d80f1f58ff930c44", + "blockNumber": "0x147c0ef", + "transactionHash": "0x0ae785f2c1b42a12b45749521df65bfaf4519d6dccbd3a98032262d49ff5fd83", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000000000000000000000020000000000000000200000000010000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000003000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698139063, + "chain": 2021, + "multi": false, + "commit": "f35ddbd" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeDomainPrice.s.sol/2021/run-latest.json b/broadcast/20231024_UpgradeDomainPrice.s.sol/2021/run-latest.json new file mode 100644 index 00000000..72dd2da8 --- /dev/null +++ b/broadcast/20231024_UpgradeDomainPrice.s.sol/2021/run-latest.json @@ -0,0 +1,166 @@ +{ + "transactions": [ + { + "hash": "0x4b783661fcdbb729be9d9e746fa603b8a2d46fc3eee3c8a0881d7eaaddccabf6", + "transactionType": "CREATE", + "contractName": "RNSDomainPrice", + "contractAddress": "0x79Abf4410D7c76d2b38F75eaE7bD6Fc6099797Ac", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x37bfb7", + "value": "0x0", + "data": "0x60806040526200000e62000014565b620000d5565b600054610100900460ff1615620000815760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000d3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61316780620000e56000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80635ef32e2c11610104578063ca15c873116100a2578063e229a67011610071578063e229a670146104b2578063f4651f49146104c5578063f5b541a6146104e6578063fe303ebf1461050d57600080fd5b8063ca15c87314610466578063d40ed58c14610479578063d547741f1461048c578063dd28776d1461049f57600080fd5b80637174026e116100de5780637174026e1461040d5780639010d07c1461042057806391d148541461044b578063a217fddf1461045e57600080fd5b80635ef32e2c146103b6578063700213c8146103be578063713a69a7146103e557600080fd5b80632f6ee6951161017c5780634c255c971161014b5780634c255c971461034f57806353faf90914610370578063599eaabf146103905780635c68c830146103a357600080fd5b80632f6ee695146102b757806335feb741146102d157806336568abe146102e457806339e47da7146102f757600080fd5b8063248a9ca3116101b8578063248a9ca31461023d57806328dd3065146102615780632be09ecc146102765780632f2ff15d146102a457600080fd5b806301ffc9a7146101df578063037f1769146102075780630a44f51f14610228575b600080fd5b6101f26101ed36600461236d565b610520565b60405190151581526020015b60405180910390f35b61021a610215366004612397565b61054b565b6040519081526020016101fe565b6102306105dd565b6040516101fe91906123b0565b61021a61024b366004612397565b6000908152600160208190526040909120015490565b61027461026f366004612427565b6106ba565b005b603554603954603a54604080516001600160a01b0390941684526020840192909252908201526060016101fe565b6102746102b236600461245c565b6106d6565b6102bf601281565b60405160ff90911681526020016101fe565b6102746102df3660046124d0565b610701565b6102746102f236600461245c565b610716565b604080518082018252600080825260209182015281518083018352603b546001600160c01b0381168083526001600160401b03600160c01b9092048216928401928352845190815291511691810191909152016101fe565b61035861271081565b6040516001600160401b0390911681526020016101fe565b61038361037e366004612555565b610799565b6040516101fe9190612618565b61027461039e366004612555565b6108d2565b61021a6103b136600461265e565b6109a2565b60375461021a565b61021a7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad81565b6103f86103f33660046127fe565b610a20565b604080519283526020830191909152016101fe565b61021a61041b366004612397565b610a4c565b61043361042e366004612832565b610adf565b6040516001600160a01b0390911681526020016101fe565b6101f261045936600461245c565b610afe565b61021a600081565b61021a610474366004612397565b610b29565b61027461048736600461286c565b610b40565b61027461049a36600461245c565b610d08565b6102746104ad366004612945565b610d2e565b6102746104c03660046129b0565b610e4c565b6104d86104d33660046129cc565b610e60565b6040516101fe929190612a10565b61021a7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b61027461051b366004612397565b611216565b60006001600160e01b03198216635a05180f60e01b148061054557506105458261122a565b92915050565b603554603a5460395460405163052571af60e51b815260009361054593869360129384936001600160a01b03169263a4ae35e09261059492600401918252602082015260400190565b608060405180830381865afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190612a4b565b92919061125f565b603854606090806001600160401b038111156105fb576105fb6126cf565b60405190808252806020026020018201604052801561064057816020015b60408051808201909152600080825260208201528152602001906001900390816106195790505b5091506000805b828110156106b4578060010191508184828151811061066857610668612ab8565b60200260200101516000018181525050603c60008381526020019081526020016000205484828151811061069e5761069e612ab8565b6020908102919091018101510152600101610647565b50505090565b60006106c5816112a0565b6106d08484846112ad565b50505050565b600082815260016020819052604090912001546106f2816112a0565b6106fc838361131f565b505050565b600061070c816112a0565b6106fc8383611341565b6001600160a01b038116331461078b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610795828261145a565b5050565b60607f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296107c5816112a0565b60006107d78b8b8b8b8b8b8b8b61147c565b905033816001600160401b038111156107f2576107f26126cf565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50935060005b828110156108c257610898828e8e8481811061083f5761083f612ab8565b905060200201358d8d8581811061085857610858612ab8565b905060200201358c8c8681811061087157610871612ab8565b905060200201358b8b8781811061088a5761088a612ab8565b9050602002013560006114ca565b8582815181106108aa576108aa612ab8565b91151560209283029190910190910152600101610821565b5050505098975050505050505050565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad6108fc816112a0565b600061090e8a8a8a8a8a8a8a8a61147c565b90503360005b828110156109945761098b828d8d8481811061093257610932612ab8565b905060200201358c8c8581811061094b5761094b612ab8565b905060200201358b8b8681811061096457610964612ab8565b905060200201358a8a8781811061097d5761097d612ab8565b9050602002013560016114ca565b50600101610914565b505050505050505050505050565b6000603e60006109e785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155992505050565b815260200190815260200160002054905080600003610a1957604051635421761560e11b815260040160405180910390fd5b1992915050565b600080610a3a610a3584805160209091012090565b611564565b9150610a4582610a4c565b9050915091565b603554603a5460395460405163052571af60e51b81526004810192909252602482015260009161054591849160129182916105d591601119916001600160a01b03169063a4ae35e090604401608060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad99190612a4b565b906115de565b6000828152600260205260408120610af79083611738565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260026020526040812061054590611744565b600054610100900460ff1615808015610b605750600054600160ff909116105b80610b7a5750303b158015610b7a575060005460ff166001145b610bdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610782565b6000805460ff191660011790558015610c00576000805461ff0019166101001790555b897f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960005b82811015610c6557610c5d828f8f84818110610c4357610c43612ab8565b9050602002016020810190610c589190612ace565b61174e565b600101610c25565b50603680546001600160a01b0319166001600160a01b038816179055610c8c60008f61174e565b610c968b8b611341565b610c9f89611758565b610ca88861178d565b610cb38786866112ad565b50508015610994576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b60008281526001602081905260409091200154610d24816112a0565b6106fc838361145a565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad610d58816112a0565b83801580610d665750808314155b15610d8457604051634ec4810560e11b815260040160405180910390fd5b600033815b83811015610e4157868682818110610da357610da3612ab8565b9050602002013519925082603e60008b8b85818110610dc457610dc4612ab8565b90506020020135815260200190815260200160002081905550888882818110610def57610def612ab8565b90506020020135826001600160a01b03167fb52d278cb3ef3b003bdfb385ce2eb23a83eb6d713724abfba1acaa16ccf6621485604051610e3191815260200190565b60405180910390a3600101610d89565b505050505050505050565b6000610e57816112a0565b6107958261178d565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610e9385611809565b855160208701209091506000906000818152603e60205260409020549091508015610eca57610ec3811987612b01565b85526111e9565b6000603c6000610edc866038546118f7565b81526020019081526020016000205490508087610ef99190612b01565b86526000610f387fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888a6000918252805160209182012090526040902090565b6036546040516329fc8caf60e11b8152600481018390529192506001600160a01b03169081906353f9195e90602401602060405180830381865afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190612b28565b156111e5576000816001600160a01b0316638c8433146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190612b43565b905060006110ac826001600160a01b03166303e9e609866040518263ffffffff1660e01b815260040161104691815260200190565b600060405180830381865afa158015611063573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261108b9190810190612bea565b60200151604001516001600160401b03168c6001600160401b03801661190d565b6040516378bd793560e01b8152600481018690529091506000906001600160a01b038516906378bd79359060240160e060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190612cf1565b5060408101516060015190915080158015906111a95750846001600160a01b0316630afe1bb36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190612d8e565b6001600160401b03166111a78285612dab565b115b156111c757604051631bb03f9d60e01b815260040160405180910390fd5b6111de6037546111d68b611564565b612710611943565b8b52505050505b5050505b83516111f490610a4c565b6020850152845161120490610a4c565b60208601525092959194509092505050565b6000611221816112a0565b61079582611758565b60006001600160e01b03198216637965db0b60e01b148061054557506301ffc9a760e01b6001600160e01b0319831614610545565b600061129584611285876000015160070b8860400151866112809190612dbe565b611a2d565b611290600187611a2d565b611943565b90505b949350505050565b6112aa8133611a87565b50565b603580546001600160a01b0319166001600160a01b0385169081179091556039839055603a8290558190336001600160a01b03167f671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b8560405161131291815260200190565b60405180910390a4505050565b6113298282611ae0565b60008281526002602052604090206106fc9082611b4b565b60408051808201909152600080825260208201523390603854839060005b8281101561140c5786868281811061137957611379612ab8565b90506040020180360381019061138f9190612de5565b935061139f828560000151611b60565b6020808601805187516000908152603c90935260409283902055865190519151929450916001600160a01b038816917f85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77916113fc91815260200190565b60405180910390a360010161135f565b50603854811461145257603881905560405181906001600160a01b038616907f7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b90600090a35b505050505050565b6114648282611b6f565b60008281526002602052604090206106fc9082611bd6565b8680158061148a5750858114155b806114955750838114155b806114a05750818114155b156114be57604051634ec4810560e11b815260040160405180910390fd5b98975050505050505050565b6000806114d68661054b565b6000888152603d6020526040902090915083806114f35750805482115b9250821561154d57818155426001820155604080518381526020810187905287918a916001600160a01b038d16917f60d5fd6d2284807447aae62f93c05517a647b8e8479c3af2c27ee1d1c85b540f910160405180910390a45b50509695505050505050565b805160209091012090565b6000818152603d602052604081206001810154808303611588575060009392505050565b60006115948242612dab565b835460408051808201909152603b546001600160c01b0381168252600160c01b90046001600160401b031660208201529192506115d5919061271084611beb565b95945050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260006116176001856040015161128090612e17565b90506001600160ff1b0381111561164d576040808501519051633e87ca5d60e11b815260039190910b6004820152602401610782565b600061165d600161128086612e17565b90506001600160ff1b0381111561168d57604051633e87ca5d60e11b8152600385900b6004820152602401610782565b845160009060070b61169f8385612e3a565b6116a99190612e80565b9050677fffffffffffffff8113156116f557604086810151875191516329b2fb5560e11b8152600391820b60048201529087900b602482015260079190910b6044820152606401610782565b60405180608001604052808260070b815260200187602001516001600160401b031681526020018660030b81526020018760600151815250935050505092915050565b6000610af78383611cc1565b6000610545825490565b610795828261131f565b6037819055604051819033907f1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf07390600090a350565b80603b61179a8282612ec3565b503390507fa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc646117cc6020840184612f05565b6117dc6040850160208601612f22565b604080516001600160c01b0390931683526001600160401b0390911660208301520160405180910390a250565b600080600080845190505b808310156118ef57600085848151811061183057611830612ab8565b01602001516001600160f81b0319169050600160ff1b811015611858576001840193506118e3565b600760fd1b6001600160f81b031982161015611879576002840193506118e3565b600f60fc1b6001600160f81b03198216101561189a576003840193506118e3565b601f60fb1b6001600160f81b0319821610156118bb576004840193506118e3565b603f60fa1b6001600160f81b0319821610156118dc576005840193506118e3565b6006840193505b50600190910190611814565b509392505050565b60008183106119065781610af7565b5090919050565b60008184118061191c57508183115b15611928575080610af7565b6119328484611ceb565b905081811115610af7575092915050565b600080806000198587098587029250828110838203039150508060000361197d5783828161197357611973612e6a565b0492505050610af7565b8084116119c45760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610782565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000808260030b1215611a5f57611a4382612e17565b611a4e90600a613023565b611a589084613035565b9050610545565b60008260030b1315611a8057611a7682600a613023565b611a589084612b01565b5081610545565b611a918282610afe565b61079557611a9e81611cff565b611aa9836020611d11565b604051602001611aba929190613049565b60408051601f198184030181529082905262461bcd60e51b8252610782916004016130be565b611aea8282610afe565b6107955760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610af7836001600160a01b038416611eac565b60008183116119065781610af7565b611b798282610afe565b156107955760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610af7836001600160a01b038416611efb565b60008085602001516001600160401b031683611c079190613035565b9050801580611c1e575085516001600160c01b0316155b15611c2c5784915050611298565b85516001600160c01b03166001600160401b03851603611c50576000915050611298565b61ffff811115611c7657604051637359f25f60e01b815260048101829052602401610782565b6000611ca68760000151866001600160401b0316036001600160c01b0316612710876001600160401b0316611943565b9050611cb6868261271085611fee565b979650505050505050565b6000826000018281548110611cd857611cd8612ab8565b9060005260206000200154905092915050565b818101828110156105455750600019610545565b60606105456001600160a01b03831660145b60606000611d20836002612b01565b611d2b9060026130f1565b6001600160401b03811115611d4257611d426126cf565b6040519080825280601f01601f191660200182016040528015611d6c576020820181803683370190505b509050600360fc1b81600081518110611d8757611d87612ab8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611db657611db6612ab8565b60200101906001600160f81b031916908160001a9053506000611dda846002612b01565b611de59060016130f1565b90505b6001811115611e5d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e1957611e19612ab8565b1a60f81b828281518110611e2f57611e2f612ab8565b60200101906001600160f81b031916908160001a90535060049490941c93611e5681613104565b9050611de8565b508315610af75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610782565b6000818152600183016020526040812054611ef357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610545565b506000610545565b60008181526001830160205260408120548015611fe4576000611f1f600183612dab565b8554909150600090611f3390600190612dab565b9050818114611f98576000866000018281548110611f5357611f53612ab8565b9060005260206000200154905080876000018481548110611f7657611f76612ab8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fa957611fa961311b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610545565b6000915050610545565b600082841480612000575061ffff8216155b1561200c575083611298565b5083600080808061202d61ffff87166120248a612151565b61ffff166118f7565b90505b61ffff8116156120835761204a8561ffff83168a0a612322565b9094509250831561206357829450808603955080820191505b61207c600261ffff83160461ffff168761ffff166118f7565b9050612030565b505b61ffff8516156120f6576120998488612322565b909350915082156120b857600019909401939092508290600101612085565b61ffff8116156120dd578584816120d1576120d1612e6a565b04935060001901612085565b6120e8848888611943565b600019909501949350612085565b600061210187612151565b90505b61ffff8216156121455760006121228261ffff168461ffff166118f7565b90508061ffff16880a868161213957612139612e6a565b04955090910390612104565b50505050949350505050565b60006003821015612164575060ff919050565b600482101561217557506080919050565b601082101561218657506040919050565b61010082101561219857506020919050565b611bdc8210156121aa57506014919050565b612c708210156121bc57506013919050565b614aa98210156121ce57506012919050565b6185548210156121e057506011919050565b620100008210156121f357506010919050565b620218378210156122065750600f919050565b6204e0468210156122195750600e919050565b620ced4c82101561222c5750600d919050565b6228514682101561223f5750600c919050565b629aa2ad8210156122525750600b919050565b6303080c018210156122665750600a919050565b6315c5cbbd82101561227a57506009919050565b64010000000082101561228f57506008919050565b6417c6a1f29f8210156122a457506007919050565b6506597fa94f5c8210156122ba57506006919050565b66093088c35d733b8210156122d157506005919050565b680100000000000000008210156122ea57506004919050565b6a285145f31ae515c447bb5782101561230557506003919050565b600160801b82101561231957506002919050565b5060015b919050565b600080836000036123395750600190506000612366565b8383028385828161234c5761234c612e6a565b041461235f576000809250925050612366565b6001925090505b9250929050565b60006020828403121561237f57600080fd5b81356001600160e01b031981168114610af757600080fd5b6000602082840312156123a957600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b828110156123fa576123ea84835180518252602090810151910152565b92840192908501906001016123cd565b5091979650505050505050565b6001600160a01b03811681146112aa57600080fd5b803561231d81612407565b60008060006060848603121561243c57600080fd5b833561244781612407565b95602085013595506040909401359392505050565b6000806040838503121561246f57600080fd5b82359150602083013561248181612407565b809150509250929050565b60008083601f84011261249e57600080fd5b5081356001600160401b038111156124b557600080fd5b6020830191508360208260061b850101111561236657600080fd5b600080602083850312156124e357600080fd5b82356001600160401b038111156124f957600080fd5b6125058582860161248c565b90969095509350505050565b60008083601f84011261252357600080fd5b5081356001600160401b0381111561253a57600080fd5b6020830191508360208260051b850101111561236657600080fd5b6000806000806000806000806080898b03121561257157600080fd5b88356001600160401b038082111561258857600080fd5b6125948c838d01612511565b909a50985060208b01359150808211156125ad57600080fd5b6125b98c838d01612511565b909850965060408b01359150808211156125d257600080fd5b6125de8c838d01612511565b909650945060608b01359150808211156125f757600080fd5b506126048b828c01612511565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b81811015612652578351151583529284019291840191600101612634565b50909695505050505050565b6000806020838503121561267157600080fd5b82356001600160401b038082111561268857600080fd5b818501915085601f83011261269c57600080fd5b8135818111156126ab57600080fd5b8660208285010111156126bd57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715612707576127076126cf565b60405290565b604080519081016001600160401b0381118282101715612707576127076126cf565b604051606081016001600160401b0381118282101715612707576127076126cf565b604051601f8201601f191681016001600160401b0381118282101715612779576127796126cf565b604052919050565b60006001600160401b0382111561279a5761279a6126cf565b50601f01601f191660200190565b600082601f8301126127b957600080fd5b81356127cc6127c782612781565b612751565b8181528460208386010111156127e157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561281057600080fd5b81356001600160401b0381111561282657600080fd5b611298848285016127a8565b6000806040838503121561284557600080fd5b50508035926020909101359150565b60006040828403121561286657600080fd5b50919050565b60008060008060008060008060008060006101408c8e03121561288e57600080fd5b6128988c35612407565b8b359a506001600160401b038060208e013511156128b557600080fd5b6128c58e60208f01358f01612511565b909b50995060408d01358110156128db57600080fd5b506128ec8d60408e01358e0161248c565b909850965060608c013595506129058d60808e01612854565b945060c08c013561291581612407565b935061292360e08d0161241c565b92506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806040858703121561295b57600080fd5b84356001600160401b038082111561297257600080fd5b61297e88838901612511565b9096509450602087013591508082111561299757600080fd5b506129a487828801612511565b95989497509550505050565b6000604082840312156129c257600080fd5b610af78383612854565b600080604083850312156129df57600080fd5b82356001600160401b038111156129f557600080fd5b612a01858286016127a8565b95602094909401359450505050565b825181526020808401518183015282516040830152820151606082015260808101610af7565b6001600160401b03811681146112aa57600080fd5b600060808284031215612a5d57600080fd5b612a656126e5565b82518060070b8114612a7657600080fd5b81526020830151612a8681612a36565b60208201526040830151600381900b8114612aa057600080fd5b60408201526060928301519281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ae057600080fd5b8135610af781612407565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761054557610545612aeb565b8051801515811461231d57600080fd5b600060208284031215612b3a57600080fd5b610af782612b18565b600060208284031215612b5557600080fd5b8151610af781612407565b60005b83811015612b7b578181015183820152602001612b63565b50506000910152565b600060808284031215612b9657600080fd5b612b9e6126e5565b90508151612bab81612407565b81526020820151612bbb81612407565b60208201526040820151612bce81612a36565b6040820152612bdf60608301612b18565b606082015292915050565b60006020808385031215612bfd57600080fd5b82516001600160401b0380821115612c1457600080fd5b9084019060a08287031215612c2857600080fd5b612c3061270d565b825182811115612c3f57600080fd5b830160608189031215612c5157600080fd5b612c5961272f565b815160ff81168114612c6a57600080fd5b81528186015186820152604082015184811115612c8657600080fd5b82019350601f84018913612c9957600080fd5b83519150612ca96127c783612781565b8281528987848701011115612cbd57600080fd5b612ccc83888301898801612b60565b6040820152825250612ce087848601612b84565b848201528094505050505092915050565b60008082840360e0811215612d0557600080fd5b60c0811215612d1357600080fd5b612d1b61272f565b84518152602085015160208201526080603f1983011215612d3b57600080fd5b612d436126e5565b91506040850151612d5381612407565b80835250606085015160208301526080850151604083015260a08501516060830152816040820152809350505060c083015190509250929050565b600060208284031215612da057600080fd5b8151610af781612a36565b8181038181111561054557610545612aeb565b600381810b9083900b01637fffffff8113637fffffff198212171561054557610545612aeb565b600060408284031215612df757600080fd5b612dff61270d565b82358152602083013560208201528091505092915050565b60008160030b637fffffff198103612e3157612e31612aeb565b60000392915050565b80820260008212600160ff1b84141615612e5657612e56612aeb565b818105831482151761054557610545612aeb565b634e487b7160e01b600052601260045260246000fd5b600082612e8f57612e8f612e6a565b600160ff1b821460001984141615612ea957612ea9612aeb565b500590565b6001600160c01b03811681146112aa57600080fd5b8135612ece81612eae565b81546001600160c01b03199081166001600160c01b039290921691821783556020840135612efb81612a36565b60c01b1617905550565b600060208284031215612f1757600080fd5b8135610af781612eae565b600060208284031215612f3457600080fd5b8135610af781612a36565b600181815b80851115612f7a578160001904821115612f6057612f60612aeb565b80851615612f6d57918102915b93841c9390800290612f44565b509250929050565b600082612f9157506001610545565b81612f9e57506000610545565b8160018114612fb45760028114612fbe57612fda565b6001915050610545565b60ff841115612fcf57612fcf612aeb565b50506001821b610545565b5060208310610133831016604e8410600b8410161715612ffd575081810a610545565b6130078383612f3f565b806000190482111561301b5761301b612aeb565b029392505050565b6000610af763ffffffff841683612f82565b60008261304457613044612e6a565b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613081816017850160208801612b60565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516130b2816028840160208801612b60565b01602801949350505050565b60208152600082518060208401526130dd816040850160208701612b60565b601f01601f19169190910160400192915050565b8082018082111561054557610545612aeb565b60008161311357613113612aeb565b506000190190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d0496611adae861791435296e0aae2099af9499031b6826466a4fe91423b08e564736f6c63430008150033", + "nonce": "0x2c94a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2b688d5651cf2786ad62eff7153e55a2b055734160900055ceba698ce43bfbf1", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec400000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab500000000000000000000000079abf4410d7c76d2b38f75eae7bd6fc6099797ac", + "nonce": "0x2c94b" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0ae785f2c1b42a12b45749521df65bfaf4519d6dccbd3a98032262d49ff5fd83", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "function": "grantRole(bytes32,address)", + "arguments": [ + "0x033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad", + "0x968D0Cd7343f711216817E617d3f92a23dC91c07" + ], + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x51caf51678f469e9dd4c878a7b0cebebbd4a4ab5", + "gas": "0x28a39", + "value": "0x0", + "data": "0x2f2ff15d033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "nonce": "0x2c94c" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x4b783661fcdbb729be9d9e746fa603b8a2d46fc3eee3c8a0881d7eaaddccabf6", + "transactionIndex": "0x0", + "blockHash": "0xad4e080e697ac41acd2549ce736f02799801b70e59b185e8bdc2bb0d6d7ee841", + "blockNumber": "0x147c0ee", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x2ae23e", + "gasUsed": "0x2ae23e", + "contractAddress": "0x79Abf4410D7c76d2b38F75eaE7bD6Fc6099797Ac", + "logs": [ + { + "address": "0x79Abf4410D7c76d2b38F75eaE7bD6Fc6099797Ac", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xad4e080e697ac41acd2549ce736f02799801b70e59b185e8bdc2bb0d6d7ee841", + "blockNumber": "0x147c0ee", + "transactionHash": "0x4b783661fcdbb729be9d9e746fa603b8a2d46fc3eee3c8a0881d7eaaddccabf6", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000800000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x2b688d5651cf2786ad62eff7153e55a2b055734160900055ceba698ce43bfbf1", + "transactionIndex": "0x1", + "blockHash": "0xad4e080e697ac41acd2549ce736f02799801b70e59b185e8bdc2bb0d6d7ee841", + "blockNumber": "0x147c0ee", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x2b6748", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000079abf4410d7c76d2b38f75eae7bd6fc6099797ac" + ], + "data": "0x", + "blockHash": "0xad4e080e697ac41acd2549ce736f02799801b70e59b185e8bdc2bb0d6d7ee841", + "blockNumber": "0x147c0ee", + "transactionHash": "0x2b688d5651cf2786ad62eff7153e55a2b055734160900055ceba698ce43bfbf1", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000020400000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x0ae785f2c1b42a12b45749521df65bfaf4519d6dccbd3a98032262d49ff5fd83", + "transactionIndex": "0x0", + "blockHash": "0x5e6ed8d0562b16dbba65404635f58d05665cf4b8c0947970d80f1f58ff930c44", + "blockNumber": "0x147c0ef", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "cumulativeGasUsed": "0x1bc99", + "gasUsed": "0x1bc99", + "contractAddress": null, + "logs": [ + { + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "0x000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07" + ], + "data": "0x", + "blockHash": "0x5e6ed8d0562b16dbba65404635f58d05665cf4b8c0947970d80f1f58ff930c44", + "blockNumber": "0x147c0ef", + "transactionHash": "0x0ae785f2c1b42a12b45749521df65bfaf4519d6dccbd3a98032262d49ff5fd83", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000004000000000000000000000020000000000000000200000000010000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000081000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000003000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698139063, + "chain": 2021, + "multi": false, + "commit": "f35ddbd" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698142383.json b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698142383.json new file mode 100644 index 00000000..e8bfdd4e --- /dev/null +++ b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698142383.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0x3492e66517b0cd26c2ee32054c7f1f7fb0daf29bcbd1d60eb2df0d8c1532f0ac", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x454dD005E995dA3a3CafB30A2B6fe51A8C53862a", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4b790f", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61432a806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b6103096103043660046134d1565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c3660046134ee565b6107d7565b60405161031591906135db565b61035161034c366004613669565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b60405161031591906136e6565b6103ba6103b53660046134ee565b610c0b565b6040516001600160a01b039091168152602001610315565b6103e76000805160206142b583398151915281565b604051908152602001610315565b6104086104033660046136f9565b610c32565b005b6103e76104183660046137ae565b610d4c565b61039a61042b3660046134ee565b610d57565b6103e761043e3660046134ee565b60096020526000908152604090205481565b603f546103e7565b61039a6104663660046134ee565b610da4565b6104086104793660046137f6565b610eb0565b61040861048c366004613837565b611045565b6103e761049f3660046134ee565b6000908152600160208190526040909120015490565b6104086104c3366004613873565b611077565b6104086104d6366004613873565b6110d1565b6103e76104e93660046136f9565b6110f7565b6103e760008051602061429583398151915281565b610408610511366004613873565b61118d565b61040861120b565b61040861052c366004613837565b61122e565b61040861053f3660046134ee565b611249565b6103e76105523660046134ee565b611277565b61056a61056536600461389f565b61130a565b6040516001600160401b039091168152602001610315565b6104086105903660046138c2565b6113cf565b6104086105a33660046138dd565b6113f8565b603c5460ff16610309565b6103ba6105c13660046134ee565b61140d565b6103e76105d436600461391e565b61142e565b6104086114b4565b6103ba6105ef366004613939565b6114d4565b610309610602366004613873565b6114f3565b604080518082019091526003815262524e5360e81b602082015261039a565b6103096106343660046134ee565b61151e565b6103e7600081565b61040861064f36600461396b565b611549565b6073546103e7565b61040861066a366004613995565b611554565b61040861067d366004613a2b565b61176c565b61056a6001600160401b0381565b61039a61069e3660046134ee565b61179e565b6103e76106b13660046134ee565b611811565b6104086106c4366004613873565b611828565b60a7546001600160401b031661056a565b6103e76000805160206142d583398151915281565b6103096106fd366004613aa6565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613ad0565b61184e565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b61040861077336600461389f565b611938565b61078b610786366004613b53565b6119b9565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611afa565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df61345f565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613b86565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613b86565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611b1f565b60208201516001600160401b03909116604090910152919050565b600080610938611b9b565b6109423389611be3565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bff92505050565b90506109a98161151e565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b0316156109ec576109ec81611c15565b6109f68482611c84565b610a0b426001600160401b0380861690611c97565b9150610a178883611ccd565b610a1f61345f565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610a9f91166001613bd0565b60ff1681526020018a815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525080825251600360ff90911610610b0e576040516378a0027360e11b815260040160405180910390fd5b600082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b549082613c37565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b0319909316959096169490941717919091169290921790915551829060008051602061427583398151915290610bf790600019908590613cf6565b60405180910390a250965096945050505050565b6000610c1682611d13565b506000908152600760205260409020546001600160a01b031690565b6000610c3d82611d72565b9050806001600160a01b0316836001600160a01b031603610caf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610ccb5750610ccb81336106fd565b610d3d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610ca6565b610d478383611dd2565b505050565b60006107d182611e40565b606081610d6381611d13565b600083815260a8602090815260408083206009835292819020549051610d8c9392879101613d0f565b60405160208183030381529060405291505b50919050565b606081600003610dc257505060408051602081019091526000815290565b600082815260a860205260409020600281018054610ddf90613b86565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0b90613b86565b8015610e585780601f10610e2d57610100808354040283529160200191610e58565b820191906000526020600020905b815481529060010190602001808311610e3b57829003601f168201915b50505050509150806001015492505b8215610d9e5750600082815260a860209081526040918290209151610e93918491600285019101613e1d565b604051602081830303815290604052915080600101549250610e67565b610eb8611b9b565b8282610ec48282611eb3565b610ecc61345f565b600086815260a860205260409020600301610ef1610eea6006611ed4565b8790611ef6565b15610f3257610f066080860160608701613ecf565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f3f610eea6005611ed4565b15610f7557610f7587610f5860608801604089016138c2565b60208501516001600160401b039091166040909101819052611f02565b610f82610eea6003611ed4565b15610fb857610f94602086018661391e565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206142758339815191528784604051610fd8929190613cf6565b60405180910390a2610fed610eea6004611ed4565b1561103c57600087815260a860209081526040918290206004015461103c926001600160a01b039091169161102691890190890161391e565b8960405180602001604052806000815250611fdb565b50505050505050565b611050335b8261200e565b61106c5760405162461bcd60e51b8152600401610ca690613eea565b610d47838383612030565b61107f611b9b565b8161108a6004611ed4565b6110948282611eb3565b600084815260a8602090815260408083206004015481519283019091529181526110cb916001600160a01b03169085908790611fdb565b50505050565b600082815260016020819052604090912001546110ed8161212c565b610d478383612136565b60006111028361142e565b82106111645760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610ca6565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146111fd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ca6565b6112078282612158565b5050565b6000805160206142d58339815191526112238161212c565b61122b61217a565b50565b610d478383836040518060200160405280600081525061176c565b6112523361104a565b61126e5760405162461bcd60e51b8152600401610ca690613eea565b61122b81611c15565b6000611282603f5490565b82106112e55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610ca6565b603f82815481106112f8576112f8613f37565b90600052602060002001549050919050565b6000611314611b9b565b6000805160206142b583398151915261132c8161212c565b61133461345f565b600085815260a86020526040902060040154611366906001600160401b03600160a01b90910481169086811690611c97565b6020820180516001600160401b0390921660409283015251015161138b908690611f02565b6020810151604001519250846000805160206142758339815191526113b06005611ed4565b836040516113bf929190613cf6565b60405180910390a2505092915050565b6113d7611b9b565b6000805160206142b58339815191526113ef8161212c565b611207826121cc565b60006114038161212c565b610d478383612224565b60006114188261226d565b1561142557506000919050565b6107d182611d72565b60006001600160a01b0382166114985760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610ca6565b506001600160a01b031660009081526006602052604090205490565b6000805160206142d58339815191526114cc8161212c565b61122b612289565b60008281526002602052604081206114ec90836122c6565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061154161152c83611b1f565b60a7546001600160401b0391821691166122d2565b421192915050565b6112073383836122e6565b600054610100900460ff16158080156115745750600054600160ff909116105b8061158e5750303b15801561158e575060005460ff166001145b6115f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ca6565b6000805460ff191660011790558015611614576000805461ff0019166101001790555b61161f600089612136565b6116376000805160206142d583398151915288612136565b61164f6000805160206142b583398151915287612136565b61166760008051602061429583398151915286612136565b6116718383612224565b61167a846121cc565b611685886000611c84565b61168d61345f565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206142758339815191526117046005611ed4565b83604051611713929190613cf6565b60405180910390a2508015611762576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b611776338361200e565b6117925760405162461bcd60e51b8152600401610ca690613eea565b6110cb84848484611fdb565b6060816117aa81611d13565b60006117b46123b4565b905060008151116117d45760405180602001604052806000815250611809565b806117de30612446565b6117e78661245c565b6040516020016117f993929190613f4d565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d1906124ee565b600082815260016020819052604090912001546118448161212c565b610d478383612158565b6000805160206142958339815191526118668161212c565b60006118726006611ed4565b9050600061187e61345f565b602081015185151560609091015260005b86811015611762578787828181106118a9576118a9613f37565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461193057600083815260a8602052604090819020600401805460ff60e01b1916600160e01b89151502179055518390600080516020614275833981519152906119279087908690613cf6565b60405180910390a25b60010161188f565b611940611b9b565b6000805160206142b58339815191526119588161212c565b61196061345f565b60208101516001600160401b0384166040909101819052611982908590611f02565b8360008051602061427583398151915261199c6005611ed4565b836040516119ab929190613cf6565b60405180910390a250505050565b6000806119c7836007611ef6565b156119de57506000905063da698a4d60e01b611af2565b6000848152600560205260409020546001600160a01b0316611a0c5750600090506304a3dbd560e51b611af2565b611a20611a196006611ed4565b8490611ef6565b8015611a415750611a3f600080516020614295833981519152866114f3565b155b15611a5857506000905063c24b0f3f60e01b611af2565b6000611a726000805160206142b5833981519152876114f3565b9050611a88611a816005611ed4565b8590611ef6565b8015611a92575080155b15611aab57506000915063ed4b948760e01b9050611af2565b611ab6846018611ef6565b8015611ad057508080611ace5750611ace8686611be3565b155b15611ae85750600091506282b42960e81b9050611af2565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d1826124f8565b600081815260056020526040812054611b62907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b03166114f3565b15611b7557506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611be15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610ca6565b565b6000611bef838361200e565b806114ec57506114ec8383612538565b6000918252805160209182012090526040902090565b611c1e81612596565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611c5761345f565b81600080516020614275833981519152601883604051611c78929190613cf6565b60405180910390a25050565b6073805460010190556112078282612639565b600081841180611ca657508183115b15611cb25750806114ec565b611cbc84846122d2565b9050818111156114ec575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156112075760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031661122b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610ca6565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610ca6565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e0782611d72565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611ea95760006020840160018303810160008052805b828110611ea457828114602e600183035160f81c1480821715611e9957600186848603030180842060205260406000206000526001810187019650505b505060001901611e5c565b505050505b5050600051919050565b600080611ec13385856119b9565b91509150816110cb578060005260046000fd5b6000816006811115611ee857611ee8613eb9565b60ff166001901b9050919050565b600082821615156114ec565b600082815260a86020526040902060010154611f1e9082611ccd565b611f278261151e565b15611f4557604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611f8a57604051631c21962760e11b815260040160405180910390fd5b611f9261345f565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b611fe6848484612030565b611ff2848484846127d2565b6110cb5760405162461bcd60e51b8152600401610ca690613f9d565b60006120198261226d565b15612026575060006107d1565b6114ec83836128d3565b61203b838383612951565b61204361345f565b600061204f6004611ed4565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b031916909117905590506120a2600080516020614295833981519152336114f3565b1580156120c75750600083815260a86020526040902060040154600160e01b900460ff165b156120fd57600083815260a860205260409020600401805460ff60e01b191690556120fa816120f66006611ed4565b1790565b90505b82600080516020614275833981519152828460405161211d929190613cf6565b60405180910390a25050505050565b61122b8133612ac2565b6121408282612b1b565b6000828152600260205260409020610d479082612b86565b6121628282612b9b565b6000828152600260205260409020610d479082612c02565b612182612c17565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b6074612231828483613fef565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611c789291906140ae565b600061227882611b1f565b6001600160401b0316421192915050565b612291611b9b565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121af3390565b60006114ec8383612c60565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123475760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ca6565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060607480546123c390613b86565b80601f01602080910402602001604051908101604052809291908181526020018280546123ef90613b86565b801561243c5780601f106124115761010080835404028352916020019161243c565b820191906000526020600020905b81548152906001019060200180831161241f57829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612c8a565b6060600061246983612e25565b60010190506000816001600160401b0381111561248857612488613723565b6040519080825280601f01601f1916602001820160405280156124b2576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846124bc57509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061252957506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612efd565b6000805b821561258c5750600082815260a860205260409020600401546001600160a01b0390811690841681036125735760019150506107d1565b600092835260a86020526040909220600101549161253c565b5060009392505050565b60006125a182611d72565b90506125b1816000846001612f22565b6125ba82611d72565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b03821661268f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ca6565b6000818152600560205260409020546001600160a01b0316156126f45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ca6565b612702600083836001612f22565b6000818152600560205260409020546001600160a01b0316156127675760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ca6565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156128c857604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128169033908990889088906004016140dd565b6020604051808303816000875af1925050508015612851575060408051601f3d908101601f1916820190925261284e9181019061411a565b60015b6128ae573d80801561287f576040519150601f19603f3d011682016040523d82523d6000602084013e612884565b606091505b5080516000036128a65760405162461bcd60e51b8152600401610ca690613f9d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611809565b506001949350505050565b6000806128df83611d72565b9050806001600160a01b0316846001600160a01b0316148061292657506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118095750836001600160a01b031661293f84610c0b565b6001600160a01b031614949350505050565b826001600160a01b031661296482611d72565b6001600160a01b03161461298a5760405162461bcd60e51b8152600401610ca690614137565b6001600160a01b0382166129ec5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ca6565b6129f98383836001612f22565b826001600160a01b0316612a0c82611d72565b6001600160a01b031614612a325760405162461bcd60e51b8152600401610ca690614137565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612acc82826114f3565b61120757612ad981612446565b612ae4836020612c8a565b604051602001612af592919061417c565b60408051601f198184030181529082905262461bcd60e51b8252610ca6916004016136e6565b612b2582826114f3565b6112075760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006114ec836001600160a01b038416612f2e565b612ba582826114f3565b156112075760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006114ec836001600160a01b038416612f7d565b603c5460ff16611be15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610ca6565b6000826000018281548110612c7757612c77613f37565b9060005260206000200154905092915050565b60606000612c998360026141f1565b612ca4906002614208565b6001600160401b03811115612cbb57612cbb613723565b6040519080825280601f01601f191660200182016040528015612ce5576020820181803683370190505b509050600360fc1b81600081518110612d0057612d00613f37565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d2f57612d2f613f37565b60200101906001600160f81b031916908160001a9053506000612d538460026141f1565b612d5e906001614208565b90505b6001811115612dd6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612d9257612d92613f37565b1a60f81b828281518110612da857612da8613f37565b60200101906001600160f81b031916908160001a90535060049490941c93612dcf8161421b565b9050612d61565b5083156114ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ca6565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e645772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e90576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612eae57662386f26fc10000830492506010015b6305f5e1008310612ec6576305f5e100830492506008015b6127108310612eda57612710830492506004015b60648310612eec576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d182613070565b6110cb848484846130a5565b6000818152600183016020526040812054612f75575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60008181526001830160205260408120548015613066576000612fa1600183614232565b8554909150600090612fb590600190614232565b905081811461301a576000866000018281548110612fd557612fd5613f37565b9060005260206000200154905080876000018481548110612ff857612ff8613f37565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061302b5761302b614245565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b6130b1848484846131e5565b60018111156131205760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610ca6565b816001600160a01b03851661317c5761317781603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b61319f565b836001600160a01b0316856001600160a01b03161461319f5761319f8582613258565b6001600160a01b0384166131bb576131b6816132f5565b6131de565b846001600160a01b0316846001600160a01b0316146131de576131de84826133a4565b5050505050565b6131f1848484846133e8565b603c5460ff16156110cb5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610ca6565b600060016132658461142e565b61326f9190614232565b6000838152603e60205260409020549091508082146132c2576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f5460009061330790600190614232565b600083815260406020819052812054603f805493945090928490811061332f5761332f613f37565b9060005260206000200154905080603f838154811061335057613350613f37565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f80548061338857613388614245565b6001900381819060005260206000200160009055905550505050565b60006133af8361142e565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6133f48284614208565b81101561345957600081815260096020526040812080549091906134179061425b565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a3806134518161425b565b9150506133ea565b506110cb565b60405180604001604052806134916040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461122b57600080fd5b6000602082840312156134e357600080fd5b81356114ec816134bb565b60006020828403121561350057600080fd5b5035919050565b60005b8381101561352257818101518382015260200161350a565b50506000910152565b60008151808452613543816020860160208601613507565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e084015260009061358d61010085018261352b565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b6020815260006114ec6020830184613557565b60008083601f84011261360057600080fd5b5081356001600160401b0381111561361757600080fd5b60208301915083602082850101111561362f57600080fd5b9250929050565b80356001600160a01b038116811461364d57600080fd5b919050565b80356001600160401b038116811461364d57600080fd5b60008060008060008060a0878903121561368257600080fd5b8635955060208701356001600160401b0381111561369f57600080fd5b6136ab89828a016135ee565b90965094506136be905060408801613636565b92506136cc60608801613636565b91506136da60808801613652565b90509295509295509295565b6020815260006114ec602083018461352b565b6000806040838503121561370c57600080fd5b61371583613636565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561375357613753613723565b604051601f8501601f19908116603f0116810190828211818310171561377b5761377b613723565b8160405280935085815286868601111561379457600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156137c057600080fd5b81356001600160401b038111156137d657600080fd5b8201601f810184136137e757600080fd5b61180984823560208401613739565b600080600083850360c081121561380c57600080fd5b84359350602085013592506080603f198201121561382957600080fd5b506040840190509250925092565b60008060006060848603121561384c57600080fd5b61385584613636565b925061386360208501613636565b9150604084013590509250925092565b6000806040838503121561388657600080fd5b8235915061389660208401613636565b90509250929050565b600080604083850312156138b257600080fd5b8235915061389660208401613652565b6000602082840312156138d457600080fd5b6114ec82613652565b600080602083850312156138f057600080fd5b82356001600160401b0381111561390657600080fd5b613912858286016135ee565b90969095509350505050565b60006020828403121561393057600080fd5b6114ec82613636565b6000806040838503121561394c57600080fd5b50508035926020909101359150565b8035801515811461364d57600080fd5b6000806040838503121561397e57600080fd5b61398783613636565b91506138966020840161395b565b600080600080600080600060c0888a0312156139b057600080fd5b6139b988613636565b96506139c760208901613636565b95506139d560408901613636565b94506139e360608901613636565b93506139f160808901613652565b925060a08801356001600160401b03811115613a0c57600080fd5b613a188a828b016135ee565b989b979a50959850939692959293505050565b60008060008060808587031215613a4157600080fd5b613a4a85613636565b9350613a5860208601613636565b92506040850135915060608501356001600160401b03811115613a7a57600080fd5b8501601f81018713613a8b57600080fd5b613a9a87823560208401613739565b91505092959194509250565b60008060408385031215613ab957600080fd5b613ac283613636565b915061389660208401613636565b600080600060408486031215613ae557600080fd5b83356001600160401b0380821115613afc57600080fd5b818601915086601f830112613b1057600080fd5b813581811115613b1f57600080fd5b8760208260051b8501011115613b3457600080fd5b602092830195509350613b4a918601905061395b565b90509250925092565b600080600060608486031215613b6857600080fd5b613b7184613636565b95602085013595506040909401359392505050565b600181811c90821680613b9a57607f821691505b602082108103610d9e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613bba565b601f821115610d4757600081815260208120601f850160051c81016020861015613c105750805b601f850160051c820191505b81811015613c2f57828155600101613c1c565b505050505050565b81516001600160401b03811115613c5057613c50613723565b613c6481613c5e8454613b86565b84613be9565b602080601f831160018114613c995760008415613c815750858301515b600019600386901b1c1916600185901b178555613c2f565b600085815260208120601f198616915b82811015613cc857888601518255948401946001909101908401613ca9565b5085821015613ce65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006118096040830184613557565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d4c81613b86565b8061016088015261018085831660008114613d6e5760018114613d8857613db9565b60ff1984168983015282151560051b890182019450613db9565b8560005260208060002060005b85811015613db05781548c8201860152908901908201613d95565b8b018401965050505b50505050613e096080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e308285838901613507565b8184019150601760f91b8252600160008654613e4b81613b86565b8184168015613e615760018114613e7a57613eaa565b60ff198316878601528115158202870185019350613eaa565b896000528560002060005b83811015613ea0578154898201880152908601908701613e85565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613ee157600080fd5b6114ec8261395b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613f5f818460208901613507565b845190830190613f73818360208901613507565b602f60f81b91019081528351613f90816001840160208801613507565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b0383111561400657614006613723565b61401a836140148354613b86565b83613be9565b6000601f84116001811461404e57600085156140365750838201355b600019600387901b1c1916600186901b1783556131de565b600083815260209020601f19861690835b8281101561407f578685013582556020948501946001909201910161405f565b508682101561409c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906141109083018461352b565b9695505050505050565b60006020828403121561412c57600080fd5b81516114ec816134bb565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516141b4816017850160208801613507565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516141e5816028840160208801613507565b01602801949350505050565b80820281158282048414176107d1576107d1613bba565b808201808211156107d1576107d1613bba565b60008161422a5761422a613bba565b506000190190565b818103818111156107d1576107d1613bba565b634e487b7160e01b600052603160045260246000fd5b60006001820161426d5761426d613bba565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220d5f365766b82098eda9a4e3b580d61cb61878c671f3dbf2c54b673d4d11f770064736f6c63430008150033", + "nonce": "0x2c94d" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x563fdd950bc1ee7d24d55c05e8acf09c56dd18447bc73410383cccfef48d7a89", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000454dd005e995da3a3cafb30a2b6fe51a8c53862a", + "nonce": "0x2c94e" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x3492e66517b0cd26c2ee32054c7f1f7fb0daf29bcbd1d60eb2df0d8c1532f0ac", + "0x563fdd950bc1ee7d24d55c05e8acf09c56dd18447bc73410383cccfef48d7a89" + ], + "returns": {}, + "timestamp": 1698142383, + "chain": 2021, + "multi": false, + "commit": "4f3f980" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698142390.json b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698142390.json new file mode 100644 index 00000000..ef3ea273 --- /dev/null +++ b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698142390.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x3492e66517b0cd26c2ee32054c7f1f7fb0daf29bcbd1d60eb2df0d8c1532f0ac", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x454dD005E995dA3a3CafB30A2B6fe51A8C53862a", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4b790f", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61432a806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b6103096103043660046134d1565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c3660046134ee565b6107d7565b60405161031591906135db565b61035161034c366004613669565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b60405161031591906136e6565b6103ba6103b53660046134ee565b610c0b565b6040516001600160a01b039091168152602001610315565b6103e76000805160206142b583398151915281565b604051908152602001610315565b6104086104033660046136f9565b610c32565b005b6103e76104183660046137ae565b610d4c565b61039a61042b3660046134ee565b610d57565b6103e761043e3660046134ee565b60096020526000908152604090205481565b603f546103e7565b61039a6104663660046134ee565b610da4565b6104086104793660046137f6565b610eb0565b61040861048c366004613837565b611045565b6103e761049f3660046134ee565b6000908152600160208190526040909120015490565b6104086104c3366004613873565b611077565b6104086104d6366004613873565b6110d1565b6103e76104e93660046136f9565b6110f7565b6103e760008051602061429583398151915281565b610408610511366004613873565b61118d565b61040861120b565b61040861052c366004613837565b61122e565b61040861053f3660046134ee565b611249565b6103e76105523660046134ee565b611277565b61056a61056536600461389f565b61130a565b6040516001600160401b039091168152602001610315565b6104086105903660046138c2565b6113cf565b6104086105a33660046138dd565b6113f8565b603c5460ff16610309565b6103ba6105c13660046134ee565b61140d565b6103e76105d436600461391e565b61142e565b6104086114b4565b6103ba6105ef366004613939565b6114d4565b610309610602366004613873565b6114f3565b604080518082019091526003815262524e5360e81b602082015261039a565b6103096106343660046134ee565b61151e565b6103e7600081565b61040861064f36600461396b565b611549565b6073546103e7565b61040861066a366004613995565b611554565b61040861067d366004613a2b565b61176c565b61056a6001600160401b0381565b61039a61069e3660046134ee565b61179e565b6103e76106b13660046134ee565b611811565b6104086106c4366004613873565b611828565b60a7546001600160401b031661056a565b6103e76000805160206142d583398151915281565b6103096106fd366004613aa6565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613ad0565b61184e565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b61040861077336600461389f565b611938565b61078b610786366004613b53565b6119b9565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611afa565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df61345f565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613b86565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613b86565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611b1f565b60208201516001600160401b03909116604090910152919050565b600080610938611b9b565b6109423389611be3565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bff92505050565b90506109a98161151e565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b0316156109ec576109ec81611c15565b6109f68482611c84565b610a0b426001600160401b0380861690611c97565b9150610a178883611ccd565b610a1f61345f565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610a9f91166001613bd0565b60ff1681526020018a815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525080825251600360ff90911610610b0e576040516378a0027360e11b815260040160405180910390fd5b600082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b549082613c37565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b0319909316959096169490941717919091169290921790915551829060008051602061427583398151915290610bf790600019908590613cf6565b60405180910390a250965096945050505050565b6000610c1682611d13565b506000908152600760205260409020546001600160a01b031690565b6000610c3d82611d72565b9050806001600160a01b0316836001600160a01b031603610caf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610ccb5750610ccb81336106fd565b610d3d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610ca6565b610d478383611dd2565b505050565b60006107d182611e40565b606081610d6381611d13565b600083815260a8602090815260408083206009835292819020549051610d8c9392879101613d0f565b60405160208183030381529060405291505b50919050565b606081600003610dc257505060408051602081019091526000815290565b600082815260a860205260409020600281018054610ddf90613b86565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0b90613b86565b8015610e585780601f10610e2d57610100808354040283529160200191610e58565b820191906000526020600020905b815481529060010190602001808311610e3b57829003601f168201915b50505050509150806001015492505b8215610d9e5750600082815260a860209081526040918290209151610e93918491600285019101613e1d565b604051602081830303815290604052915080600101549250610e67565b610eb8611b9b565b8282610ec48282611eb3565b610ecc61345f565b600086815260a860205260409020600301610ef1610eea6006611ed4565b8790611ef6565b15610f3257610f066080860160608701613ecf565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f3f610eea6005611ed4565b15610f7557610f7587610f5860608801604089016138c2565b60208501516001600160401b039091166040909101819052611f02565b610f82610eea6003611ed4565b15610fb857610f94602086018661391e565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206142758339815191528784604051610fd8929190613cf6565b60405180910390a2610fed610eea6004611ed4565b1561103c57600087815260a860209081526040918290206004015461103c926001600160a01b039091169161102691890190890161391e565b8960405180602001604052806000815250611fdb565b50505050505050565b611050335b8261200e565b61106c5760405162461bcd60e51b8152600401610ca690613eea565b610d47838383612030565b61107f611b9b565b8161108a6004611ed4565b6110948282611eb3565b600084815260a8602090815260408083206004015481519283019091529181526110cb916001600160a01b03169085908790611fdb565b50505050565b600082815260016020819052604090912001546110ed8161212c565b610d478383612136565b60006111028361142e565b82106111645760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610ca6565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146111fd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ca6565b6112078282612158565b5050565b6000805160206142d58339815191526112238161212c565b61122b61217a565b50565b610d478383836040518060200160405280600081525061176c565b6112523361104a565b61126e5760405162461bcd60e51b8152600401610ca690613eea565b61122b81611c15565b6000611282603f5490565b82106112e55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610ca6565b603f82815481106112f8576112f8613f37565b90600052602060002001549050919050565b6000611314611b9b565b6000805160206142b583398151915261132c8161212c565b61133461345f565b600085815260a86020526040902060040154611366906001600160401b03600160a01b90910481169086811690611c97565b6020820180516001600160401b0390921660409283015251015161138b908690611f02565b6020810151604001519250846000805160206142758339815191526113b06005611ed4565b836040516113bf929190613cf6565b60405180910390a2505092915050565b6113d7611b9b565b6000805160206142b58339815191526113ef8161212c565b611207826121cc565b60006114038161212c565b610d478383612224565b60006114188261226d565b1561142557506000919050565b6107d182611d72565b60006001600160a01b0382166114985760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610ca6565b506001600160a01b031660009081526006602052604090205490565b6000805160206142d58339815191526114cc8161212c565b61122b612289565b60008281526002602052604081206114ec90836122c6565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061154161152c83611b1f565b60a7546001600160401b0391821691166122d2565b421192915050565b6112073383836122e6565b600054610100900460ff16158080156115745750600054600160ff909116105b8061158e5750303b15801561158e575060005460ff166001145b6115f15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ca6565b6000805460ff191660011790558015611614576000805461ff0019166101001790555b61161f600089612136565b6116376000805160206142d583398151915288612136565b61164f6000805160206142b583398151915287612136565b61166760008051602061429583398151915286612136565b6116718383612224565b61167a846121cc565b611685886000611c84565b61168d61345f565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206142758339815191526117046005611ed4565b83604051611713929190613cf6565b60405180910390a2508015611762576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b611776338361200e565b6117925760405162461bcd60e51b8152600401610ca690613eea565b6110cb84848484611fdb565b6060816117aa81611d13565b60006117b46123b4565b905060008151116117d45760405180602001604052806000815250611809565b806117de30612446565b6117e78661245c565b6040516020016117f993929190613f4d565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d1906124ee565b600082815260016020819052604090912001546118448161212c565b610d478383612158565b6000805160206142958339815191526118668161212c565b60006118726006611ed4565b9050600061187e61345f565b602081015185151560609091015260005b86811015611762578787828181106118a9576118a9613f37565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461193057600083815260a8602052604090819020600401805460ff60e01b1916600160e01b89151502179055518390600080516020614275833981519152906119279087908690613cf6565b60405180910390a25b60010161188f565b611940611b9b565b6000805160206142b58339815191526119588161212c565b61196061345f565b60208101516001600160401b0384166040909101819052611982908590611f02565b8360008051602061427583398151915261199c6005611ed4565b836040516119ab929190613cf6565b60405180910390a250505050565b6000806119c7836007611ef6565b156119de57506000905063da698a4d60e01b611af2565b6000848152600560205260409020546001600160a01b0316611a0c5750600090506304a3dbd560e51b611af2565b611a20611a196006611ed4565b8490611ef6565b8015611a415750611a3f600080516020614295833981519152866114f3565b155b15611a5857506000905063c24b0f3f60e01b611af2565b6000611a726000805160206142b5833981519152876114f3565b9050611a88611a816005611ed4565b8590611ef6565b8015611a92575080155b15611aab57506000915063ed4b948760e01b9050611af2565b611ab6846018611ef6565b8015611ad057508080611ace5750611ace8686611be3565b155b15611ae85750600091506282b42960e81b9050611af2565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d1826124f8565b600081815260056020526040812054611b62907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b03166114f3565b15611b7557506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611be15760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610ca6565b565b6000611bef838361200e565b806114ec57506114ec8383612538565b6000918252805160209182012090526040902090565b611c1e81612596565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611c5761345f565b81600080516020614275833981519152601883604051611c78929190613cf6565b60405180910390a25050565b6073805460010190556112078282612639565b600081841180611ca657508183115b15611cb25750806114ec565b611cbc84846122d2565b9050818111156114ec575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156112075760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031661122b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610ca6565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610ca6565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e0782611d72565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611ea95760006020840160018303810160008052805b828110611ea457828114602e600183035160f81c1480821715611e9957600186848603030180842060205260406000206000526001810187019650505b505060001901611e5c565b505050505b5050600051919050565b600080611ec13385856119b9565b91509150816110cb578060005260046000fd5b6000816006811115611ee857611ee8613eb9565b60ff166001901b9050919050565b600082821615156114ec565b600082815260a86020526040902060010154611f1e9082611ccd565b611f278261151e565b15611f4557604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611f8a57604051631c21962760e11b815260040160405180910390fd5b611f9261345f565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b611fe6848484612030565b611ff2848484846127d2565b6110cb5760405162461bcd60e51b8152600401610ca690613f9d565b60006120198261226d565b15612026575060006107d1565b6114ec83836128d3565b61203b838383612951565b61204361345f565b600061204f6004611ed4565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b031916909117905590506120a2600080516020614295833981519152336114f3565b1580156120c75750600083815260a86020526040902060040154600160e01b900460ff165b156120fd57600083815260a860205260409020600401805460ff60e01b191690556120fa816120f66006611ed4565b1790565b90505b82600080516020614275833981519152828460405161211d929190613cf6565b60405180910390a25050505050565b61122b8133612ac2565b6121408282612b1b565b6000828152600260205260409020610d479082612b86565b6121628282612b9b565b6000828152600260205260409020610d479082612c02565b612182612c17565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b6074612231828483613fef565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611c789291906140ae565b600061227882611b1f565b6001600160401b0316421192915050565b612291611b9b565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121af3390565b60006114ec8383612c60565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123475760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ca6565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060607480546123c390613b86565b80601f01602080910402602001604051908101604052809291908181526020018280546123ef90613b86565b801561243c5780601f106124115761010080835404028352916020019161243c565b820191906000526020600020905b81548152906001019060200180831161241f57829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612c8a565b6060600061246983612e25565b60010190506000816001600160401b0381111561248857612488613723565b6040519080825280601f01601f1916602001820160405280156124b2576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846124bc57509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061252957506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612efd565b6000805b821561258c5750600082815260a860205260409020600401546001600160a01b0390811690841681036125735760019150506107d1565b600092835260a86020526040909220600101549161253c565b5060009392505050565b60006125a182611d72565b90506125b1816000846001612f22565b6125ba82611d72565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b03821661268f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ca6565b6000818152600560205260409020546001600160a01b0316156126f45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ca6565b612702600083836001612f22565b6000818152600560205260409020546001600160a01b0316156127675760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ca6565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156128c857604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906128169033908990889088906004016140dd565b6020604051808303816000875af1925050508015612851575060408051601f3d908101601f1916820190925261284e9181019061411a565b60015b6128ae573d80801561287f576040519150601f19603f3d011682016040523d82523d6000602084013e612884565b606091505b5080516000036128a65760405162461bcd60e51b8152600401610ca690613f9d565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611809565b506001949350505050565b6000806128df83611d72565b9050806001600160a01b0316846001600160a01b0316148061292657506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118095750836001600160a01b031661293f84610c0b565b6001600160a01b031614949350505050565b826001600160a01b031661296482611d72565b6001600160a01b03161461298a5760405162461bcd60e51b8152600401610ca690614137565b6001600160a01b0382166129ec5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ca6565b6129f98383836001612f22565b826001600160a01b0316612a0c82611d72565b6001600160a01b031614612a325760405162461bcd60e51b8152600401610ca690614137565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612acc82826114f3565b61120757612ad981612446565b612ae4836020612c8a565b604051602001612af592919061417c565b60408051601f198184030181529082905262461bcd60e51b8252610ca6916004016136e6565b612b2582826114f3565b6112075760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006114ec836001600160a01b038416612f2e565b612ba582826114f3565b156112075760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006114ec836001600160a01b038416612f7d565b603c5460ff16611be15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610ca6565b6000826000018281548110612c7757612c77613f37565b9060005260206000200154905092915050565b60606000612c998360026141f1565b612ca4906002614208565b6001600160401b03811115612cbb57612cbb613723565b6040519080825280601f01601f191660200182016040528015612ce5576020820181803683370190505b509050600360fc1b81600081518110612d0057612d00613f37565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d2f57612d2f613f37565b60200101906001600160f81b031916908160001a9053506000612d538460026141f1565b612d5e906001614208565b90505b6001811115612dd6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612d9257612d92613f37565b1a60f81b828281518110612da857612da8613f37565b60200101906001600160f81b031916908160001a90535060049490941c93612dcf8161421b565b9050612d61565b5083156114ec5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ca6565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e645772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e90576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612eae57662386f26fc10000830492506010015b6305f5e1008310612ec6576305f5e100830492506008015b6127108310612eda57612710830492506004015b60648310612eec576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d182613070565b6110cb848484846130a5565b6000818152600183016020526040812054612f75575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60008181526001830160205260408120548015613066576000612fa1600183614232565b8554909150600090612fb590600190614232565b905081811461301a576000866000018281548110612fd557612fd5613f37565b9060005260206000200154905080876000018481548110612ff857612ff8613f37565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061302b5761302b614245565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b6130b1848484846131e5565b60018111156131205760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610ca6565b816001600160a01b03851661317c5761317781603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b61319f565b836001600160a01b0316856001600160a01b03161461319f5761319f8582613258565b6001600160a01b0384166131bb576131b6816132f5565b6131de565b846001600160a01b0316846001600160a01b0316146131de576131de84826133a4565b5050505050565b6131f1848484846133e8565b603c5460ff16156110cb5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610ca6565b600060016132658461142e565b61326f9190614232565b6000838152603e60205260409020549091508082146132c2576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f5460009061330790600190614232565b600083815260406020819052812054603f805493945090928490811061332f5761332f613f37565b9060005260206000200154905080603f838154811061335057613350613f37565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f80548061338857613388614245565b6001900381819060005260206000200160009055905550505050565b60006133af8361142e565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6133f48284614208565b81101561345957600081815260096020526040812080549091906134179061425b565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a3806134518161425b565b9150506133ea565b506110cb565b60405180604001604052806134916040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461122b57600080fd5b6000602082840312156134e357600080fd5b81356114ec816134bb565b60006020828403121561350057600080fd5b5035919050565b60005b8381101561352257818101518382015260200161350a565b50506000910152565b60008151808452613543816020860160208601613507565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e084015260009061358d61010085018261352b565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b6020815260006114ec6020830184613557565b60008083601f84011261360057600080fd5b5081356001600160401b0381111561361757600080fd5b60208301915083602082850101111561362f57600080fd5b9250929050565b80356001600160a01b038116811461364d57600080fd5b919050565b80356001600160401b038116811461364d57600080fd5b60008060008060008060a0878903121561368257600080fd5b8635955060208701356001600160401b0381111561369f57600080fd5b6136ab89828a016135ee565b90965094506136be905060408801613636565b92506136cc60608801613636565b91506136da60808801613652565b90509295509295509295565b6020815260006114ec602083018461352b565b6000806040838503121561370c57600080fd5b61371583613636565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561375357613753613723565b604051601f8501601f19908116603f0116810190828211818310171561377b5761377b613723565b8160405280935085815286868601111561379457600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156137c057600080fd5b81356001600160401b038111156137d657600080fd5b8201601f810184136137e757600080fd5b61180984823560208401613739565b600080600083850360c081121561380c57600080fd5b84359350602085013592506080603f198201121561382957600080fd5b506040840190509250925092565b60008060006060848603121561384c57600080fd5b61385584613636565b925061386360208501613636565b9150604084013590509250925092565b6000806040838503121561388657600080fd5b8235915061389660208401613636565b90509250929050565b600080604083850312156138b257600080fd5b8235915061389660208401613652565b6000602082840312156138d457600080fd5b6114ec82613652565b600080602083850312156138f057600080fd5b82356001600160401b0381111561390657600080fd5b613912858286016135ee565b90969095509350505050565b60006020828403121561393057600080fd5b6114ec82613636565b6000806040838503121561394c57600080fd5b50508035926020909101359150565b8035801515811461364d57600080fd5b6000806040838503121561397e57600080fd5b61398783613636565b91506138966020840161395b565b600080600080600080600060c0888a0312156139b057600080fd5b6139b988613636565b96506139c760208901613636565b95506139d560408901613636565b94506139e360608901613636565b93506139f160808901613652565b925060a08801356001600160401b03811115613a0c57600080fd5b613a188a828b016135ee565b989b979a50959850939692959293505050565b60008060008060808587031215613a4157600080fd5b613a4a85613636565b9350613a5860208601613636565b92506040850135915060608501356001600160401b03811115613a7a57600080fd5b8501601f81018713613a8b57600080fd5b613a9a87823560208401613739565b91505092959194509250565b60008060408385031215613ab957600080fd5b613ac283613636565b915061389660208401613636565b600080600060408486031215613ae557600080fd5b83356001600160401b0380821115613afc57600080fd5b818601915086601f830112613b1057600080fd5b813581811115613b1f57600080fd5b8760208260051b8501011115613b3457600080fd5b602092830195509350613b4a918601905061395b565b90509250925092565b600080600060608486031215613b6857600080fd5b613b7184613636565b95602085013595506040909401359392505050565b600181811c90821680613b9a57607f821691505b602082108103610d9e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613bba565b601f821115610d4757600081815260208120601f850160051c81016020861015613c105750805b601f850160051c820191505b81811015613c2f57828155600101613c1c565b505050505050565b81516001600160401b03811115613c5057613c50613723565b613c6481613c5e8454613b86565b84613be9565b602080601f831160018114613c995760008415613c815750858301515b600019600386901b1c1916600185901b178555613c2f565b600085815260208120601f198616915b82811015613cc857888601518255948401946001909101908401613ca9565b5085821015613ce65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006118096040830184613557565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d4c81613b86565b8061016088015261018085831660008114613d6e5760018114613d8857613db9565b60ff1984168983015282151560051b890182019450613db9565b8560005260208060002060005b85811015613db05781548c8201860152908901908201613d95565b8b018401965050505b50505050613e096080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e308285838901613507565b8184019150601760f91b8252600160008654613e4b81613b86565b8184168015613e615760018114613e7a57613eaa565b60ff198316878601528115158202870185019350613eaa565b896000528560002060005b83811015613ea0578154898201880152908601908701613e85565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613ee157600080fd5b6114ec8261395b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613f5f818460208901613507565b845190830190613f73818360208901613507565b602f60f81b91019081528351613f90816001840160208801613507565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b0383111561400657614006613723565b61401a836140148354613b86565b83613be9565b6000601f84116001811461404e57600085156140365750838201355b600019600387901b1c1916600186901b1783556131de565b600083815260209020601f19861690835b8281101561407f578685013582556020948501946001909201910161405f565b508682101561409c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906141109083018461352b565b9695505050505050565b60006020828403121561412c57600080fd5b81516114ec816134bb565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516141b4816017850160208801613507565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516141e5816028840160208801613507565b01602801949350505050565b80820281158282048414176107d1576107d1613bba565b808201808211156107d1576107d1613bba565b60008161422a5761422a613bba565b506000190190565b818103818111156107d1576107d1613bba565b634e487b7160e01b600052603160045260246000fd5b60006001820161426d5761426d613bba565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220d5f365766b82098eda9a4e3b580d61cb61878c671f3dbf2c54b673d4d11f770064736f6c63430008150033", + "nonce": "0x2c94d" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x563fdd950bc1ee7d24d55c05e8acf09c56dd18447bc73410383cccfef48d7a89", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000454dd005e995da3a3cafb30a2b6fe51a8c53862a", + "nonce": "0x2c94e" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x3492e66517b0cd26c2ee32054c7f1f7fb0daf29bcbd1d60eb2df0d8c1532f0ac", + "transactionIndex": "0x0", + "blockHash": "0xf241b13d4d8a3b88852cddb5447b2965075c30fa405152af9da56971c5eda3ae", + "blockNumber": "0x147c544", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x3a0e5b", + "gasUsed": "0x3a0e5b", + "contractAddress": "0x454dD005E995dA3a3CafB30A2B6fe51A8C53862a", + "logs": [ + { + "address": "0x454dD005E995dA3a3CafB30A2B6fe51A8C53862a", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xf241b13d4d8a3b88852cddb5447b2965075c30fa405152af9da56971c5eda3ae", + "blockNumber": "0x147c544", + "transactionHash": "0x3492e66517b0cd26c2ee32054c7f1f7fb0daf29bcbd1d60eb2df0d8c1532f0ac", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000080000000000000000000400000000000000000000000000000000008000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x563fdd950bc1ee7d24d55c05e8acf09c56dd18447bc73410383cccfef48d7a89", + "transactionIndex": "0x1", + "blockHash": "0xf241b13d4d8a3b88852cddb5447b2965075c30fa405152af9da56971c5eda3ae", + "blockNumber": "0x147c544", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x3a9365", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000454dd005e995da3a3cafb30a2b6fe51a8c53862a" + ], + "data": "0x", + "blockHash": "0xf241b13d4d8a3b88852cddb5447b2965075c30fa405152af9da56971c5eda3ae", + "blockNumber": "0x147c544", + "transactionHash": "0x563fdd950bc1ee7d24d55c05e8acf09c56dd18447bc73410383cccfef48d7a89", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000100000020000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698142390, + "chain": 2021, + "multi": false, + "commit": "4f3f980" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698206412.json b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698206412.json new file mode 100644 index 00000000..ff1c47aa --- /dev/null +++ b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698206412.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0xac6c543c47c074ebff2742518228d83be5d6a77d1e12c3e660aced535e6a4f76", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x6089166e8AEfd218d16B5DF621d22608eA0BE711", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4bacd6", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614359806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b610309610304366004613500565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c36600461351d565b6107d7565b604051610315919061360a565b61035161034c366004613698565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b6040516103159190613715565b6103ba6103b536600461351d565b610c3a565b6040516001600160a01b039091168152602001610315565b6103e76000805160206142e483398151915281565b604051908152602001610315565b610408610403366004613728565b610c61565b005b6103e76104183660046137dd565b610d7b565b61039a61042b36600461351d565b610d86565b6103e761043e36600461351d565b60096020526000908152604090205481565b603f546103e7565b61039a61046636600461351d565b610dd3565b610408610479366004613825565b610edf565b61040861048c366004613866565b611074565b6103e761049f36600461351d565b6000908152600160208190526040909120015490565b6104086104c33660046138a2565b6110a6565b6104086104d63660046138a2565b611100565b6103e76104e9366004613728565b611126565b6103e76000805160206142c483398151915281565b6104086105113660046138a2565b6111bc565b61040861123a565b61040861052c366004613866565b61125d565b61040861053f36600461351d565b611278565b6103e761055236600461351d565b6112a6565b61056a6105653660046138ce565b611339565b6040516001600160401b039091168152602001610315565b6104086105903660046138f1565b6113fe565b6104086105a336600461390c565b611427565b603c5460ff16610309565b6103ba6105c136600461351d565b61143c565b6103e76105d436600461394d565b61145d565b6104086114e3565b6103ba6105ef366004613968565b611503565b6103096106023660046138a2565b611522565b604080518082019091526003815262524e5360e81b602082015261039a565b61030961063436600461351d565b61154d565b6103e7600081565b61040861064f36600461399a565b611578565b6073546103e7565b61040861066a3660046139c4565b611583565b61040861067d366004613a5a565b61179b565b61056a6001600160401b0381565b61039a61069e36600461351d565b6117cd565b6103e76106b136600461351d565b611840565b6104086106c43660046138a2565b611857565b60a7546001600160401b031661056a565b6103e760008051602061430483398151915281565b6103096106fd366004613ad5565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613aff565b61187d565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b6104086107733660046138ce565b611967565b61078b610786366004613b82565b6119e8565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611b29565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df61348e565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613bb5565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613bb5565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611b4e565b60208201516001600160401b03909116604090910152919050565b600080610938611bca565b6109423389611c12565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c2e92505050565b90506109a98161154d565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b0316156109ec576109ec81611c44565b6109f68482611cb3565b610a0b426001600160401b0380861690611cc6565b9150610a178883611cfc565b610a1f61348e565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610a9f91166001613bff565b60ff1681526020018a815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e28914801590610b1f5750805151600360ff90911610155b15610b3d576040516378a0027360e11b815260040160405180910390fd5b600082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b839082613c66565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206142a483398151915290610c2690600019908590613d25565b60405180910390a250965096945050505050565b6000610c4582611d42565b506000908152600760205260409020546001600160a01b031690565b6000610c6c82611da1565b9050806001600160a01b0316836001600160a01b031603610cde5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610cfa5750610cfa81336106fd565b610d6c5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610cd5565b610d768383611e01565b505050565b60006107d182611e6f565b606081610d9281611d42565b600083815260a8602090815260408083206009835292819020549051610dbb9392879101613d3e565b60405160208183030381529060405291505b50919050565b606081600003610df157505060408051602081019091526000815290565b600082815260a860205260409020600281018054610e0e90613bb5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3a90613bb5565b8015610e875780601f10610e5c57610100808354040283529160200191610e87565b820191906000526020600020905b815481529060010190602001808311610e6a57829003601f168201915b50505050509150806001015492505b8215610dcd5750600082815260a860209081526040918290209151610ec2918491600285019101613e4c565b604051602081830303815290604052915080600101549250610e96565b610ee7611bca565b8282610ef38282611ee2565b610efb61348e565b600086815260a860205260409020600301610f20610f196006611f03565b8790611f25565b15610f6157610f356080860160608701613efe565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f6e610f196005611f03565b15610fa457610fa487610f8760608801604089016138f1565b60208501516001600160401b039091166040909101819052611f31565b610fb1610f196003611f03565b15610fe757610fc3602086018661394d565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206142a48339815191528784604051611007929190613d25565b60405180910390a261101c610f196004611f03565b1561106b57600087815260a860209081526040918290206004015461106b926001600160a01b039091169161105591890190890161394d565b896040518060200160405280600081525061200a565b50505050505050565b61107f335b8261203d565b61109b5760405162461bcd60e51b8152600401610cd590613f19565b610d7683838361205f565b6110ae611bca565b816110b96004611f03565b6110c38282611ee2565b600084815260a8602090815260408083206004015481519283019091529181526110fa916001600160a01b0316908590879061200a565b50505050565b6000828152600160208190526040909120015461111c8161215b565b610d768383612165565b60006111318361145d565b82106111935760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610cd5565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b038116331461122c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cd5565b6112368282612187565b5050565b6000805160206143048339815191526112528161215b565b61125a6121a9565b50565b610d768383836040518060200160405280600081525061179b565b61128133611079565b61129d5760405162461bcd60e51b8152600401610cd590613f19565b61125a81611c44565b60006112b1603f5490565b82106113145760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610cd5565b603f828154811061132757611327613f66565b90600052602060002001549050919050565b6000611343611bca565b6000805160206142e483398151915261135b8161215b565b61136361348e565b600085815260a86020526040902060040154611395906001600160401b03600160a01b90910481169086811690611cc6565b6020820180516001600160401b039092166040928301525101516113ba908690611f31565b6020810151604001519250846000805160206142a48339815191526113df6005611f03565b836040516113ee929190613d25565b60405180910390a2505092915050565b611406611bca565b6000805160206142e483398151915261141e8161215b565b611236826121fb565b60006114328161215b565b610d768383612253565b60006114478261229c565b1561145457506000919050565b6107d182611da1565b60006001600160a01b0382166114c75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cd5565b506001600160a01b031660009081526006602052604090205490565b6000805160206143048339815191526114fb8161215b565b61125a6122b8565b600082815260026020526040812061151b90836122f5565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061157061155b83611b4e565b60a7546001600160401b039182169116612301565b421192915050565b611236338383612315565b600054610100900460ff16158080156115a35750600054600160ff909116105b806115bd5750303b1580156115bd575060005460ff166001145b6116205760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cd5565b6000805460ff191660011790558015611643576000805461ff0019166101001790555b61164e600089612165565b61166660008051602061430483398151915288612165565b61167e6000805160206142e483398151915287612165565b6116966000805160206142c483398151915286612165565b6116a08383612253565b6116a9846121fb565b6116b4886000611cb3565b6116bc61348e565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206142a48339815191526117336005611f03565b83604051611742929190613d25565b60405180910390a2508015611791576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117a5338361203d565b6117c15760405162461bcd60e51b8152600401610cd590613f19565b6110fa8484848461200a565b6060816117d981611d42565b60006117e36123e3565b905060008151116118035760405180602001604052806000815250611838565b8061180d30612475565b6118168661248b565b60405160200161182893929190613f7c565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d19061251d565b600082815260016020819052604090912001546118738161215b565b610d768383612187565b6000805160206142c48339815191526118958161215b565b60006118a16006611f03565b905060006118ad61348e565b602081015185151560609091015260005b86811015611791578787828181106118d8576118d8613f66565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461195f57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206142a4833981519152906119569087908690613d25565b60405180910390a25b6001016118be565b61196f611bca565b6000805160206142e48339815191526119878161215b565b61198f61348e565b60208101516001600160401b03841660409091018190526119b1908590611f31565b836000805160206142a48339815191526119cb6005611f03565b836040516119da929190613d25565b60405180910390a250505050565b6000806119f6836007611f25565b15611a0d57506000905063da698a4d60e01b611b21565b6000848152600560205260409020546001600160a01b0316611a3b5750600090506304a3dbd560e51b611b21565b611a4f611a486006611f03565b8490611f25565b8015611a705750611a6e6000805160206142c483398151915286611522565b155b15611a8757506000905063c24b0f3f60e01b611b21565b6000611aa16000805160206142e483398151915287611522565b9050611ab7611ab06005611f03565b8590611f25565b8015611ac1575080155b15611ada57506000915063ed4b948760e01b9050611b21565b611ae5846018611f25565b8015611aff57508080611afd5750611afd8686611c12565b155b15611b175750600091506282b42960e81b9050611b21565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d182612527565b600081815260056020526040812054611b91907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b0316611522565b15611ba457506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611c105760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610cd5565b565b6000611c1e838361203d565b8061151b575061151b8383612567565b6000918252805160209182012090526040902090565b611c4d816125c5565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611c8661348e565b816000805160206142a4833981519152601883604051611ca7929190613d25565b60405180910390a25050565b6073805460010190556112368282612668565b600081841180611cd557508183115b15611ce157508061151b565b611ceb8484612301565b90508181111561151b575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156112365760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031661125a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cd5565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cd5565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e3682611da1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611ed85760006020840160018303810160008052805b828110611ed357828114602e600183035160f81c1480821715611ec857600186848603030180842060205260406000206000526001810187019650505b505060001901611e8b565b505050505b5050600051919050565b600080611ef03385856119e8565b91509150816110fa578060005260046000fd5b6000816006811115611f1757611f17613ee8565b60ff166001901b9050919050565b6000828216151561151b565b600082815260a86020526040902060010154611f4d9082611cfc565b611f568261154d565b15611f7457604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611fb957604051631c21962760e11b815260040160405180910390fd5b611fc161348e565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b61201584848461205f565b61202184848484612801565b6110fa5760405162461bcd60e51b8152600401610cd590613fcc565b60006120488261229c565b15612055575060006107d1565b61151b8383612902565b61206a838383612980565b61207261348e565b600061207e6004611f03565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b031916909117905590506120d16000805160206142c483398151915233611522565b1580156120f65750600083815260a86020526040902060040154600160e01b900460ff165b1561212c57600083815260a860205260409020600401805460ff60e01b19169055612129816121256006611f03565b1790565b90505b826000805160206142a4833981519152828460405161214c929190613d25565b60405180910390a25050505050565b61125a8133612af1565b61216f8282612b4a565b6000828152600260205260409020610d769082612bb5565b6121918282612bca565b6000828152600260205260409020610d769082612c31565b6121b1612c46565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461226082848361401e565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611ca79291906140dd565b60006122a782611b4e565b6001600160401b0316421192915050565b6122c0611bca565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121de3390565b600061151b8383612c8f565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123765760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cd5565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060607480546123f290613bb5565b80601f016020809104026020016040519081016040528092919081815260200182805461241e90613bb5565b801561246b5780601f106124405761010080835404028352916020019161246b565b820191906000526020600020905b81548152906001019060200180831161244e57829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612cb9565b6060600061249883612e54565b60010190506000816001600160401b038111156124b7576124b7613752565b6040519080825280601f01601f1916602001820160405280156124e1576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846124eb57509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061255857506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612f2c565b6000805b82156125bb5750600082815260a860205260409020600401546001600160a01b0390811690841681036125a25760019150506107d1565b600092835260a86020526040909220600101549161256b565b5060009392505050565b60006125d082611da1565b90506125e0816000846001612f51565b6125e982611da1565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126be5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cd5565b6000818152600560205260409020546001600160a01b0316156127235760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cd5565b612731600083836001612f51565b6000818152600560205260409020546001600160a01b0316156127965760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cd5565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156128f757604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061284590339089908890889060040161410c565b6020604051808303816000875af1925050508015612880575060408051601f3d908101601f1916820190925261287d91810190614149565b60015b6128dd573d8080156128ae576040519150601f19603f3d011682016040523d82523d6000602084013e6128b3565b606091505b5080516000036128d55760405162461bcd60e51b8152600401610cd590613fcc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611838565b506001949350505050565b60008061290e83611da1565b9050806001600160a01b0316846001600160a01b0316148061295557506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118385750836001600160a01b031661296e84610c3a565b6001600160a01b031614949350505050565b826001600160a01b031661299382611da1565b6001600160a01b0316146129b95760405162461bcd60e51b8152600401610cd590614166565b6001600160a01b038216612a1b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cd5565b612a288383836001612f51565b826001600160a01b0316612a3b82611da1565b6001600160a01b031614612a615760405162461bcd60e51b8152600401610cd590614166565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612afb8282611522565b61123657612b0881612475565b612b13836020612cb9565b604051602001612b249291906141ab565b60408051601f198184030181529082905262461bcd60e51b8252610cd591600401613715565b612b548282611522565b6112365760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061151b836001600160a01b038416612f5d565b612bd48282611522565b156112365760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061151b836001600160a01b038416612fac565b603c5460ff16611c105760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610cd5565b6000826000018281548110612ca657612ca6613f66565b9060005260206000200154905092915050565b60606000612cc8836002614220565b612cd3906002614237565b6001600160401b03811115612cea57612cea613752565b6040519080825280601f01601f191660200182016040528015612d14576020820181803683370190505b509050600360fc1b81600081518110612d2f57612d2f613f66565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d5e57612d5e613f66565b60200101906001600160f81b031916908160001a9053506000612d82846002614220565b612d8d906001614237565b90505b6001811115612e05576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dc157612dc1613f66565b1a60f81b828281518110612dd757612dd7613f66565b60200101906001600160f81b031916908160001a90535060049490941c93612dfe8161424a565b9050612d90565b50831561151b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cd5565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e935772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612ebf576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612edd57662386f26fc10000830492506010015b6305f5e1008310612ef5576305f5e100830492506008015b6127108310612f0957612710830492506004015b60648310612f1b576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d18261309f565b6110fa848484846130d4565b6000818152600183016020526040812054612fa4575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60008181526001830160205260408120548015613095576000612fd0600183614261565b8554909150600090612fe490600190614261565b905081811461304957600086600001828154811061300457613004613f66565b906000526020600020015490508087600001848154811061302757613027613f66565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061305a5761305a614274565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b6130e084848484613214565b600181111561314f5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610cd5565b816001600160a01b0385166131ab576131a681603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b6131ce565b836001600160a01b0316856001600160a01b0316146131ce576131ce8582613287565b6001600160a01b0384166131ea576131e581613324565b61320d565b846001600160a01b0316846001600160a01b03161461320d5761320d84826133d3565b5050505050565b61322084848484613417565b603c5460ff16156110fa5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610cd5565b600060016132948461145d565b61329e9190614261565b6000838152603e60205260409020549091508082146132f1576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f5460009061333690600190614261565b600083815260406020819052812054603f805493945090928490811061335e5761335e613f66565b9060005260206000200154905080603f838154811061337f5761337f613f66565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133b7576133b7614274565b6001900381819060005260206000200160009055905550505050565b60006133de8361145d565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6134238284614237565b81101561348857600081815260096020526040812080549091906134469061428a565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a3806134808161428a565b915050613419565b506110fa565b60405180604001604052806134c06040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461125a57600080fd5b60006020828403121561351257600080fd5b813561151b816134ea565b60006020828403121561352f57600080fd5b5035919050565b60005b83811015613551578181015183820152602001613539565b50506000910152565b60008151808452613572816020860160208601613536565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135bc61010085018261355a565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061151b6020830184613586565b60008083601f84011261362f57600080fd5b5081356001600160401b0381111561364657600080fd5b60208301915083602082850101111561365e57600080fd5b9250929050565b80356001600160a01b038116811461367c57600080fd5b919050565b80356001600160401b038116811461367c57600080fd5b60008060008060008060a087890312156136b157600080fd5b8635955060208701356001600160401b038111156136ce57600080fd5b6136da89828a0161361d565b90965094506136ed905060408801613665565b92506136fb60608801613665565b915061370960808801613681565b90509295509295509295565b60208152600061151b602083018461355a565b6000806040838503121561373b57600080fd5b61374483613665565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561378257613782613752565b604051601f8501601f19908116603f011681019082821181831017156137aa576137aa613752565b816040528093508581528686860111156137c357600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156137ef57600080fd5b81356001600160401b0381111561380557600080fd5b8201601f8101841361381657600080fd5b61183884823560208401613768565b600080600083850360c081121561383b57600080fd5b84359350602085013592506080603f198201121561385857600080fd5b506040840190509250925092565b60008060006060848603121561387b57600080fd5b61388484613665565b925061389260208501613665565b9150604084013590509250925092565b600080604083850312156138b557600080fd5b823591506138c560208401613665565b90509250929050565b600080604083850312156138e157600080fd5b823591506138c560208401613681565b60006020828403121561390357600080fd5b61151b82613681565b6000806020838503121561391f57600080fd5b82356001600160401b0381111561393557600080fd5b6139418582860161361d565b90969095509350505050565b60006020828403121561395f57600080fd5b61151b82613665565b6000806040838503121561397b57600080fd5b50508035926020909101359150565b8035801515811461367c57600080fd5b600080604083850312156139ad57600080fd5b6139b683613665565b91506138c56020840161398a565b600080600080600080600060c0888a0312156139df57600080fd5b6139e888613665565b96506139f660208901613665565b9550613a0460408901613665565b9450613a1260608901613665565b9350613a2060808901613681565b925060a08801356001600160401b03811115613a3b57600080fd5b613a478a828b0161361d565b989b979a50959850939692959293505050565b60008060008060808587031215613a7057600080fd5b613a7985613665565b9350613a8760208601613665565b92506040850135915060608501356001600160401b03811115613aa957600080fd5b8501601f81018713613aba57600080fd5b613ac987823560208401613768565b91505092959194509250565b60008060408385031215613ae857600080fd5b613af183613665565b91506138c560208401613665565b600080600060408486031215613b1457600080fd5b83356001600160401b0380821115613b2b57600080fd5b818601915086601f830112613b3f57600080fd5b813581811115613b4e57600080fd5b8760208260051b8501011115613b6357600080fd5b602092830195509350613b79918601905061398a565b90509250925092565b600080600060608486031215613b9757600080fd5b613ba084613665565b95602085013595506040909401359392505050565b600181811c90821680613bc957607f821691505b602082108103610dcd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613be9565b601f821115610d7657600081815260208120601f850160051c81016020861015613c3f5750805b601f850160051c820191505b81811015613c5e57828155600101613c4b565b505050505050565b81516001600160401b03811115613c7f57613c7f613752565b613c9381613c8d8454613bb5565b84613c18565b602080601f831160018114613cc85760008415613cb05750858301515b600019600386901b1c1916600185901b178555613c5e565b600085815260208120601f198616915b82811015613cf757888601518255948401946001909101908401613cd8565b5085821015613d155787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006118386040830184613586565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d7b81613bb5565b8061016088015261018085831660008114613d9d5760018114613db757613de8565b60ff1984168983015282151560051b890182019450613de8565b8560005260208060002060005b85811015613ddf5781548c8201860152908901908201613dc4565b8b018401965050505b50505050613e386080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e5f8285838901613536565b8184019150601760f91b8252600160008654613e7a81613bb5565b8184168015613e905760018114613ea957613ed9565b60ff198316878601528115158202870185019350613ed9565b896000528560002060005b83811015613ecf578154898201880152908601908701613eb4565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613f1057600080fd5b61151b8261398a565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613f8e818460208901613536565b845190830190613fa2818360208901613536565b602f60f81b91019081528351613fbf816001840160208801613536565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b0383111561403557614035613752565b614049836140438354613bb5565b83613c18565b6000601f84116001811461407d57600085156140655750838201355b600019600387901b1c1916600186901b17835561320d565b600083815260209020601f19861690835b828110156140ae578685013582556020948501946001909201910161408e565b50868210156140cb5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061413f9083018461355a565b9695505050505050565b60006020828403121561415b57600080fd5b815161151b816134ea565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516141e3816017850160208801613536565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614214816028840160208801613536565b01602801949350505050565b80820281158282048414176107d1576107d1613be9565b808201808211156107d1576107d1613be9565b60008161425957614259613be9565b506000190190565b818103818111156107d1576107d1613be9565b634e487b7160e01b600052603160045260246000fd5b60006001820161429c5761429c613be9565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122012bb66464c9382dcf681ed5fdf4831a8effbd77633aabf6c3d4149f73f54989964736f6c63430008150033", + "nonce": "0x2c958" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2e1f7a8a08c7611cba1799f8cee913ba44d852e467441288d594508b2333730a", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf830000000000000000000000006089166e8aefd218d16b5df621d22608ea0be711", + "nonce": "0x2c959" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0xac6c543c47c074ebff2742518228d83be5d6a77d1e12c3e660aced535e6a4f76", + "0x2e1f7a8a08c7611cba1799f8cee913ba44d852e467441288d594508b2333730a" + ], + "returns": {}, + "timestamp": 1698206412, + "chain": 2021, + "multi": false, + "commit": "6be381f" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698206419.json b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698206419.json new file mode 100644 index 00000000..6287e5ff --- /dev/null +++ b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698206419.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0xac6c543c47c074ebff2742518228d83be5d6a77d1e12c3e660aced535e6a4f76", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x6089166e8AEfd218d16B5DF621d22608eA0BE711", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4bacd6", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614359806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b610309610304366004613500565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c36600461351d565b6107d7565b604051610315919061360a565b61035161034c366004613698565b61092d565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b6040516103159190613715565b6103ba6103b536600461351d565b610c3a565b6040516001600160a01b039091168152602001610315565b6103e76000805160206142e483398151915281565b604051908152602001610315565b610408610403366004613728565b610c61565b005b6103e76104183660046137dd565b610d7b565b61039a61042b36600461351d565b610d86565b6103e761043e36600461351d565b60096020526000908152604090205481565b603f546103e7565b61039a61046636600461351d565b610dd3565b610408610479366004613825565b610edf565b61040861048c366004613866565b611074565b6103e761049f36600461351d565b6000908152600160208190526040909120015490565b6104086104c33660046138a2565b6110a6565b6104086104d63660046138a2565b611100565b6103e76104e9366004613728565b611126565b6103e76000805160206142c483398151915281565b6104086105113660046138a2565b6111bc565b61040861123a565b61040861052c366004613866565b61125d565b61040861053f36600461351d565b611278565b6103e761055236600461351d565b6112a6565b61056a6105653660046138ce565b611339565b6040516001600160401b039091168152602001610315565b6104086105903660046138f1565b6113fe565b6104086105a336600461390c565b611427565b603c5460ff16610309565b6103ba6105c136600461351d565b61143c565b6103e76105d436600461394d565b61145d565b6104086114e3565b6103ba6105ef366004613968565b611503565b6103096106023660046138a2565b611522565b604080518082019091526003815262524e5360e81b602082015261039a565b61030961063436600461351d565b61154d565b6103e7600081565b61040861064f36600461399a565b611578565b6073546103e7565b61040861066a3660046139c4565b611583565b61040861067d366004613a5a565b61179b565b61056a6001600160401b0381565b61039a61069e36600461351d565b6117cd565b6103e76106b136600461351d565b611840565b6104086106c43660046138a2565b611857565b60a7546001600160401b031661056a565b6103e760008051602061430483398151915281565b6103096106fd366004613ad5565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613aff565b61187d565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b6104086107733660046138ce565b611967565b61078b610786366004613b82565b6119e8565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611b29565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df61348e565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613bb5565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613bb5565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611b4e565b60208201516001600160401b03909116604090910152919050565b600080610938611bca565b6109423389611c12565b61095e576040516282b42960e81b815260040160405180910390fd5b61099e8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c2e92505050565b90506109a98161154d565b6109c65760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b0316156109ec576109ec81611c44565b6109f68482611cb3565b610a0b426001600160401b0380861690611cc6565b9150610a178883611cfc565b610a1f61348e565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610a9f91166001613bff565b60ff1681526020018a815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e28914801590610b1f5750805151600360ff90911610155b15610b3d576040516378a0027360e11b815260040160405180910390fd5b600082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610b839082613c66565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206142a483398151915290610c2690600019908590613d25565b60405180910390a250965096945050505050565b6000610c4582611d42565b506000908152600760205260409020546001600160a01b031690565b6000610c6c82611da1565b9050806001600160a01b0316836001600160a01b031603610cde5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610cfa5750610cfa81336106fd565b610d6c5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610cd5565b610d768383611e01565b505050565b60006107d182611e6f565b606081610d9281611d42565b600083815260a8602090815260408083206009835292819020549051610dbb9392879101613d3e565b60405160208183030381529060405291505b50919050565b606081600003610df157505060408051602081019091526000815290565b600082815260a860205260409020600281018054610e0e90613bb5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3a90613bb5565b8015610e875780601f10610e5c57610100808354040283529160200191610e87565b820191906000526020600020905b815481529060010190602001808311610e6a57829003601f168201915b50505050509150806001015492505b8215610dcd5750600082815260a860209081526040918290209151610ec2918491600285019101613e4c565b604051602081830303815290604052915080600101549250610e96565b610ee7611bca565b8282610ef38282611ee2565b610efb61348e565b600086815260a860205260409020600301610f20610f196006611f03565b8790611f25565b15610f6157610f356080860160608701613efe565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f6e610f196005611f03565b15610fa457610fa487610f8760608801604089016138f1565b60208501516001600160401b039091166040909101819052611f31565b610fb1610f196003611f03565b15610fe757610fc3602086018661394d565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206142a48339815191528784604051611007929190613d25565b60405180910390a261101c610f196004611f03565b1561106b57600087815260a860209081526040918290206004015461106b926001600160a01b039091169161105591890190890161394d565b896040518060200160405280600081525061200a565b50505050505050565b61107f335b8261203d565b61109b5760405162461bcd60e51b8152600401610cd590613f19565b610d7683838361205f565b6110ae611bca565b816110b96004611f03565b6110c38282611ee2565b600084815260a8602090815260408083206004015481519283019091529181526110fa916001600160a01b0316908590879061200a565b50505050565b6000828152600160208190526040909120015461111c8161215b565b610d768383612165565b60006111318361145d565b82106111935760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610cd5565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b038116331461122c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cd5565b6112368282612187565b5050565b6000805160206143048339815191526112528161215b565b61125a6121a9565b50565b610d768383836040518060200160405280600081525061179b565b61128133611079565b61129d5760405162461bcd60e51b8152600401610cd590613f19565b61125a81611c44565b60006112b1603f5490565b82106113145760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610cd5565b603f828154811061132757611327613f66565b90600052602060002001549050919050565b6000611343611bca565b6000805160206142e483398151915261135b8161215b565b61136361348e565b600085815260a86020526040902060040154611395906001600160401b03600160a01b90910481169086811690611cc6565b6020820180516001600160401b039092166040928301525101516113ba908690611f31565b6020810151604001519250846000805160206142a48339815191526113df6005611f03565b836040516113ee929190613d25565b60405180910390a2505092915050565b611406611bca565b6000805160206142e483398151915261141e8161215b565b611236826121fb565b60006114328161215b565b610d768383612253565b60006114478261229c565b1561145457506000919050565b6107d182611da1565b60006001600160a01b0382166114c75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cd5565b506001600160a01b031660009081526006602052604090205490565b6000805160206143048339815191526114fb8161215b565b61125a6122b8565b600082815260026020526040812061151b90836122f5565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061157061155b83611b4e565b60a7546001600160401b039182169116612301565b421192915050565b611236338383612315565b600054610100900460ff16158080156115a35750600054600160ff909116105b806115bd5750303b1580156115bd575060005460ff166001145b6116205760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cd5565b6000805460ff191660011790558015611643576000805461ff0019166101001790555b61164e600089612165565b61166660008051602061430483398151915288612165565b61167e6000805160206142e483398151915287612165565b6116966000805160206142c483398151915286612165565b6116a08383612253565b6116a9846121fb565b6116b4886000611cb3565b6116bc61348e565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206142a48339815191526117336005611f03565b83604051611742929190613d25565b60405180910390a2508015611791576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117a5338361203d565b6117c15760405162461bcd60e51b8152600401610cd590613f19565b6110fa8484848461200a565b6060816117d981611d42565b60006117e36123e3565b905060008151116118035760405180602001604052806000815250611838565b8061180d30612475565b6118168661248b565b60405160200161182893929190613f7c565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d19061251d565b600082815260016020819052604090912001546118738161215b565b610d768383612187565b6000805160206142c48339815191526118958161215b565b60006118a16006611f03565b905060006118ad61348e565b602081015185151560609091015260005b86811015611791578787828181106118d8576118d8613f66565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461195f57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206142a4833981519152906119569087908690613d25565b60405180910390a25b6001016118be565b61196f611bca565b6000805160206142e48339815191526119878161215b565b61198f61348e565b60208101516001600160401b03841660409091018190526119b1908590611f31565b836000805160206142a48339815191526119cb6005611f03565b836040516119da929190613d25565b60405180910390a250505050565b6000806119f6836007611f25565b15611a0d57506000905063da698a4d60e01b611b21565b6000848152600560205260409020546001600160a01b0316611a3b5750600090506304a3dbd560e51b611b21565b611a4f611a486006611f03565b8490611f25565b8015611a705750611a6e6000805160206142c483398151915286611522565b155b15611a8757506000905063c24b0f3f60e01b611b21565b6000611aa16000805160206142e483398151915287611522565b9050611ab7611ab06005611f03565b8590611f25565b8015611ac1575080155b15611ada57506000915063ed4b948760e01b9050611b21565b611ae5846018611f25565b8015611aff57508080611afd5750611afd8686611c12565b155b15611b175750600091506282b42960e81b9050611b21565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d182612527565b600081815260056020526040812054611b91907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b0316611522565b15611ba457506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611c105760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610cd5565b565b6000611c1e838361203d565b8061151b575061151b8383612567565b6000918252805160209182012090526040902090565b611c4d816125c5565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611c8661348e565b816000805160206142a4833981519152601883604051611ca7929190613d25565b60405180910390a25050565b6073805460010190556112368282612668565b600081841180611cd557508183115b15611ce157508061151b565b611ceb8484612301565b90508181111561151b575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156112365760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031661125a5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cd5565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cd5565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e3682611da1565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611ed85760006020840160018303810160008052805b828110611ed357828114602e600183035160f81c1480821715611ec857600186848603030180842060205260406000206000526001810187019650505b505060001901611e8b565b505050505b5050600051919050565b600080611ef03385856119e8565b91509150816110fa578060005260046000fd5b6000816006811115611f1757611f17613ee8565b60ff166001901b9050919050565b6000828216151561151b565b600082815260a86020526040902060010154611f4d9082611cfc565b611f568261154d565b15611f7457604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611fb957604051631c21962760e11b815260040160405180910390fd5b611fc161348e565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b61201584848461205f565b61202184848484612801565b6110fa5760405162461bcd60e51b8152600401610cd590613fcc565b60006120488261229c565b15612055575060006107d1565b61151b8383612902565b61206a838383612980565b61207261348e565b600061207e6004611f03565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b031916909117905590506120d16000805160206142c483398151915233611522565b1580156120f65750600083815260a86020526040902060040154600160e01b900460ff165b1561212c57600083815260a860205260409020600401805460ff60e01b19169055612129816121256006611f03565b1790565b90505b826000805160206142a4833981519152828460405161214c929190613d25565b60405180910390a25050505050565b61125a8133612af1565b61216f8282612b4a565b6000828152600260205260409020610d769082612bb5565b6121918282612bca565b6000828152600260205260409020610d769082612c31565b6121b1612c46565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461226082848361401e565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611ca79291906140dd565b60006122a782611b4e565b6001600160401b0316421192915050565b6122c0611bca565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121de3390565b600061151b8383612c8f565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123765760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cd5565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060607480546123f290613bb5565b80601f016020809104026020016040519081016040528092919081815260200182805461241e90613bb5565b801561246b5780601f106124405761010080835404028352916020019161246b565b820191906000526020600020905b81548152906001019060200180831161244e57829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612cb9565b6060600061249883612e54565b60010190506000816001600160401b038111156124b7576124b7613752565b6040519080825280601f01601f1916602001820160405280156124e1576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846124eb57509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061255857506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612f2c565b6000805b82156125bb5750600082815260a860205260409020600401546001600160a01b0390811690841681036125a25760019150506107d1565b600092835260a86020526040909220600101549161256b565b5060009392505050565b60006125d082611da1565b90506125e0816000846001612f51565b6125e982611da1565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126be5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cd5565b6000818152600560205260409020546001600160a01b0316156127235760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cd5565b612731600083836001612f51565b6000818152600560205260409020546001600160a01b0316156127965760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cd5565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b156128f757604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061284590339089908890889060040161410c565b6020604051808303816000875af1925050508015612880575060408051601f3d908101601f1916820190925261287d91810190614149565b60015b6128dd573d8080156128ae576040519150601f19603f3d011682016040523d82523d6000602084013e6128b3565b606091505b5080516000036128d55760405162461bcd60e51b8152600401610cd590613fcc565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611838565b506001949350505050565b60008061290e83611da1565b9050806001600160a01b0316846001600160a01b0316148061295557506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118385750836001600160a01b031661296e84610c3a565b6001600160a01b031614949350505050565b826001600160a01b031661299382611da1565b6001600160a01b0316146129b95760405162461bcd60e51b8152600401610cd590614166565b6001600160a01b038216612a1b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cd5565b612a288383836001612f51565b826001600160a01b0316612a3b82611da1565b6001600160a01b031614612a615760405162461bcd60e51b8152600401610cd590614166565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612afb8282611522565b61123657612b0881612475565b612b13836020612cb9565b604051602001612b249291906141ab565b60408051601f198184030181529082905262461bcd60e51b8252610cd591600401613715565b612b548282611522565b6112365760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061151b836001600160a01b038416612f5d565b612bd48282611522565b156112365760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061151b836001600160a01b038416612fac565b603c5460ff16611c105760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610cd5565b6000826000018281548110612ca657612ca6613f66565b9060005260206000200154905092915050565b60606000612cc8836002614220565b612cd3906002614237565b6001600160401b03811115612cea57612cea613752565b6040519080825280601f01601f191660200182016040528015612d14576020820181803683370190505b509050600360fc1b81600081518110612d2f57612d2f613f66565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d5e57612d5e613f66565b60200101906001600160f81b031916908160001a9053506000612d82846002614220565b612d8d906001614237565b90505b6001811115612e05576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dc157612dc1613f66565b1a60f81b828281518110612dd757612dd7613f66565b60200101906001600160f81b031916908160001a90535060049490941c93612dfe8161424a565b9050612d90565b50831561151b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cd5565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e935772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612ebf576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612edd57662386f26fc10000830492506010015b6305f5e1008310612ef5576305f5e100830492506008015b6127108310612f0957612710830492506004015b60648310612f1b576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d18261309f565b6110fa848484846130d4565b6000818152600183016020526040812054612fa4575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60008181526001830160205260408120548015613095576000612fd0600183614261565b8554909150600090612fe490600190614261565b905081811461304957600086600001828154811061300457613004613f66565b906000526020600020015490508087600001848154811061302757613027613f66565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061305a5761305a614274565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b6130e084848484613214565b600181111561314f5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610cd5565b816001600160a01b0385166131ab576131a681603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b6131ce565b836001600160a01b0316856001600160a01b0316146131ce576131ce8582613287565b6001600160a01b0384166131ea576131e581613324565b61320d565b846001600160a01b0316846001600160a01b03161461320d5761320d84826133d3565b5050505050565b61322084848484613417565b603c5460ff16156110fa5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610cd5565b600060016132948461145d565b61329e9190614261565b6000838152603e60205260409020549091508082146132f1576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f5460009061333690600190614261565b600083815260406020819052812054603f805493945090928490811061335e5761335e613f66565b9060005260206000200154905080603f838154811061337f5761337f613f66565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133b7576133b7614274565b6001900381819060005260206000200160009055905550505050565b60006133de8361145d565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6134238284614237565b81101561348857600081815260096020526040812080549091906134469061428a565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a3806134808161428a565b915050613419565b506110fa565b60405180604001604052806134c06040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461125a57600080fd5b60006020828403121561351257600080fd5b813561151b816134ea565b60006020828403121561352f57600080fd5b5035919050565b60005b83811015613551578181015183820152602001613539565b50506000910152565b60008151808452613572816020860160208601613536565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135bc61010085018261355a565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061151b6020830184613586565b60008083601f84011261362f57600080fd5b5081356001600160401b0381111561364657600080fd5b60208301915083602082850101111561365e57600080fd5b9250929050565b80356001600160a01b038116811461367c57600080fd5b919050565b80356001600160401b038116811461367c57600080fd5b60008060008060008060a087890312156136b157600080fd5b8635955060208701356001600160401b038111156136ce57600080fd5b6136da89828a0161361d565b90965094506136ed905060408801613665565b92506136fb60608801613665565b915061370960808801613681565b90509295509295509295565b60208152600061151b602083018461355a565b6000806040838503121561373b57600080fd5b61374483613665565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561378257613782613752565b604051601f8501601f19908116603f011681019082821181831017156137aa576137aa613752565b816040528093508581528686860111156137c357600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156137ef57600080fd5b81356001600160401b0381111561380557600080fd5b8201601f8101841361381657600080fd5b61183884823560208401613768565b600080600083850360c081121561383b57600080fd5b84359350602085013592506080603f198201121561385857600080fd5b506040840190509250925092565b60008060006060848603121561387b57600080fd5b61388484613665565b925061389260208501613665565b9150604084013590509250925092565b600080604083850312156138b557600080fd5b823591506138c560208401613665565b90509250929050565b600080604083850312156138e157600080fd5b823591506138c560208401613681565b60006020828403121561390357600080fd5b61151b82613681565b6000806020838503121561391f57600080fd5b82356001600160401b0381111561393557600080fd5b6139418582860161361d565b90969095509350505050565b60006020828403121561395f57600080fd5b61151b82613665565b6000806040838503121561397b57600080fd5b50508035926020909101359150565b8035801515811461367c57600080fd5b600080604083850312156139ad57600080fd5b6139b683613665565b91506138c56020840161398a565b600080600080600080600060c0888a0312156139df57600080fd5b6139e888613665565b96506139f660208901613665565b9550613a0460408901613665565b9450613a1260608901613665565b9350613a2060808901613681565b925060a08801356001600160401b03811115613a3b57600080fd5b613a478a828b0161361d565b989b979a50959850939692959293505050565b60008060008060808587031215613a7057600080fd5b613a7985613665565b9350613a8760208601613665565b92506040850135915060608501356001600160401b03811115613aa957600080fd5b8501601f81018713613aba57600080fd5b613ac987823560208401613768565b91505092959194509250565b60008060408385031215613ae857600080fd5b613af183613665565b91506138c560208401613665565b600080600060408486031215613b1457600080fd5b83356001600160401b0380821115613b2b57600080fd5b818601915086601f830112613b3f57600080fd5b813581811115613b4e57600080fd5b8760208260051b8501011115613b6357600080fd5b602092830195509350613b79918601905061398a565b90509250925092565b600080600060608486031215613b9757600080fd5b613ba084613665565b95602085013595506040909401359392505050565b600181811c90821680613bc957607f821691505b602082108103610dcd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613be9565b601f821115610d7657600081815260208120601f850160051c81016020861015613c3f5750805b601f850160051c820191505b81811015613c5e57828155600101613c4b565b505050505050565b81516001600160401b03811115613c7f57613c7f613752565b613c9381613c8d8454613bb5565b84613c18565b602080601f831160018114613cc85760008415613cb05750858301515b600019600386901b1c1916600185901b178555613c5e565b600085815260208120601f198616915b82811015613cf757888601518255948401946001909101908401613cd8565b5085821015613d155787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8281526040602082015260006118386040830184613586565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d7b81613bb5565b8061016088015261018085831660008114613d9d5760018114613db757613de8565b60ff1984168983015282151560051b890182019450613de8565b8560005260208060002060005b85811015613ddf5781548c8201860152908901908201613dc4565b8b018401965050505b50505050613e386080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e5f8285838901613536565b8184019150601760f91b8252600160008654613e7a81613bb5565b8184168015613e905760018114613ea957613ed9565b60ff198316878601528115158202870185019350613ed9565b896000528560002060005b83811015613ecf578154898201880152908601908701613eb4565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613f1057600080fd5b61151b8261398a565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613f8e818460208901613536565b845190830190613fa2818360208901613536565b602f60f81b91019081528351613fbf816001840160208801613536565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b0383111561403557614035613752565b614049836140438354613bb5565b83613c18565b6000601f84116001811461407d57600085156140655750838201355b600019600387901b1c1916600186901b17835561320d565b600083815260209020601f19861690835b828110156140ae578685013582556020948501946001909201910161408e565b50868210156140cb5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061413f9083018461355a565b9695505050505050565b60006020828403121561415b57600080fd5b815161151b816134ea565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516141e3816017850160208801613536565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614214816028840160208801613536565b01602801949350505050565b80820281158282048414176107d1576107d1613be9565b808201808211156107d1576107d1613be9565b60008161425957614259613be9565b506000190190565b818103818111156107d1576107d1613be9565b634e487b7160e01b600052603160045260246000fd5b60006001820161429c5761429c613be9565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122012bb66464c9382dcf681ed5fdf4831a8effbd77633aabf6c3d4149f73f54989964736f6c63430008150033", + "nonce": "0x2c958" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2e1f7a8a08c7611cba1799f8cee913ba44d852e467441288d594508b2333730a", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf830000000000000000000000006089166e8aefd218d16b5df621d22608ea0be711", + "nonce": "0x2c959" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xac6c543c47c074ebff2742518228d83be5d6a77d1e12c3e660aced535e6a4f76", + "transactionIndex": "0x0", + "blockHash": "0xd2fe9b75debadc55833f718ab4f818bf1b4bcd97bd896eaa27703cac84f41148", + "blockNumber": "0x14818a3", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x3a362f", + "gasUsed": "0x3a362f", + "contractAddress": "0x6089166e8AEfd218d16B5DF621d22608eA0BE711", + "logs": [ + { + "address": "0x6089166e8AEfd218d16B5DF621d22608eA0BE711", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0xd2fe9b75debadc55833f718ab4f818bf1b4bcd97bd896eaa27703cac84f41148", + "blockNumber": "0x14818a3", + "transactionHash": "0xac6c543c47c074ebff2742518228d83be5d6a77d1e12c3e660aced535e6a4f76", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000010000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0x2e1f7a8a08c7611cba1799f8cee913ba44d852e467441288d594508b2333730a", + "transactionIndex": "0x1", + "blockHash": "0xd2fe9b75debadc55833f718ab4f818bf1b4bcd97bd896eaa27703cac84f41148", + "blockNumber": "0x14818a3", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x3abb39", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006089166e8aefd218d16b5df621d22608ea0be711" + ], + "data": "0x", + "blockHash": "0xd2fe9b75debadc55833f718ab4f818bf1b4bcd97bd896eaa27703cac84f41148", + "blockNumber": "0x14818a3", + "transactionHash": "0x2e1f7a8a08c7611cba1799f8cee913ba44d852e467441288d594508b2333730a", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400400000000000000000000000000000000000000200000000000000000000000000000000400000000000000000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698206419, + "chain": 2021, + "multi": false, + "commit": "6be381f" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698207700.json b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698207700.json new file mode 100644 index 00000000..c2988049 --- /dev/null +++ b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698207700.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0x335876c94f4108074e3b995b3000fb23be7e00ceaab93532bd67ad6044aefa6c", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x304FaeF4e3A3846A6d691202B6f2ab27E5e11A48", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4bcc91", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614376806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b61030961030436600461351d565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c36600461353a565b6107d7565b6040516103159190613627565b61035161034c3660046136b5565b61094a565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b6040516103159190613732565b6103ba6103b536600461353a565b610c57565b6040516001600160a01b039091168152602001610315565b6103e760008051602061430183398151915281565b604051908152602001610315565b610408610403366004613745565b610c7e565b005b6103e76104183660046137fa565b610d98565b61039a61042b36600461353a565b610da3565b6103e761043e36600461353a565b60096020526000908152604090205481565b603f546103e7565b61039a61046636600461353a565b610df0565b610408610479366004613842565b610efc565b61040861048c366004613883565b611091565b6103e761049f36600461353a565b6000908152600160208190526040909120015490565b6104086104c33660046138bf565b6110c3565b6104086104d63660046138bf565b61111d565b6103e76104e9366004613745565b611143565b6103e76000805160206142e183398151915281565b6104086105113660046138bf565b6111d9565b610408611257565b61040861052c366004613883565b61127a565b61040861053f36600461353a565b611295565b6103e761055236600461353a565b6112c3565b61056a6105653660046138eb565b611356565b6040516001600160401b039091168152602001610315565b61040861059036600461390e565b61141b565b6104086105a3366004613929565b611444565b603c5460ff16610309565b6103ba6105c136600461353a565b611459565b6103e76105d436600461396a565b61147a565b610408611500565b6103ba6105ef366004613985565b611520565b6103096106023660046138bf565b61153f565b604080518082019091526003815262524e5360e81b602082015261039a565b61030961063436600461353a565b61156a565b6103e7600081565b61040861064f3660046139b7565b611595565b6073546103e7565b61040861066a3660046139e1565b6115a0565b61040861067d366004613a77565b6117b8565b61056a6001600160401b0381565b61039a61069e36600461353a565b6117ea565b6103e76106b136600461353a565b61185d565b6104086106c43660046138bf565b611874565b60a7546001600160401b031661056a565b6103e760008051602061432183398151915281565b6103096106fd366004613af2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613b1c565b61189a565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b6104086107733660046138eb565b611984565b61078b610786366004613b9f565b611a05565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611b46565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df6134ab565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613bd2565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611459565b6020808301516001600160a01b0390921691015261092f82611b6b565b60208201516001600160401b03909116604090910152919050565b600080610955611be7565b61095f3389611c2f565b61097b576040516282b42960e81b815260040160405180910390fd5b6109bb8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4b92505050565b90506109c68161156a565b6109e35760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031615610a0957610a0981611c61565b610a138482611cd0565b610a28426001600160401b0380861690611ce3565b9150610a348883611d19565b610a3c6134ab565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610abc91166001613c1c565b60ff1681526020018a815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e28914801590610b3c5750805151600360ff90911610155b15610b5a576040516378a0027360e11b815260040160405180910390fd5b600082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610ba09082613c83565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206142c183398151915290610c4390600019908590613d42565b60405180910390a250965096945050505050565b6000610c6282611d5f565b506000908152600760205260409020546001600160a01b031690565b6000610c8982611dbe565b9050806001600160a01b0316836001600160a01b031603610cfb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610d175750610d1781336106fd565b610d895760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610cf2565b610d938383611e1e565b505050565b60006107d182611e8c565b606081610daf81611d5f565b600083815260a8602090815260408083206009835292819020549051610dd89392879101613d5b565b60405160208183030381529060405291505b50919050565b606081600003610e0e57505060408051602081019091526000815290565b600082815260a860205260409020600281018054610e2b90613bd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5790613bd2565b8015610ea45780601f10610e7957610100808354040283529160200191610ea4565b820191906000526020600020905b815481529060010190602001808311610e8757829003601f168201915b50505050509150806001015492505b8215610dea5750600082815260a860209081526040918290209151610edf918491600285019101613e69565b604051602081830303815290604052915080600101549250610eb3565b610f04611be7565b8282610f108282611eff565b610f186134ab565b600086815260a860205260409020600301610f3d610f366006611f20565b8790611f42565b15610f7e57610f526080860160608701613f1b565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f8b610f366005611f20565b15610fc157610fc187610fa4606088016040890161390e565b60208501516001600160401b039091166040909101819052611f4e565b610fce610f366003611f20565b1561100457610fe0602086018661396a565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206142c18339815191528784604051611024929190613d42565b60405180910390a2611039610f366004611f20565b1561108857600087815260a8602090815260409182902060040154611088926001600160a01b039091169161107291890190890161396a565b8960405180602001604052806000815250612027565b50505050505050565b61109c335b8261205a565b6110b85760405162461bcd60e51b8152600401610cf290613f36565b610d9383838361207c565b6110cb611be7565b816110d66004611f20565b6110e08282611eff565b600084815260a860209081526040808320600401548151928301909152918152611117916001600160a01b03169085908790612027565b50505050565b6000828152600160208190526040909120015461113981612178565b610d938383612182565b600061114e8361147a565b82106111b05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610cf2565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146112495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cf2565b61125382826121a4565b5050565b60008051602061432183398151915261126f81612178565b6112776121c6565b50565b610d93838383604051806020016040528060008152506117b8565b61129e33611096565b6112ba5760405162461bcd60e51b8152600401610cf290613f36565b61127781611c61565b60006112ce603f5490565b82106113315760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610cf2565b603f828154811061134457611344613f83565b90600052602060002001549050919050565b6000611360611be7565b60008051602061430183398151915261137881612178565b6113806134ab565b600085815260a860205260409020600401546113b2906001600160401b03600160a01b90910481169086811690611ce3565b6020820180516001600160401b039092166040928301525101516113d7908690611f4e565b6020810151604001519250846000805160206142c18339815191526113fc6005611f20565b8360405161140b929190613d42565b60405180910390a2505092915050565b611423611be7565b60008051602061430183398151915261143b81612178565b61125382612218565b600061144f81612178565b610d938383612270565b6000611464826122b9565b1561147157506000919050565b6107d182611dbe565b60006001600160a01b0382166114e45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cf2565b506001600160a01b031660009081526006602052604090205490565b60008051602061432183398151915261151881612178565b6112776122d5565b60008281526002602052604081206115389083612312565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061158d61157883611b6b565b60a7546001600160401b03918216911661231e565b421192915050565b611253338383612332565b600054610100900460ff16158080156115c05750600054600160ff909116105b806115da5750303b1580156115da575060005460ff166001145b61163d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cf2565b6000805460ff191660011790558015611660576000805461ff0019166101001790555b61166b600089612182565b61168360008051602061432183398151915288612182565b61169b60008051602061430183398151915287612182565b6116b36000805160206142e183398151915286612182565b6116bd8383612270565b6116c684612218565b6116d1886000611cd0565b6116d96134ab565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206142c18339815191526117506005611f20565b8360405161175f929190613d42565b60405180910390a25080156117ae576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117c2338361205a565b6117de5760405162461bcd60e51b8152600401610cf290613f36565b61111784848484612027565b6060816117f681611d5f565b6000611800612400565b905060008151116118205760405180602001604052806000815250611855565b8061182a30612492565b611833866124a8565b60405160200161184593929190613f99565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d19061253a565b6000828152600160208190526040909120015461189081612178565b610d9383836121a4565b6000805160206142e18339815191526118b281612178565b60006118be6006611f20565b905060006118ca6134ab565b602081015185151560609091015260005b868110156117ae578787828181106118f5576118f5613f83565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461197c57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206142c1833981519152906119739087908690613d42565b60405180910390a25b6001016118db565b61198c611be7565b6000805160206143018339815191526119a481612178565b6119ac6134ab565b60208101516001600160401b03841660409091018190526119ce908590611f4e565b836000805160206142c18339815191526119e86005611f20565b836040516119f7929190613d42565b60405180910390a250505050565b600080611a13836007611f42565b15611a2a57506000905063da698a4d60e01b611b3e565b6000848152600560205260409020546001600160a01b0316611a585750600090506304a3dbd560e51b611b3e565b611a6c611a656006611f20565b8490611f42565b8015611a8d5750611a8b6000805160206142e18339815191528661153f565b155b15611aa457506000905063c24b0f3f60e01b611b3e565b6000611abe6000805160206143018339815191528761153f565b9050611ad4611acd6005611f20565b8590611f42565b8015611ade575080155b15611af757506000915063ed4b948760e01b9050611b3e565b611b02846018611f42565b8015611b1c57508080611b1a5750611b1a8686611c2f565b155b15611b345750600091506282b42960e81b9050611b3e565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d182612544565b600081815260056020526040812054611bae907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b031661153f565b15611bc157506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611c2d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610cf2565b565b6000611c3b838361205a565b8061153857506115388383612584565b6000918252805160209182012090526040902090565b611c6a816125e2565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611ca36134ab565b816000805160206142c1833981519152601883604051611cc4929190613d42565b60405180910390a25050565b6073805460010190556112538282612685565b600081841180611cf257508183115b15611cfe575080611538565b611d08848461231e565b905081811115611538575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156112535760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b03166112775760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e5382611dbe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611ef55760006020840160018303810160008052805b828110611ef057828114602e600183035160f81c1480821715611ee557600186848603030180842060205260406000206000526001810187019650505b505060001901611ea8565b505050505b5050600051919050565b600080611f0d338585611a05565b9150915081611117578060005260046000fd5b6000816006811115611f3457611f34613f05565b60ff166001901b9050919050565b60008282161515611538565b600082815260a86020526040902060010154611f6a9082611d19565b611f738261156a565b15611f9157604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611fd657604051631c21962760e11b815260040160405180910390fd5b611fde6134ab565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b61203284848461207c565b61203e8484848461281e565b6111175760405162461bcd60e51b8152600401610cf290613fe9565b6000612065826122b9565b15612072575060006107d1565b611538838361291f565b61208783838361299d565b61208f6134ab565b600061209b6004611f20565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b031916909117905590506120ee6000805160206142e18339815191523361153f565b1580156121135750600083815260a86020526040902060040154600160e01b900460ff165b1561214957600083815260a860205260409020600401805460ff60e01b19169055612146816121426006611f20565b1790565b90505b826000805160206142c18339815191528284604051612169929190613d42565b60405180910390a25050505050565b6112778133612b0e565b61218c8282612b67565b6000828152600260205260409020610d939082612bd2565b6121ae8282612be7565b6000828152600260205260409020610d939082612c4e565b6121ce612c63565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461227d82848361403b565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611cc49291906140fa565b60006122c482611b6b565b6001600160401b0316421192915050565b6122dd611be7565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121fb3390565b60006115388383612cac565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123935760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cf2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461240f90613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461243b90613bd2565b80156124885780601f1061245d57610100808354040283529160200191612488565b820191906000526020600020905b81548152906001019060200180831161246b57829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612cd6565b606060006124b583612e71565b60010190506000816001600160401b038111156124d4576124d461376f565b6040519080825280601f01601f1916602001820160405280156124fe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461250857509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061257557506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612f49565b6000805b82156125d85750600082815260a860205260409020600401546001600160a01b0390811690841681036125bf5760019150506107d1565b600092835260a860205260409092206001015491612588565b5060009392505050565b60006125ed82611dbe565b90506125fd816000846001612f6e565b61260682611dbe565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126db5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cf2565b6000818152600560205260409020546001600160a01b0316156127405760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b61274e600083836001612f6e565b6000818152600560205260409020546001600160a01b0316156127b35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561291457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612862903390899088908890600401614129565b6020604051808303816000875af192505050801561289d575060408051601f3d908101601f1916820190925261289a91810190614166565b60015b6128fa573d8080156128cb576040519150601f19603f3d011682016040523d82523d6000602084013e6128d0565b606091505b5080516000036128f25760405162461bcd60e51b8152600401610cf290613fe9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611855565b506001949350505050565b60008061292b83611dbe565b9050806001600160a01b0316846001600160a01b0316148061297257506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118555750836001600160a01b031661298b84610c57565b6001600160a01b031614949350505050565b826001600160a01b03166129b082611dbe565b6001600160a01b0316146129d65760405162461bcd60e51b8152600401610cf290614183565b6001600160a01b038216612a385760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf2565b612a458383836001612f6e565b826001600160a01b0316612a5882611dbe565b6001600160a01b031614612a7e5760405162461bcd60e51b8152600401610cf290614183565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612b18828261153f565b61125357612b2581612492565b612b30836020612cd6565b604051602001612b419291906141c8565b60408051601f198184030181529082905262461bcd60e51b8252610cf291600401613732565b612b71828261153f565b6112535760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611538836001600160a01b038416612f7a565b612bf1828261153f565b156112535760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611538836001600160a01b038416612fc9565b603c5460ff16611c2d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610cf2565b6000826000018281548110612cc357612cc3613f83565b9060005260206000200154905092915050565b60606000612ce583600261423d565b612cf0906002614254565b6001600160401b03811115612d0757612d0761376f565b6040519080825280601f01601f191660200182016040528015612d31576020820181803683370190505b509050600360fc1b81600081518110612d4c57612d4c613f83565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d7b57612d7b613f83565b60200101906001600160f81b031916908160001a9053506000612d9f84600261423d565b612daa906001614254565b90505b6001811115612e22576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dde57612dde613f83565b1a60f81b828281518110612df457612df4613f83565b60200101906001600160f81b031916908160001a90535060049490941c93612e1b81614267565b9050612dad565b5083156115385760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cf2565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612eb05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612edc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612efa57662386f26fc10000830492506010015b6305f5e1008310612f12576305f5e100830492506008015b6127108310612f2657612710830492506004015b60648310612f38576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826130bc565b611117848484846130f1565b6000818152600183016020526040812054612fc1575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b600081815260018301602052604081205480156130b2576000612fed60018361427e565b85549091506000906130019060019061427e565b905081811461306657600086600001828154811061302157613021613f83565b906000526020600020015490508087600001848154811061304457613044613f83565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061307757613077614291565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b6130fd84848484613231565b600181111561316c5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610cf2565b816001600160a01b0385166131c8576131c381603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b6131eb565b836001600160a01b0316856001600160a01b0316146131eb576131eb85826132a4565b6001600160a01b0384166132075761320281613341565b61322a565b846001600160a01b0316846001600160a01b03161461322a5761322a84826133f0565b5050505050565b61323d84848484613434565b603c5460ff16156111175760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610cf2565b600060016132b18461147a565b6132bb919061427e565b6000838152603e602052604090205490915080821461330e576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f546000906133539060019061427e565b600083815260406020819052812054603f805493945090928490811061337b5761337b613f83565b9060005260206000200154905080603f838154811061339c5761339c613f83565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133d4576133d4614291565b6001900381819060005260206000200160009055905550505050565b60006133fb8361147a565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6134408284614254565b8110156134a55760008181526009602052604081208054909190613463906142a7565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a38061349d816142a7565b915050613436565b50611117565b60405180604001604052806134dd6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461127757600080fd5b60006020828403121561352f57600080fd5b813561153881613507565b60006020828403121561354c57600080fd5b5035919050565b60005b8381101561356e578181015183820152602001613556565b50506000910152565b6000815180845261358f816020860160208601613553565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135d9610100850182613577565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061153860208301846135a3565b60008083601f84011261364c57600080fd5b5081356001600160401b0381111561366357600080fd5b60208301915083602082850101111561367b57600080fd5b9250929050565b80356001600160a01b038116811461369957600080fd5b919050565b80356001600160401b038116811461369957600080fd5b60008060008060008060a087890312156136ce57600080fd5b8635955060208701356001600160401b038111156136eb57600080fd5b6136f789828a0161363a565b909650945061370a905060408801613682565b925061371860608801613682565b91506137266080880161369e565b90509295509295509295565b6020815260006115386020830184613577565b6000806040838503121561375857600080fd5b61376183613682565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561379f5761379f61376f565b604051601f8501601f19908116603f011681019082821181831017156137c7576137c761376f565b816040528093508581528686860111156137e057600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561380c57600080fd5b81356001600160401b0381111561382257600080fd5b8201601f8101841361383357600080fd5b61185584823560208401613785565b600080600083850360c081121561385857600080fd5b84359350602085013592506080603f198201121561387557600080fd5b506040840190509250925092565b60008060006060848603121561389857600080fd5b6138a184613682565b92506138af60208501613682565b9150604084013590509250925092565b600080604083850312156138d257600080fd5b823591506138e260208401613682565b90509250929050565b600080604083850312156138fe57600080fd5b823591506138e26020840161369e565b60006020828403121561392057600080fd5b6115388261369e565b6000806020838503121561393c57600080fd5b82356001600160401b0381111561395257600080fd5b61395e8582860161363a565b90969095509350505050565b60006020828403121561397c57600080fd5b61153882613682565b6000806040838503121561399857600080fd5b50508035926020909101359150565b8035801515811461369957600080fd5b600080604083850312156139ca57600080fd5b6139d383613682565b91506138e2602084016139a7565b600080600080600080600060c0888a0312156139fc57600080fd5b613a0588613682565b9650613a1360208901613682565b9550613a2160408901613682565b9450613a2f60608901613682565b9350613a3d6080890161369e565b925060a08801356001600160401b03811115613a5857600080fd5b613a648a828b0161363a565b989b979a50959850939692959293505050565b60008060008060808587031215613a8d57600080fd5b613a9685613682565b9350613aa460208601613682565b92506040850135915060608501356001600160401b03811115613ac657600080fd5b8501601f81018713613ad757600080fd5b613ae687823560208401613785565b91505092959194509250565b60008060408385031215613b0557600080fd5b613b0e83613682565b91506138e260208401613682565b600080600060408486031215613b3157600080fd5b83356001600160401b0380821115613b4857600080fd5b818601915086601f830112613b5c57600080fd5b813581811115613b6b57600080fd5b8760208260051b8501011115613b8057600080fd5b602092830195509350613b9691860190506139a7565b90509250925092565b600080600060608486031215613bb457600080fd5b613bbd84613682565b95602085013595506040909401359392505050565b600181811c90821680613be657607f821691505b602082108103610dea57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613c06565b601f821115610d9357600081815260208120601f850160051c81016020861015613c5c5750805b601f850160051c820191505b81811015613c7b57828155600101613c68565b505050505050565b81516001600160401b03811115613c9c57613c9c61376f565b613cb081613caa8454613bd2565b84613c35565b602080601f831160018114613ce55760008415613ccd5750858301515b600019600386901b1c1916600185901b178555613c7b565b600085815260208120601f198616915b82811015613d1457888601518255948401946001909101908401613cf5565b5085821015613d325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b82815260406020820152600061185560408301846135a3565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d9881613bd2565b8061016088015261018085831660008114613dba5760018114613dd457613e05565b60ff1984168983015282151560051b890182019450613e05565b8560005260208060002060005b85811015613dfc5781548c8201860152908901908201613de1565b8b018401965050505b50505050613e556080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e7c8285838901613553565b8184019150601760f91b8252600160008654613e9781613bd2565b8184168015613ead5760018114613ec657613ef6565b60ff198316878601528115158202870185019350613ef6565b896000528560002060005b83811015613eec578154898201880152908601908701613ed1565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613f2d57600080fd5b611538826139a7565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613fab818460208901613553565b845190830190613fbf818360208901613553565b602f60f81b91019081528351613fdc816001840160208801613553565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b038311156140525761405261376f565b614066836140608354613bd2565b83613c35565b6000601f84116001811461409a57600085156140825750838201355b600019600387901b1c1916600186901b17835561322a565b600083815260209020601f19861690835b828110156140cb57868501358255602094850194600190920191016140ab565b50868210156140e85760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061415c90830184613577565b9695505050505050565b60006020828403121561417857600080fd5b815161153881613507565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614200816017850160208801613553565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614231816028840160208801613553565b01602801949350505050565b80820281158282048414176107d1576107d1613c06565b808201808211156107d1576107d1613c06565b60008161427657614276613c06565b506000190190565b818103818111156107d1576107d1613c06565b634e487b7160e01b600052603160045260246000fd5b6000600182016142b9576142b9613c06565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212203af37aa4cc902ad4452525f14c8a6ffb435cb935af71e1d9efae7639ca2d3e8b64736f6c63430008150033", + "nonce": "0x2c95a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xae84a8eb6d9d310ab0dd93f80a877bb927c789082b637bca149c0b18eb4498df", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000304faef4e3a3846a6d691202b6f2ab27e5e11a48", + "nonce": "0x2c95b" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x335876c94f4108074e3b995b3000fb23be7e00ceaab93532bd67ad6044aefa6c", + "0xae84a8eb6d9d310ab0dd93f80a877bb927c789082b637bca149c0b18eb4498df" + ], + "returns": {}, + "timestamp": 1698207700, + "chain": 2021, + "multi": false, + "commit": "ef648ca" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698207707.json b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698207707.json new file mode 100644 index 00000000..35be1498 --- /dev/null +++ b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-1698207707.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x335876c94f4108074e3b995b3000fb23be7e00ceaab93532bd67ad6044aefa6c", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x304FaeF4e3A3846A6d691202B6f2ab27E5e11A48", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4bcc91", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614376806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b61030961030436600461351d565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c36600461353a565b6107d7565b6040516103159190613627565b61035161034c3660046136b5565b61094a565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b6040516103159190613732565b6103ba6103b536600461353a565b610c57565b6040516001600160a01b039091168152602001610315565b6103e760008051602061430183398151915281565b604051908152602001610315565b610408610403366004613745565b610c7e565b005b6103e76104183660046137fa565b610d98565b61039a61042b36600461353a565b610da3565b6103e761043e36600461353a565b60096020526000908152604090205481565b603f546103e7565b61039a61046636600461353a565b610df0565b610408610479366004613842565b610efc565b61040861048c366004613883565b611091565b6103e761049f36600461353a565b6000908152600160208190526040909120015490565b6104086104c33660046138bf565b6110c3565b6104086104d63660046138bf565b61111d565b6103e76104e9366004613745565b611143565b6103e76000805160206142e183398151915281565b6104086105113660046138bf565b6111d9565b610408611257565b61040861052c366004613883565b61127a565b61040861053f36600461353a565b611295565b6103e761055236600461353a565b6112c3565b61056a6105653660046138eb565b611356565b6040516001600160401b039091168152602001610315565b61040861059036600461390e565b61141b565b6104086105a3366004613929565b611444565b603c5460ff16610309565b6103ba6105c136600461353a565b611459565b6103e76105d436600461396a565b61147a565b610408611500565b6103ba6105ef366004613985565b611520565b6103096106023660046138bf565b61153f565b604080518082019091526003815262524e5360e81b602082015261039a565b61030961063436600461353a565b61156a565b6103e7600081565b61040861064f3660046139b7565b611595565b6073546103e7565b61040861066a3660046139e1565b6115a0565b61040861067d366004613a77565b6117b8565b61056a6001600160401b0381565b61039a61069e36600461353a565b6117ea565b6103e76106b136600461353a565b61185d565b6104086106c43660046138bf565b611874565b60a7546001600160401b031661056a565b6103e760008051602061432183398151915281565b6103096106fd366004613af2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613b1c565b61189a565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b6104086107733660046138eb565b611984565b61078b610786366004613b9f565b611a05565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611b46565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df6134ab565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613bd2565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611459565b6020808301516001600160a01b0390921691015261092f82611b6b565b60208201516001600160401b03909116604090910152919050565b600080610955611be7565b61095f3389611c2f565b61097b576040516282b42960e81b815260040160405180910390fd5b6109bb8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4b92505050565b90506109c68161156a565b6109e35760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031615610a0957610a0981611c61565b610a138482611cd0565b610a28426001600160401b0380861690611ce3565b9150610a348883611d19565b610a3c6134ab565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610abc91166001613c1c565b60ff1681526020018a815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e28914801590610b3c5750805151600360ff90911610155b15610b5a576040516378a0027360e11b815260040160405180910390fd5b600082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610ba09082613c83565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206142c183398151915290610c4390600019908590613d42565b60405180910390a250965096945050505050565b6000610c6282611d5f565b506000908152600760205260409020546001600160a01b031690565b6000610c8982611dbe565b9050806001600160a01b0316836001600160a01b031603610cfb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610d175750610d1781336106fd565b610d895760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610cf2565b610d938383611e1e565b505050565b60006107d182611e8c565b606081610daf81611d5f565b600083815260a8602090815260408083206009835292819020549051610dd89392879101613d5b565b60405160208183030381529060405291505b50919050565b606081600003610e0e57505060408051602081019091526000815290565b600082815260a860205260409020600281018054610e2b90613bd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5790613bd2565b8015610ea45780601f10610e7957610100808354040283529160200191610ea4565b820191906000526020600020905b815481529060010190602001808311610e8757829003601f168201915b50505050509150806001015492505b8215610dea5750600082815260a860209081526040918290209151610edf918491600285019101613e69565b604051602081830303815290604052915080600101549250610eb3565b610f04611be7565b8282610f108282611eff565b610f186134ab565b600086815260a860205260409020600301610f3d610f366006611f20565b8790611f42565b15610f7e57610f526080860160608701613f1b565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f8b610f366005611f20565b15610fc157610fc187610fa4606088016040890161390e565b60208501516001600160401b039091166040909101819052611f4e565b610fce610f366003611f20565b1561100457610fe0602086018661396a565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206142c18339815191528784604051611024929190613d42565b60405180910390a2611039610f366004611f20565b1561108857600087815260a8602090815260409182902060040154611088926001600160a01b039091169161107291890190890161396a565b8960405180602001604052806000815250612027565b50505050505050565b61109c335b8261205a565b6110b85760405162461bcd60e51b8152600401610cf290613f36565b610d9383838361207c565b6110cb611be7565b816110d66004611f20565b6110e08282611eff565b600084815260a860209081526040808320600401548151928301909152918152611117916001600160a01b03169085908790612027565b50505050565b6000828152600160208190526040909120015461113981612178565b610d938383612182565b600061114e8361147a565b82106111b05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610cf2565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146112495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cf2565b61125382826121a4565b5050565b60008051602061432183398151915261126f81612178565b6112776121c6565b50565b610d93838383604051806020016040528060008152506117b8565b61129e33611096565b6112ba5760405162461bcd60e51b8152600401610cf290613f36565b61127781611c61565b60006112ce603f5490565b82106113315760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610cf2565b603f828154811061134457611344613f83565b90600052602060002001549050919050565b6000611360611be7565b60008051602061430183398151915261137881612178565b6113806134ab565b600085815260a860205260409020600401546113b2906001600160401b03600160a01b90910481169086811690611ce3565b6020820180516001600160401b039092166040928301525101516113d7908690611f4e565b6020810151604001519250846000805160206142c18339815191526113fc6005611f20565b8360405161140b929190613d42565b60405180910390a2505092915050565b611423611be7565b60008051602061430183398151915261143b81612178565b61125382612218565b600061144f81612178565b610d938383612270565b6000611464826122b9565b1561147157506000919050565b6107d182611dbe565b60006001600160a01b0382166114e45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cf2565b506001600160a01b031660009081526006602052604090205490565b60008051602061432183398151915261151881612178565b6112776122d5565b60008281526002602052604081206115389083612312565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061158d61157883611b6b565b60a7546001600160401b03918216911661231e565b421192915050565b611253338383612332565b600054610100900460ff16158080156115c05750600054600160ff909116105b806115da5750303b1580156115da575060005460ff166001145b61163d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cf2565b6000805460ff191660011790558015611660576000805461ff0019166101001790555b61166b600089612182565b61168360008051602061432183398151915288612182565b61169b60008051602061430183398151915287612182565b6116b36000805160206142e183398151915286612182565b6116bd8383612270565b6116c684612218565b6116d1886000611cd0565b6116d96134ab565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206142c18339815191526117506005611f20565b8360405161175f929190613d42565b60405180910390a25080156117ae576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117c2338361205a565b6117de5760405162461bcd60e51b8152600401610cf290613f36565b61111784848484612027565b6060816117f681611d5f565b6000611800612400565b905060008151116118205760405180602001604052806000815250611855565b8061182a30612492565b611833866124a8565b60405160200161184593929190613f99565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d19061253a565b6000828152600160208190526040909120015461189081612178565b610d9383836121a4565b6000805160206142e18339815191526118b281612178565b60006118be6006611f20565b905060006118ca6134ab565b602081015185151560609091015260005b868110156117ae578787828181106118f5576118f5613f83565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461197c57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206142c1833981519152906119739087908690613d42565b60405180910390a25b6001016118db565b61198c611be7565b6000805160206143018339815191526119a481612178565b6119ac6134ab565b60208101516001600160401b03841660409091018190526119ce908590611f4e565b836000805160206142c18339815191526119e86005611f20565b836040516119f7929190613d42565b60405180910390a250505050565b600080611a13836007611f42565b15611a2a57506000905063da698a4d60e01b611b3e565b6000848152600560205260409020546001600160a01b0316611a585750600090506304a3dbd560e51b611b3e565b611a6c611a656006611f20565b8490611f42565b8015611a8d5750611a8b6000805160206142e18339815191528661153f565b155b15611aa457506000905063c24b0f3f60e01b611b3e565b6000611abe6000805160206143018339815191528761153f565b9050611ad4611acd6005611f20565b8590611f42565b8015611ade575080155b15611af757506000915063ed4b948760e01b9050611b3e565b611b02846018611f42565b8015611b1c57508080611b1a5750611b1a8686611c2f565b155b15611b345750600091506282b42960e81b9050611b3e565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d182612544565b600081815260056020526040812054611bae907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b031661153f565b15611bc157506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611c2d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610cf2565b565b6000611c3b838361205a565b8061153857506115388383612584565b6000918252805160209182012090526040902090565b611c6a816125e2565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611ca36134ab565b816000805160206142c1833981519152601883604051611cc4929190613d42565b60405180910390a25050565b6073805460010190556112538282612685565b600081841180611cf257508183115b15611cfe575080611538565b611d08848461231e565b905081811115611538575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156112535760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b03166112775760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e5382611dbe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611ef55760006020840160018303810160008052805b828110611ef057828114602e600183035160f81c1480821715611ee557600186848603030180842060205260406000206000526001810187019650505b505060001901611ea8565b505050505b5050600051919050565b600080611f0d338585611a05565b9150915081611117578060005260046000fd5b6000816006811115611f3457611f34613f05565b60ff166001901b9050919050565b60008282161515611538565b600082815260a86020526040902060010154611f6a9082611d19565b611f738261156a565b15611f9157604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611fd657604051631c21962760e11b815260040160405180910390fd5b611fde6134ab565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b61203284848461207c565b61203e8484848461281e565b6111175760405162461bcd60e51b8152600401610cf290613fe9565b6000612065826122b9565b15612072575060006107d1565b611538838361291f565b61208783838361299d565b61208f6134ab565b600061209b6004611f20565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b031916909117905590506120ee6000805160206142e18339815191523361153f565b1580156121135750600083815260a86020526040902060040154600160e01b900460ff165b1561214957600083815260a860205260409020600401805460ff60e01b19169055612146816121426006611f20565b1790565b90505b826000805160206142c18339815191528284604051612169929190613d42565b60405180910390a25050505050565b6112778133612b0e565b61218c8282612b67565b6000828152600260205260409020610d939082612bd2565b6121ae8282612be7565b6000828152600260205260409020610d939082612c4e565b6121ce612c63565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461227d82848361403b565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611cc49291906140fa565b60006122c482611b6b565b6001600160401b0316421192915050565b6122dd611be7565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121fb3390565b60006115388383612cac565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123935760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cf2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461240f90613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461243b90613bd2565b80156124885780601f1061245d57610100808354040283529160200191612488565b820191906000526020600020905b81548152906001019060200180831161246b57829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612cd6565b606060006124b583612e71565b60010190506000816001600160401b038111156124d4576124d461376f565b6040519080825280601f01601f1916602001820160405280156124fe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461250857509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061257557506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612f49565b6000805b82156125d85750600082815260a860205260409020600401546001600160a01b0390811690841681036125bf5760019150506107d1565b600092835260a860205260409092206001015491612588565b5060009392505050565b60006125ed82611dbe565b90506125fd816000846001612f6e565b61260682611dbe565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126db5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cf2565b6000818152600560205260409020546001600160a01b0316156127405760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b61274e600083836001612f6e565b6000818152600560205260409020546001600160a01b0316156127b35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561291457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612862903390899088908890600401614129565b6020604051808303816000875af192505050801561289d575060408051601f3d908101601f1916820190925261289a91810190614166565b60015b6128fa573d8080156128cb576040519150601f19603f3d011682016040523d82523d6000602084013e6128d0565b606091505b5080516000036128f25760405162461bcd60e51b8152600401610cf290613fe9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611855565b506001949350505050565b60008061292b83611dbe565b9050806001600160a01b0316846001600160a01b0316148061297257506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118555750836001600160a01b031661298b84610c57565b6001600160a01b031614949350505050565b826001600160a01b03166129b082611dbe565b6001600160a01b0316146129d65760405162461bcd60e51b8152600401610cf290614183565b6001600160a01b038216612a385760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf2565b612a458383836001612f6e565b826001600160a01b0316612a5882611dbe565b6001600160a01b031614612a7e5760405162461bcd60e51b8152600401610cf290614183565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612b18828261153f565b61125357612b2581612492565b612b30836020612cd6565b604051602001612b419291906141c8565b60408051601f198184030181529082905262461bcd60e51b8252610cf291600401613732565b612b71828261153f565b6112535760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611538836001600160a01b038416612f7a565b612bf1828261153f565b156112535760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611538836001600160a01b038416612fc9565b603c5460ff16611c2d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610cf2565b6000826000018281548110612cc357612cc3613f83565b9060005260206000200154905092915050565b60606000612ce583600261423d565b612cf0906002614254565b6001600160401b03811115612d0757612d0761376f565b6040519080825280601f01601f191660200182016040528015612d31576020820181803683370190505b509050600360fc1b81600081518110612d4c57612d4c613f83565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d7b57612d7b613f83565b60200101906001600160f81b031916908160001a9053506000612d9f84600261423d565b612daa906001614254565b90505b6001811115612e22576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dde57612dde613f83565b1a60f81b828281518110612df457612df4613f83565b60200101906001600160f81b031916908160001a90535060049490941c93612e1b81614267565b9050612dad565b5083156115385760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cf2565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612eb05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612edc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612efa57662386f26fc10000830492506010015b6305f5e1008310612f12576305f5e100830492506008015b6127108310612f2657612710830492506004015b60648310612f38576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826130bc565b611117848484846130f1565b6000818152600183016020526040812054612fc1575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b600081815260018301602052604081205480156130b2576000612fed60018361427e565b85549091506000906130019060019061427e565b905081811461306657600086600001828154811061302157613021613f83565b906000526020600020015490508087600001848154811061304457613044613f83565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061307757613077614291565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b6130fd84848484613231565b600181111561316c5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610cf2565b816001600160a01b0385166131c8576131c381603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b6131eb565b836001600160a01b0316856001600160a01b0316146131eb576131eb85826132a4565b6001600160a01b0384166132075761320281613341565b61322a565b846001600160a01b0316846001600160a01b03161461322a5761322a84826133f0565b5050505050565b61323d84848484613434565b603c5460ff16156111175760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610cf2565b600060016132b18461147a565b6132bb919061427e565b6000838152603e602052604090205490915080821461330e576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f546000906133539060019061427e565b600083815260406020819052812054603f805493945090928490811061337b5761337b613f83565b9060005260206000200154905080603f838154811061339c5761339c613f83565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133d4576133d4614291565b6001900381819060005260206000200160009055905550505050565b60006133fb8361147a565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6134408284614254565b8110156134a55760008181526009602052604081208054909190613463906142a7565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a38061349d816142a7565b915050613436565b50611117565b60405180604001604052806134dd6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461127757600080fd5b60006020828403121561352f57600080fd5b813561153881613507565b60006020828403121561354c57600080fd5b5035919050565b60005b8381101561356e578181015183820152602001613556565b50506000910152565b6000815180845261358f816020860160208601613553565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135d9610100850182613577565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061153860208301846135a3565b60008083601f84011261364c57600080fd5b5081356001600160401b0381111561366357600080fd5b60208301915083602082850101111561367b57600080fd5b9250929050565b80356001600160a01b038116811461369957600080fd5b919050565b80356001600160401b038116811461369957600080fd5b60008060008060008060a087890312156136ce57600080fd5b8635955060208701356001600160401b038111156136eb57600080fd5b6136f789828a0161363a565b909650945061370a905060408801613682565b925061371860608801613682565b91506137266080880161369e565b90509295509295509295565b6020815260006115386020830184613577565b6000806040838503121561375857600080fd5b61376183613682565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561379f5761379f61376f565b604051601f8501601f19908116603f011681019082821181831017156137c7576137c761376f565b816040528093508581528686860111156137e057600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561380c57600080fd5b81356001600160401b0381111561382257600080fd5b8201601f8101841361383357600080fd5b61185584823560208401613785565b600080600083850360c081121561385857600080fd5b84359350602085013592506080603f198201121561387557600080fd5b506040840190509250925092565b60008060006060848603121561389857600080fd5b6138a184613682565b92506138af60208501613682565b9150604084013590509250925092565b600080604083850312156138d257600080fd5b823591506138e260208401613682565b90509250929050565b600080604083850312156138fe57600080fd5b823591506138e26020840161369e565b60006020828403121561392057600080fd5b6115388261369e565b6000806020838503121561393c57600080fd5b82356001600160401b0381111561395257600080fd5b61395e8582860161363a565b90969095509350505050565b60006020828403121561397c57600080fd5b61153882613682565b6000806040838503121561399857600080fd5b50508035926020909101359150565b8035801515811461369957600080fd5b600080604083850312156139ca57600080fd5b6139d383613682565b91506138e2602084016139a7565b600080600080600080600060c0888a0312156139fc57600080fd5b613a0588613682565b9650613a1360208901613682565b9550613a2160408901613682565b9450613a2f60608901613682565b9350613a3d6080890161369e565b925060a08801356001600160401b03811115613a5857600080fd5b613a648a828b0161363a565b989b979a50959850939692959293505050565b60008060008060808587031215613a8d57600080fd5b613a9685613682565b9350613aa460208601613682565b92506040850135915060608501356001600160401b03811115613ac657600080fd5b8501601f81018713613ad757600080fd5b613ae687823560208401613785565b91505092959194509250565b60008060408385031215613b0557600080fd5b613b0e83613682565b91506138e260208401613682565b600080600060408486031215613b3157600080fd5b83356001600160401b0380821115613b4857600080fd5b818601915086601f830112613b5c57600080fd5b813581811115613b6b57600080fd5b8760208260051b8501011115613b8057600080fd5b602092830195509350613b9691860190506139a7565b90509250925092565b600080600060608486031215613bb457600080fd5b613bbd84613682565b95602085013595506040909401359392505050565b600181811c90821680613be657607f821691505b602082108103610dea57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613c06565b601f821115610d9357600081815260208120601f850160051c81016020861015613c5c5750805b601f850160051c820191505b81811015613c7b57828155600101613c68565b505050505050565b81516001600160401b03811115613c9c57613c9c61376f565b613cb081613caa8454613bd2565b84613c35565b602080601f831160018114613ce55760008415613ccd5750858301515b600019600386901b1c1916600185901b178555613c7b565b600085815260208120601f198616915b82811015613d1457888601518255948401946001909101908401613cf5565b5085821015613d325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b82815260406020820152600061185560408301846135a3565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d9881613bd2565b8061016088015261018085831660008114613dba5760018114613dd457613e05565b60ff1984168983015282151560051b890182019450613e05565b8560005260208060002060005b85811015613dfc5781548c8201860152908901908201613de1565b8b018401965050505b50505050613e556080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e7c8285838901613553565b8184019150601760f91b8252600160008654613e9781613bd2565b8184168015613ead5760018114613ec657613ef6565b60ff198316878601528115158202870185019350613ef6565b896000528560002060005b83811015613eec578154898201880152908601908701613ed1565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613f2d57600080fd5b611538826139a7565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613fab818460208901613553565b845190830190613fbf818360208901613553565b602f60f81b91019081528351613fdc816001840160208801613553565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b038311156140525761405261376f565b614066836140608354613bd2565b83613c35565b6000601f84116001811461409a57600085156140825750838201355b600019600387901b1c1916600186901b17835561322a565b600083815260209020601f19861690835b828110156140cb57868501358255602094850194600190920191016140ab565b50868210156140e85760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061415c90830184613577565b9695505050505050565b60006020828403121561417857600080fd5b815161153881613507565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614200816017850160208801613553565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614231816028840160208801613553565b01602801949350505050565b80820281158282048414176107d1576107d1613c06565b808201808211156107d1576107d1613c06565b60008161427657614276613c06565b506000190190565b818103818111156107d1576107d1613c06565b634e487b7160e01b600052603160045260246000fd5b6000600182016142b9576142b9613c06565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212203af37aa4cc902ad4452525f14c8a6ffb435cb935af71e1d9efae7639ca2d3e8b64736f6c63430008150033", + "nonce": "0x2c95a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xae84a8eb6d9d310ab0dd93f80a877bb927c789082b637bca149c0b18eb4498df", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000304faef4e3a3846a6d691202b6f2ab27e5e11a48", + "nonce": "0x2c95b" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x335876c94f4108074e3b995b3000fb23be7e00ceaab93532bd67ad6044aefa6c", + "transactionIndex": "0x0", + "blockHash": "0x599819f7cc5f5b429a48de23a3b42e988e9c05e6344e45fb77ad0390dac26919", + "blockNumber": "0x1481a50", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x3a4e97", + "gasUsed": "0x3a4e97", + "contractAddress": "0x304FaeF4e3A3846A6d691202B6f2ab27E5e11A48", + "logs": [ + { + "address": "0x304FaeF4e3A3846A6d691202B6f2ab27E5e11A48", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x599819f7cc5f5b429a48de23a3b42e988e9c05e6344e45fb77ad0390dac26919", + "blockNumber": "0x1481a50", + "transactionHash": "0x335876c94f4108074e3b995b3000fb23be7e00ceaab93532bd67ad6044aefa6c", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000080040000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xae84a8eb6d9d310ab0dd93f80a877bb927c789082b637bca149c0b18eb4498df", + "transactionIndex": "0x1", + "blockHash": "0x599819f7cc5f5b429a48de23a3b42e988e9c05e6344e45fb77ad0390dac26919", + "blockNumber": "0x1481a50", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x3ad3a1", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000304faef4e3a3846a6d691202b6f2ab27e5e11a48" + ], + "data": "0x", + "blockHash": "0x599819f7cc5f5b429a48de23a3b42e988e9c05e6344e45fb77ad0390dac26919", + "blockNumber": "0x1481a50", + "transactionHash": "0xae84a8eb6d9d310ab0dd93f80a877bb927c789082b637bca149c0b18eb4498df", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400400000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698207707, + "chain": 2021, + "multi": false, + "commit": "ef648ca" +} \ No newline at end of file diff --git a/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-latest.json b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-latest.json new file mode 100644 index 00000000..35be1498 --- /dev/null +++ b/broadcast/20231024_UpgradeRNSUnified.s.sol/2021/run-latest.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x335876c94f4108074e3b995b3000fb23be7e00ceaab93532bd67ad6044aefa6c", + "transactionType": "CREATE", + "contractName": "RNSUnified", + "contractAddress": "0x304FaeF4e3A3846A6d691202B6f2ab27E5e11A48", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x4bcc91", + "value": "0x0", + "data": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614376806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b61030961030436600461351d565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c36600461353a565b6107d7565b6040516103159190613627565b61035161034c3660046136b5565b61094a565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b6040516103159190613732565b6103ba6103b536600461353a565b610c57565b6040516001600160a01b039091168152602001610315565b6103e760008051602061430183398151915281565b604051908152602001610315565b610408610403366004613745565b610c7e565b005b6103e76104183660046137fa565b610d98565b61039a61042b36600461353a565b610da3565b6103e761043e36600461353a565b60096020526000908152604090205481565b603f546103e7565b61039a61046636600461353a565b610df0565b610408610479366004613842565b610efc565b61040861048c366004613883565b611091565b6103e761049f36600461353a565b6000908152600160208190526040909120015490565b6104086104c33660046138bf565b6110c3565b6104086104d63660046138bf565b61111d565b6103e76104e9366004613745565b611143565b6103e76000805160206142e183398151915281565b6104086105113660046138bf565b6111d9565b610408611257565b61040861052c366004613883565b61127a565b61040861053f36600461353a565b611295565b6103e761055236600461353a565b6112c3565b61056a6105653660046138eb565b611356565b6040516001600160401b039091168152602001610315565b61040861059036600461390e565b61141b565b6104086105a3366004613929565b611444565b603c5460ff16610309565b6103ba6105c136600461353a565b611459565b6103e76105d436600461396a565b61147a565b610408611500565b6103ba6105ef366004613985565b611520565b6103096106023660046138bf565b61153f565b604080518082019091526003815262524e5360e81b602082015261039a565b61030961063436600461353a565b61156a565b6103e7600081565b61040861064f3660046139b7565b611595565b6073546103e7565b61040861066a3660046139e1565b6115a0565b61040861067d366004613a77565b6117b8565b61056a6001600160401b0381565b61039a61069e36600461353a565b6117ea565b6103e76106b136600461353a565b61185d565b6104086106c43660046138bf565b611874565b60a7546001600160401b031661056a565b6103e760008051602061432183398151915281565b6103096106fd366004613af2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613b1c565b61189a565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b6104086107733660046138eb565b611984565b61078b610786366004613b9f565b611a05565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611b46565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df6134ab565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613bd2565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611459565b6020808301516001600160a01b0390921691015261092f82611b6b565b60208201516001600160401b03909116604090910152919050565b600080610955611be7565b61095f3389611c2f565b61097b576040516282b42960e81b815260040160405180910390fd5b6109bb8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4b92505050565b90506109c68161156a565b6109e35760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031615610a0957610a0981611c61565b610a138482611cd0565b610a28426001600160401b0380861690611ce3565b9150610a348883611d19565b610a3c6134ab565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610abc91166001613c1c565b60ff1681526020018a815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e28914801590610b3c5750805151600360ff90911610155b15610b5a576040516378a0027360e11b815260040160405180910390fd5b600082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610ba09082613c83565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206142c183398151915290610c4390600019908590613d42565b60405180910390a250965096945050505050565b6000610c6282611d5f565b506000908152600760205260409020546001600160a01b031690565b6000610c8982611dbe565b9050806001600160a01b0316836001600160a01b031603610cfb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610d175750610d1781336106fd565b610d895760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610cf2565b610d938383611e1e565b505050565b60006107d182611e8c565b606081610daf81611d5f565b600083815260a8602090815260408083206009835292819020549051610dd89392879101613d5b565b60405160208183030381529060405291505b50919050565b606081600003610e0e57505060408051602081019091526000815290565b600082815260a860205260409020600281018054610e2b90613bd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5790613bd2565b8015610ea45780601f10610e7957610100808354040283529160200191610ea4565b820191906000526020600020905b815481529060010190602001808311610e8757829003601f168201915b50505050509150806001015492505b8215610dea5750600082815260a860209081526040918290209151610edf918491600285019101613e69565b604051602081830303815290604052915080600101549250610eb3565b610f04611be7565b8282610f108282611eff565b610f186134ab565b600086815260a860205260409020600301610f3d610f366006611f20565b8790611f42565b15610f7e57610f526080860160608701613f1b565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f8b610f366005611f20565b15610fc157610fc187610fa4606088016040890161390e565b60208501516001600160401b039091166040909101819052611f4e565b610fce610f366003611f20565b1561100457610fe0602086018661396a565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206142c18339815191528784604051611024929190613d42565b60405180910390a2611039610f366004611f20565b1561108857600087815260a8602090815260409182902060040154611088926001600160a01b039091169161107291890190890161396a565b8960405180602001604052806000815250612027565b50505050505050565b61109c335b8261205a565b6110b85760405162461bcd60e51b8152600401610cf290613f36565b610d9383838361207c565b6110cb611be7565b816110d66004611f20565b6110e08282611eff565b600084815260a860209081526040808320600401548151928301909152918152611117916001600160a01b03169085908790612027565b50505050565b6000828152600160208190526040909120015461113981612178565b610d938383612182565b600061114e8361147a565b82106111b05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610cf2565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146112495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cf2565b61125382826121a4565b5050565b60008051602061432183398151915261126f81612178565b6112776121c6565b50565b610d93838383604051806020016040528060008152506117b8565b61129e33611096565b6112ba5760405162461bcd60e51b8152600401610cf290613f36565b61127781611c61565b60006112ce603f5490565b82106113315760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610cf2565b603f828154811061134457611344613f83565b90600052602060002001549050919050565b6000611360611be7565b60008051602061430183398151915261137881612178565b6113806134ab565b600085815260a860205260409020600401546113b2906001600160401b03600160a01b90910481169086811690611ce3565b6020820180516001600160401b039092166040928301525101516113d7908690611f4e565b6020810151604001519250846000805160206142c18339815191526113fc6005611f20565b8360405161140b929190613d42565b60405180910390a2505092915050565b611423611be7565b60008051602061430183398151915261143b81612178565b61125382612218565b600061144f81612178565b610d938383612270565b6000611464826122b9565b1561147157506000919050565b6107d182611dbe565b60006001600160a01b0382166114e45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cf2565b506001600160a01b031660009081526006602052604090205490565b60008051602061432183398151915261151881612178565b6112776122d5565b60008281526002602052604081206115389083612312565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061158d61157883611b6b565b60a7546001600160401b03918216911661231e565b421192915050565b611253338383612332565b600054610100900460ff16158080156115c05750600054600160ff909116105b806115da5750303b1580156115da575060005460ff166001145b61163d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cf2565b6000805460ff191660011790558015611660576000805461ff0019166101001790555b61166b600089612182565b61168360008051602061432183398151915288612182565b61169b60008051602061430183398151915287612182565b6116b36000805160206142e183398151915286612182565b6116bd8383612270565b6116c684612218565b6116d1886000611cd0565b6116d96134ab565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206142c18339815191526117506005611f20565b8360405161175f929190613d42565b60405180910390a25080156117ae576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117c2338361205a565b6117de5760405162461bcd60e51b8152600401610cf290613f36565b61111784848484612027565b6060816117f681611d5f565b6000611800612400565b905060008151116118205760405180602001604052806000815250611855565b8061182a30612492565b611833866124a8565b60405160200161184593929190613f99565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d19061253a565b6000828152600160208190526040909120015461189081612178565b610d9383836121a4565b6000805160206142e18339815191526118b281612178565b60006118be6006611f20565b905060006118ca6134ab565b602081015185151560609091015260005b868110156117ae578787828181106118f5576118f5613f83565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461197c57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206142c1833981519152906119739087908690613d42565b60405180910390a25b6001016118db565b61198c611be7565b6000805160206143018339815191526119a481612178565b6119ac6134ab565b60208101516001600160401b03841660409091018190526119ce908590611f4e565b836000805160206142c18339815191526119e86005611f20565b836040516119f7929190613d42565b60405180910390a250505050565b600080611a13836007611f42565b15611a2a57506000905063da698a4d60e01b611b3e565b6000848152600560205260409020546001600160a01b0316611a585750600090506304a3dbd560e51b611b3e565b611a6c611a656006611f20565b8490611f42565b8015611a8d5750611a8b6000805160206142e18339815191528661153f565b155b15611aa457506000905063c24b0f3f60e01b611b3e565b6000611abe6000805160206143018339815191528761153f565b9050611ad4611acd6005611f20565b8590611f42565b8015611ade575080155b15611af757506000915063ed4b948760e01b9050611b3e565b611b02846018611f42565b8015611b1c57508080611b1a5750611b1a8686611c2f565b155b15611b345750600091506282b42960e81b9050611b3e565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d182612544565b600081815260056020526040812054611bae907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b031661153f565b15611bc157506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611c2d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610cf2565b565b6000611c3b838361205a565b8061153857506115388383612584565b6000918252805160209182012090526040902090565b611c6a816125e2565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611ca36134ab565b816000805160206142c1833981519152601883604051611cc4929190613d42565b60405180910390a25050565b6073805460010190556112538282612685565b600081841180611cf257508183115b15611cfe575080611538565b611d08848461231e565b905081811115611538575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156112535760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b03166112775760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e5382611dbe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611ef55760006020840160018303810160008052805b828110611ef057828114602e600183035160f81c1480821715611ee557600186848603030180842060205260406000206000526001810187019650505b505060001901611ea8565b505050505b5050600051919050565b600080611f0d338585611a05565b9150915081611117578060005260046000fd5b6000816006811115611f3457611f34613f05565b60ff166001901b9050919050565b60008282161515611538565b600082815260a86020526040902060010154611f6a9082611d19565b611f738261156a565b15611f9157604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611fd657604051631c21962760e11b815260040160405180910390fd5b611fde6134ab565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b61203284848461207c565b61203e8484848461281e565b6111175760405162461bcd60e51b8152600401610cf290613fe9565b6000612065826122b9565b15612072575060006107d1565b611538838361291f565b61208783838361299d565b61208f6134ab565b600061209b6004611f20565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b031916909117905590506120ee6000805160206142e18339815191523361153f565b1580156121135750600083815260a86020526040902060040154600160e01b900460ff165b1561214957600083815260a860205260409020600401805460ff60e01b19169055612146816121426006611f20565b1790565b90505b826000805160206142c18339815191528284604051612169929190613d42565b60405180910390a25050505050565b6112778133612b0e565b61218c8282612b67565b6000828152600260205260409020610d939082612bd2565b6121ae8282612be7565b6000828152600260205260409020610d939082612c4e565b6121ce612c63565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461227d82848361403b565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611cc49291906140fa565b60006122c482611b6b565b6001600160401b0316421192915050565b6122dd611be7565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121fb3390565b60006115388383612cac565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123935760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cf2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461240f90613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461243b90613bd2565b80156124885780601f1061245d57610100808354040283529160200191612488565b820191906000526020600020905b81548152906001019060200180831161246b57829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612cd6565b606060006124b583612e71565b60010190506000816001600160401b038111156124d4576124d461376f565b6040519080825280601f01601f1916602001820160405280156124fe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461250857509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061257557506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612f49565b6000805b82156125d85750600082815260a860205260409020600401546001600160a01b0390811690841681036125bf5760019150506107d1565b600092835260a860205260409092206001015491612588565b5060009392505050565b60006125ed82611dbe565b90506125fd816000846001612f6e565b61260682611dbe565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126db5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cf2565b6000818152600560205260409020546001600160a01b0316156127405760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b61274e600083836001612f6e565b6000818152600560205260409020546001600160a01b0316156127b35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561291457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612862903390899088908890600401614129565b6020604051808303816000875af192505050801561289d575060408051601f3d908101601f1916820190925261289a91810190614166565b60015b6128fa573d8080156128cb576040519150601f19603f3d011682016040523d82523d6000602084013e6128d0565b606091505b5080516000036128f25760405162461bcd60e51b8152600401610cf290613fe9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611855565b506001949350505050565b60008061292b83611dbe565b9050806001600160a01b0316846001600160a01b0316148061297257506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118555750836001600160a01b031661298b84610c57565b6001600160a01b031614949350505050565b826001600160a01b03166129b082611dbe565b6001600160a01b0316146129d65760405162461bcd60e51b8152600401610cf290614183565b6001600160a01b038216612a385760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf2565b612a458383836001612f6e565b826001600160a01b0316612a5882611dbe565b6001600160a01b031614612a7e5760405162461bcd60e51b8152600401610cf290614183565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612b18828261153f565b61125357612b2581612492565b612b30836020612cd6565b604051602001612b419291906141c8565b60408051601f198184030181529082905262461bcd60e51b8252610cf291600401613732565b612b71828261153f565b6112535760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611538836001600160a01b038416612f7a565b612bf1828261153f565b156112535760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611538836001600160a01b038416612fc9565b603c5460ff16611c2d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610cf2565b6000826000018281548110612cc357612cc3613f83565b9060005260206000200154905092915050565b60606000612ce583600261423d565b612cf0906002614254565b6001600160401b03811115612d0757612d0761376f565b6040519080825280601f01601f191660200182016040528015612d31576020820181803683370190505b509050600360fc1b81600081518110612d4c57612d4c613f83565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d7b57612d7b613f83565b60200101906001600160f81b031916908160001a9053506000612d9f84600261423d565b612daa906001614254565b90505b6001811115612e22576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dde57612dde613f83565b1a60f81b828281518110612df457612df4613f83565b60200101906001600160f81b031916908160001a90535060049490941c93612e1b81614267565b9050612dad565b5083156115385760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cf2565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612eb05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612edc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612efa57662386f26fc10000830492506010015b6305f5e1008310612f12576305f5e100830492506008015b6127108310612f2657612710830492506004015b60648310612f38576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826130bc565b611117848484846130f1565b6000818152600183016020526040812054612fc1575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b600081815260018301602052604081205480156130b2576000612fed60018361427e565b85549091506000906130019060019061427e565b905081811461306657600086600001828154811061302157613021613f83565b906000526020600020015490508087600001848154811061304457613044613f83565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061307757613077614291565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b6130fd84848484613231565b600181111561316c5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610cf2565b816001600160a01b0385166131c8576131c381603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b6131eb565b836001600160a01b0316856001600160a01b0316146131eb576131eb85826132a4565b6001600160a01b0384166132075761320281613341565b61322a565b846001600160a01b0316846001600160a01b03161461322a5761322a84826133f0565b5050505050565b61323d84848484613434565b603c5460ff16156111175760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610cf2565b600060016132b18461147a565b6132bb919061427e565b6000838152603e602052604090205490915080821461330e576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f546000906133539060019061427e565b600083815260406020819052812054603f805493945090928490811061337b5761337b613f83565b9060005260206000200154905080603f838154811061339c5761339c613f83565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133d4576133d4614291565b6001900381819060005260206000200160009055905550505050565b60006133fb8361147a565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6134408284614254565b8110156134a55760008181526009602052604081208054909190613463906142a7565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a38061349d816142a7565b915050613436565b50611117565b60405180604001604052806134dd6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461127757600080fd5b60006020828403121561352f57600080fd5b813561153881613507565b60006020828403121561354c57600080fd5b5035919050565b60005b8381101561356e578181015183820152602001613556565b50506000910152565b6000815180845261358f816020860160208601613553565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135d9610100850182613577565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061153860208301846135a3565b60008083601f84011261364c57600080fd5b5081356001600160401b0381111561366357600080fd5b60208301915083602082850101111561367b57600080fd5b9250929050565b80356001600160a01b038116811461369957600080fd5b919050565b80356001600160401b038116811461369957600080fd5b60008060008060008060a087890312156136ce57600080fd5b8635955060208701356001600160401b038111156136eb57600080fd5b6136f789828a0161363a565b909650945061370a905060408801613682565b925061371860608801613682565b91506137266080880161369e565b90509295509295509295565b6020815260006115386020830184613577565b6000806040838503121561375857600080fd5b61376183613682565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561379f5761379f61376f565b604051601f8501601f19908116603f011681019082821181831017156137c7576137c761376f565b816040528093508581528686860111156137e057600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561380c57600080fd5b81356001600160401b0381111561382257600080fd5b8201601f8101841361383357600080fd5b61185584823560208401613785565b600080600083850360c081121561385857600080fd5b84359350602085013592506080603f198201121561387557600080fd5b506040840190509250925092565b60008060006060848603121561389857600080fd5b6138a184613682565b92506138af60208501613682565b9150604084013590509250925092565b600080604083850312156138d257600080fd5b823591506138e260208401613682565b90509250929050565b600080604083850312156138fe57600080fd5b823591506138e26020840161369e565b60006020828403121561392057600080fd5b6115388261369e565b6000806020838503121561393c57600080fd5b82356001600160401b0381111561395257600080fd5b61395e8582860161363a565b90969095509350505050565b60006020828403121561397c57600080fd5b61153882613682565b6000806040838503121561399857600080fd5b50508035926020909101359150565b8035801515811461369957600080fd5b600080604083850312156139ca57600080fd5b6139d383613682565b91506138e2602084016139a7565b600080600080600080600060c0888a0312156139fc57600080fd5b613a0588613682565b9650613a1360208901613682565b9550613a2160408901613682565b9450613a2f60608901613682565b9350613a3d6080890161369e565b925060a08801356001600160401b03811115613a5857600080fd5b613a648a828b0161363a565b989b979a50959850939692959293505050565b60008060008060808587031215613a8d57600080fd5b613a9685613682565b9350613aa460208601613682565b92506040850135915060608501356001600160401b03811115613ac657600080fd5b8501601f81018713613ad757600080fd5b613ae687823560208401613785565b91505092959194509250565b60008060408385031215613b0557600080fd5b613b0e83613682565b91506138e260208401613682565b600080600060408486031215613b3157600080fd5b83356001600160401b0380821115613b4857600080fd5b818601915086601f830112613b5c57600080fd5b813581811115613b6b57600080fd5b8760208260051b8501011115613b8057600080fd5b602092830195509350613b9691860190506139a7565b90509250925092565b600080600060608486031215613bb457600080fd5b613bbd84613682565b95602085013595506040909401359392505050565b600181811c90821680613be657607f821691505b602082108103610dea57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613c06565b601f821115610d9357600081815260208120601f850160051c81016020861015613c5c5750805b601f850160051c820191505b81811015613c7b57828155600101613c68565b505050505050565b81516001600160401b03811115613c9c57613c9c61376f565b613cb081613caa8454613bd2565b84613c35565b602080601f831160018114613ce55760008415613ccd5750858301515b600019600386901b1c1916600185901b178555613c7b565b600085815260208120601f198616915b82811015613d1457888601518255948401946001909101908401613cf5565b5085821015613d325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b82815260406020820152600061185560408301846135a3565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d9881613bd2565b8061016088015261018085831660008114613dba5760018114613dd457613e05565b60ff1984168983015282151560051b890182019450613e05565b8560005260208060002060005b85811015613dfc5781548c8201860152908901908201613de1565b8b018401965050505b50505050613e556080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e7c8285838901613553565b8184019150601760f91b8252600160008654613e9781613bd2565b8184168015613ead5760018114613ec657613ef6565b60ff198316878601528115158202870185019350613ef6565b896000528560002060005b83811015613eec578154898201880152908601908701613ed1565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613f2d57600080fd5b611538826139a7565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613fab818460208901613553565b845190830190613fbf818360208901613553565b602f60f81b91019081528351613fdc816001840160208801613553565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b038311156140525761405261376f565b614066836140608354613bd2565b83613c35565b6000601f84116001811461409a57600085156140825750838201355b600019600387901b1c1916600186901b17835561322a565b600083815260209020601f19861690835b828110156140cb57868501358255602094850194600190920191016140ab565b50868210156140e85760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061415c90830184613577565b9695505050505050565b60006020828403121561417857600080fd5b815161153881613507565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614200816017850160208801613553565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614231816028840160208801613553565b01602801949350505050565b80820281158282048414176107d1576107d1613c06565b808201808211156107d1576107d1613c06565b60008161427657614276613c06565b506000190190565b818103818111156107d1576107d1613c06565b634e487b7160e01b600052603160045260246000fd5b6000600182016142b9576142b9613c06565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212203af37aa4cc902ad4452525f14c8a6ffb435cb935af71e1d9efae7639ca2d3e8b64736f6c63430008150033", + "nonce": "0x2c95a" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xae84a8eb6d9d310ab0dd93f80a877bb927c789082b637bca149c0b18eb4498df", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000304faef4e3a3846a6d691202b6f2ab27e5e11a48", + "nonce": "0x2c95b" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x335876c94f4108074e3b995b3000fb23be7e00ceaab93532bd67ad6044aefa6c", + "transactionIndex": "0x0", + "blockHash": "0x599819f7cc5f5b429a48de23a3b42e988e9c05e6344e45fb77ad0390dac26919", + "blockNumber": "0x1481a50", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x3a4e97", + "gasUsed": "0x3a4e97", + "contractAddress": "0x304FaeF4e3A3846A6d691202B6f2ab27E5e11A48", + "logs": [ + { + "address": "0x304FaeF4e3A3846A6d691202B6f2ab27E5e11A48", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x599819f7cc5f5b429a48de23a3b42e988e9c05e6344e45fb77ad0390dac26919", + "blockNumber": "0x1481a50", + "transactionHash": "0x335876c94f4108074e3b995b3000fb23be7e00ceaab93532bd67ad6044aefa6c", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000080040000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xae84a8eb6d9d310ab0dd93f80a877bb927c789082b637bca149c0b18eb4498df", + "transactionIndex": "0x1", + "blockHash": "0x599819f7cc5f5b429a48de23a3b42e988e9c05e6344e45fb77ad0390dac26919", + "blockNumber": "0x1481a50", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x3ad3a1", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000304faef4e3a3846a6d691202b6f2ab27e5e11a48" + ], + "data": "0x", + "blockHash": "0x599819f7cc5f5b429a48de23a3b42e988e9c05e6344e45fb77ad0390dac26919", + "blockNumber": "0x1481a50", + "transactionHash": "0xae84a8eb6d9d310ab0dd93f80a877bb927c789082b637bca149c0b18eb4498df", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000800000000000000000000000400400000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698207707, + "chain": 2021, + "multi": false, + "commit": "ef648ca" +} \ No newline at end of file diff --git a/broadcast/20231025_UpgradeController.s.sol/2021/run-1698144154.json b/broadcast/20231025_UpgradeController.s.sol/2021/run-1698144154.json new file mode 100644 index 00000000..dc36475a --- /dev/null +++ b/broadcast/20231025_UpgradeController.s.sol/2021/run-1698144154.json @@ -0,0 +1,52 @@ +{ + "transactions": [ + { + "hash": "0x417463687cbd26b8d8115970aebc771f80bbe129d9822c6ae7d68beeb5ed0169", + "transactionType": "CREATE", + "contractName": "RONRegistrarController", + "contractAddress": "0x4d3a1C1C7EAe7E4e68fc0eFF8d721B0140793244", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x35feb7", + "value": "0x0", + "data": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612f6980620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a61024536600461207d565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120a7565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d6103583660046120d5565b610745565b005b34801561036b57600080fd5b5061035d61037a3660046120d5565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b83660046120d5565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612105565b610815565b61035d61043b366004612137565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d6104733660046121b9565b6109d8565b34801561048457600080fd5b5061035d6104933660046122c0565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612450565b610cdd565b3480156104ea57600080fd5b506102a26104f936600461250b565b610e3e565b34801561050a57600080fd5b5061024a6105193660046120d5565b610e5d565b34801561052a57600080fd5b5061024a61053936600461252d565b610e88565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e36600461252d565b610f16565b34801561057f57600080fd5b5061027361058e366004612569565b610fa1565b34801561059f57600080fd5b5061035d6105ae3660046120a7565b611051565b3480156105bf57600080fd5b506103086105ce3660046120a7565b611065565b61035d6105e13660046125af565b61107c565b3480156105f257600080fd5b5061035d6106013660046120d5565b611188565b34801561061257600080fd5b506103086106213660046125af565b6111ad565b34801561063257600080fd5b5061035d61064136600461250b565b611239565b34801561065257600080fd5b50610308600080516020612f1483398151915281565b34801561067457600080fd5b5061035d610683366004612105565b61124e565b34801561069457600080fd5b5061035d6106a33660046120a7565b61127c565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f736600461252d565b6112d5565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f82611312565b92915050565b60008281526002602052604090206001015461076081611347565b61076a8383611351565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611373565b5050565b600080516020612f1483398151915261080a81611347565b610812611395565b50565b600061082081611347565b6107ee826113e7565b61083161143e565b610839611486565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610fa1915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac8234612689565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d592505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610973919061269c565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126e2565b60405180910390a282156109c3576109c333846114df565b6109cb611544565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f148339815191528b61155a565b610aca60008c61155a565b610ad3836113e7565b610adc86611564565b610ae6878961159b565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae81611347565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc612716565b9050602002013581526020019081526020016000206000888885818110610c2557610c25612716565b9050602002016020810190610c3a9190612105565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac95949392919061272c565b60405180910390a250505050505050565b600080516020612f14833981519152610cd581611347565b610812611625565b610ce561143e565b610ced611486565b86610cf781611662565b610d0088610f16565b610d1f57876040516308eee0fd60e31b81526004016107db9190612816565b6000610d2a896112d5565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610da191908101906128e3565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dde575080155b15610e04578a8a8383604051631fc5717160e01b81526004016107db94939291906129c5565b600080610e118d8c61168a565b91509150610e268d8d8d8d8d8d8d89896116e2565b505050505050610e3560018055565b50505050505050565b6000828152600360205260408120610e56908361180c565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e9583611818565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610ece908590600401612816565b602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906129ff565b1592915050565b6000610f2182610e88565b801561073f5750603a546001600160a01b03166396e494e8610f42846112d5565b6040518263ffffffff1660e01b8152600401610f6091815260200190565b602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129ff565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fdc9089908990600401612a1c565b608060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612a77565b8051825192945090925061103091612aac565b9350806020015182602001516110469190612aac565b925050509250929050565b600061105c81611347565b6107ee82611564565b600081815260036020526040812061073f90611906565b61108461143e565b61108c611486565b6000611097896112d5565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110991908101906128e3565b60200151606001511561113157886040516331597a5760e21b81526004016107db9190612816565b60006111438a8a8a8a8a8a8a8a6111ad565b905061114f8882611910565b60008061115c8c8b61168a565b915091506111718c8c8c8b8b8b8b89896116e2565b5050505061117e60018055565b5050505050505050565b6000828152600260205260409020600101546111a381611347565b61076a8383611373565b6000886111b981611662565b83158015906111cf57506001600160a01b038616155b156111ed576040516334fd817160e21b815260040160405180910390fd5b6111f68a6112d5565b89898989898989604051602001611214989796959493929190612b50565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124481611347565b61076a838361159b565b600061125981611347565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b61128461143e565b6037546000828152603e602052604090205442916112a191612aac565b106112c257604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b61081281336119c1565b61135b82826119f4565b600082815260036020526040902061076a9082611a7a565b61137d8282611a8f565b600082815260036020526040902061076a9082611af6565b61139d611b0b565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114d85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114eb8383611b54565b90508061076a57611504836001600160a01b0316611bca565b61150d83611be0565b60405160200161151e929190612bb0565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612816565b603954611484906001600160a01b0316476114df565b6107ee8282611351565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611433565b428111156115bc57604051630b4319e560e21b815260040160405180910390fd5b8181116115dc576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b61162d61143e565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ca3390565b61166b81610f16565b61081257806040516308eee0fd60e31b81526004016107db9190612816565b6000806116978484610fa1565b9092509050348111156116bd5760405163044044a560e21b815260040160405180910390fd5b348181039082146116d2576116d233826114df565b506116db611544565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b815260040161174e959493929190612c2e565b60408051808303816000875af115801561176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117909190612c79565b909250905085156117a7576117a788828989611bf7565b84156117b7576117b78b8b611c75565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117f79493929190612ca7565b60405180910390a35050505050505050505050565b6000610e568383611d0c565b600080600080845190505b808310156118fe57600085848151811061183f5761183f612716565b01602001516001600160f81b0319169050600160ff1b811015611867576001840193506118f2565b600760fd1b6001600160f81b031982161015611888576002840193506118f2565b600f60fc1b6001600160f81b0319821610156118a9576003840193506118f2565b601f60fb1b6001600160f81b0319821610156118ca576004840193506118f2565b603f60fa1b6001600160f81b0319821610156118eb576005840193506118f2565b6006840193505b50600190910190611823565b509392505050565b600061073f825490565b603854826001600160401b03161015611947576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119609042612689565b905060365481101561198857604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119ae5760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b6119cb8282610e5d565b6107ee576119d881611bca565b6119e3836020611d36565b60405160200161151e929190612cdf565b6119fe8282610e5d565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a363390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e56836001600160a01b038416611ed1565b611a998282610e5d565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e56836001600160a01b038416611f20565b60005460ff166114845760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b7e9190612d54565b60006040518083038185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d36565b606061073f82611bef84612013565b600101611d36565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c2790869086908690600401612d70565b6000604051808303816000875af1158015611c46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6e9190810190612d93565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c9d908690602001612e6a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611cc9929190612e92565b6020604051808303816000875af1158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612eb6565b6000826000018281548110611d2357611d23612716565b9060005260206000200154905092915050565b60606000611d45836002612ecf565b611d50906002612aac565b6001600160401b03811115611d6757611d67612343565b6040519080825280601f01601f191660200182016040528015611d91576020820181803683370190505b509050600360fc1b81600081518110611dac57611dac612716565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ddb57611ddb612716565b60200101906001600160f81b031916908160001a9053506000611dff846002612ecf565b611e0a906001612aac565b90505b6001811115611e82576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e3e57611e3e612716565b1a60f81b828281518110611e5457611e54612716565b60200101906001600160f81b031916908160001a90535060049490941c93611e7b81612ee6565b9050611e0d565b508315610e565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f185750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015612009576000611f44600183612689565b8554909150600090611f5890600190612689565b9050818114611fbd576000866000018281548110611f7857611f78612716565b9060005260206000200154905080876000018481548110611f9b57611f9b612716565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fce57611fce612efd565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561202b5760809290921c916010015b604083901c156120405760409290921c916008015b602083901c156120555760209290921c916004015b601083901c1561206a5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561208f57600080fd5b81356001600160e01b031981168114610e5657600080fd5b6000602082840312156120b957600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120e857600080fd5b8235915060208301356120fa816120c0565b809150509250929050565b60006020828403121561211757600080fd5b8135610e56816120c0565b6001600160401b038116811461081257600080fd5b60008060006040848603121561214c57600080fd5b83356001600160401b038082111561216357600080fd5b818601915086601f83011261217757600080fd5b81358181111561218657600080fd5b87602082850101111561219857600080fd5b602092830195509350508401356121ae81612122565b809150509250925092565b6000806000806000806000806000806101408b8d0312156121d957600080fd5b8a356121e4816120c0565b995060208b01356121f4816120c0565b985060408b0135612204816120c0565b975060608b0135965060808b0135955060a08b0135945060c08b0135612229816120c0565b935060e08b0135612239816120c0565b92506101008b013561224a816120c0565b91506101208b013561225b816120c0565b809150509295989b9194979a5092959850565b60008083601f84011261228057600080fd5b5081356001600160401b0381111561229757600080fd5b6020830191508360208260051b85010111156116db57600080fd5b801515811461081257600080fd5b6000806000806000606086880312156122d857600080fd5b85356001600160401b03808211156122ef57600080fd5b6122fb89838a0161226e565b9097509550602088013591508082111561231457600080fd5b506123218882890161226e565b9094509250506040860135612335816122b2565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561237b5761237b612343565b60405290565b604051606081016001600160401b038111828210171561237b5761237b612343565b604051601f8201601f191681016001600160401b03811182821017156123cb576123cb612343565b604052919050565b60006001600160401b038211156123ec576123ec612343565b50601f01601f191660200190565b600082601f83011261240b57600080fd5b813561241e612419826123d3565b6123a3565b81815284602083860101111561243357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561246b57600080fd5b87356001600160401b038082111561248257600080fd5b61248e8b838c016123fa565b985060208a013591506124a0826120c0565b9096506040890135906124b282612122565b9095506060890135906124c4826120c0565b909450608089013590808211156124da57600080fd5b506124e78a828b0161226e565b90945092505060a08801356124fb816122b2565b8091505092959891949750929550565b6000806040838503121561251e57600080fd5b50508035926020909101359150565b60006020828403121561253f57600080fd5b81356001600160401b0381111561255557600080fd5b612561848285016123fa565b949350505050565b6000806040838503121561257c57600080fd5b82356001600160401b0381111561259257600080fd5b61259e858286016123fa565b92505060208301356120fa81612122565b60008060008060008060008060e0898b0312156125cb57600080fd5b88356001600160401b03808211156125e257600080fd5b6125ee8c838d016123fa565b995060208b01359150612600826120c0565b90975060408a01359061261282612122565b90965060608a0135955060808a01359061262b826120c0565b90945060a08a0135908082111561264157600080fd5b5061264e8b828c0161226e565b90945092505060c0890135612662816122b2565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612673565b6000602082840312156126ae57600080fd5b8151610e5681612122565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126f66060830186886126b9565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561274c57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127a957833561278c816120c0565b6001600160a01b0316815292810192600192909201918101612779565b861515604087015293506127bc92505050565b9695505050505050565b60005b838110156127e15781810151838201526020016127c9565b50506000910152565b600081518084526128028160208601602086016127c6565b601f01601f19169290920160200192915050565b602081526000610e5660208301846127ea565b6000612837612419846123d3565b905082815283838301111561284b57600080fd5b610e568360208301846127c6565b60006080828403121561286b57600080fd5b604051608081018181106001600160401b038211171561288d5761288d612343565b806040525080915082516128a0816120c0565b815260208301516128b0816120c0565b602082015260408301516128c381612122565b604082015260608301516128d6816122b2565b6060919091015292915050565b600060208083850312156128f657600080fd5b82516001600160401b038082111561290d57600080fd5b9084019060a0828703121561292157600080fd5b612929612359565b82518281111561293857600080fd5b83016060818903121561294a57600080fd5b612952612381565b815160ff8116811461296357600080fd5b8152818601518682015260408201518481111561297f57600080fd5b82019350601f8401891361299257600080fd5b6129a0898551888701612829565b60408201528252506129b487848601612859565b848201528094505050505092915050565b6080815260006129d860808301876127ea565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a1157600080fd5b8151610e56816122b2565b604081526000612a2f60408301856127ea565b90506001600160401b03831660208301529392505050565b600060408284031215612a5957600080fd5b612a61612359565b9050815181526020820151602082015292915050565b60008060808385031215612a8a57600080fd5b612a948484612a47565b9150612aa38460408501612a47565b90509250929050565b8082018082111561073f5761073f612673565b81835260006020808501808196508560051b810191508460005b87811015612b435782840389528135601e19883603018112612afa57600080fd5b870185810190356001600160401b03811115612b1557600080fd5b803603821315612b2457600080fd5b612b2f8682846126b9565b9a87019a9550505090840190600101612ad9565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b999083018587612abf565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bfb81602a8501602088016127c6565b660103b30b63ab2960cd1b602a918401918201528351612c228160318401602088016127c6565b01603101949350505050565b85815260a060208201526000612c4760a08301876127ea565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c8c57600080fd5b8251612c9781612122565b6020939093015192949293505050565b608081526000612cba60808301876127ea565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d178160178501602088016127c6565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d488160288401602088016127c6565b01602801949350505050565b60008251612d668184602087016127c6565b9190910192915050565b838152604060208201526000612d8a604083018486612abf565b95945050505050565b60006020808385031215612da657600080fd5b82516001600160401b0380821115612dbd57600080fd5b818501915085601f830112612dd157600080fd5b815181811115612de357612de3612343565b8060051b612df28582016123a3565b9182528381018501918581019089841115612e0c57600080fd5b86860192505b83831015612e5d57825185811115612e2a5760008081fd5b8601603f81018b13612e3c5760008081fd5b612e4d8b8983015160408401612829565b8352509186019190860190612e12565b9998505050505050505050565b60008251612e7c8184602087016127c6565b63173937b760e11b920191825250600401919050565b6001600160a01b0383168152604060208201819052600090612561908301846127ea565b600060208284031215612ec857600080fd5b5051919050565b808202811582820484141761073f5761073f612673565b600081612ef557612ef5612673565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122006f996c081232038f43c5a1b7c3f11015820d9739a2a8d4b25e938ce2da8ea5764736f6c63430008150033", + "nonce": "0x2c94f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd14036bea0261c5fc04d833f1a4f269f651a096a59ccf3b2223ad527637f7343", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa7990000000000000000000000004d3a1c1c7eae7e4e68fc0eff8d721b0140793244", + "nonce": "0x2c950" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x417463687cbd26b8d8115970aebc771f80bbe129d9822c6ae7d68beeb5ed0169", + "0xd14036bea0261c5fc04d833f1a4f269f651a096a59ccf3b2223ad527637f7343" + ], + "returns": {}, + "timestamp": 1698144154, + "chain": 2021, + "multi": false, + "commit": "19ed00e" +} \ No newline at end of file diff --git a/broadcast/20231025_UpgradeController.s.sol/2021/run-1698144161.json b/broadcast/20231025_UpgradeController.s.sol/2021/run-1698144161.json new file mode 100644 index 00000000..97a4cce2 --- /dev/null +++ b/broadcast/20231025_UpgradeController.s.sol/2021/run-1698144161.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x417463687cbd26b8d8115970aebc771f80bbe129d9822c6ae7d68beeb5ed0169", + "transactionType": "CREATE", + "contractName": "RONRegistrarController", + "contractAddress": "0x4d3a1C1C7EAe7E4e68fc0eFF8d721B0140793244", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x35feb7", + "value": "0x0", + "data": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612f6980620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a61024536600461207d565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120a7565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d6103583660046120d5565b610745565b005b34801561036b57600080fd5b5061035d61037a3660046120d5565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b83660046120d5565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612105565b610815565b61035d61043b366004612137565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d6104733660046121b9565b6109d8565b34801561048457600080fd5b5061035d6104933660046122c0565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612450565b610cdd565b3480156104ea57600080fd5b506102a26104f936600461250b565b610e3e565b34801561050a57600080fd5b5061024a6105193660046120d5565b610e5d565b34801561052a57600080fd5b5061024a61053936600461252d565b610e88565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e36600461252d565b610f16565b34801561057f57600080fd5b5061027361058e366004612569565b610fa1565b34801561059f57600080fd5b5061035d6105ae3660046120a7565b611051565b3480156105bf57600080fd5b506103086105ce3660046120a7565b611065565b61035d6105e13660046125af565b61107c565b3480156105f257600080fd5b5061035d6106013660046120d5565b611188565b34801561061257600080fd5b506103086106213660046125af565b6111ad565b34801561063257600080fd5b5061035d61064136600461250b565b611239565b34801561065257600080fd5b50610308600080516020612f1483398151915281565b34801561067457600080fd5b5061035d610683366004612105565b61124e565b34801561069457600080fd5b5061035d6106a33660046120a7565b61127c565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f736600461252d565b6112d5565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f82611312565b92915050565b60008281526002602052604090206001015461076081611347565b61076a8383611351565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611373565b5050565b600080516020612f1483398151915261080a81611347565b610812611395565b50565b600061082081611347565b6107ee826113e7565b61083161143e565b610839611486565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610fa1915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac8234612689565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d592505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610973919061269c565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126e2565b60405180910390a282156109c3576109c333846114df565b6109cb611544565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f148339815191528b61155a565b610aca60008c61155a565b610ad3836113e7565b610adc86611564565b610ae6878961159b565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae81611347565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc612716565b9050602002013581526020019081526020016000206000888885818110610c2557610c25612716565b9050602002016020810190610c3a9190612105565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac95949392919061272c565b60405180910390a250505050505050565b600080516020612f14833981519152610cd581611347565b610812611625565b610ce561143e565b610ced611486565b86610cf781611662565b610d0088610f16565b610d1f57876040516308eee0fd60e31b81526004016107db9190612816565b6000610d2a896112d5565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610da191908101906128e3565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dde575080155b15610e04578a8a8383604051631fc5717160e01b81526004016107db94939291906129c5565b600080610e118d8c61168a565b91509150610e268d8d8d8d8d8d8d89896116e2565b505050505050610e3560018055565b50505050505050565b6000828152600360205260408120610e56908361180c565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e9583611818565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610ece908590600401612816565b602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906129ff565b1592915050565b6000610f2182610e88565b801561073f5750603a546001600160a01b03166396e494e8610f42846112d5565b6040518263ffffffff1660e01b8152600401610f6091815260200190565b602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129ff565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fdc9089908990600401612a1c565b608060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612a77565b8051825192945090925061103091612aac565b9350806020015182602001516110469190612aac565b925050509250929050565b600061105c81611347565b6107ee82611564565b600081815260036020526040812061073f90611906565b61108461143e565b61108c611486565b6000611097896112d5565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110991908101906128e3565b60200151606001511561113157886040516331597a5760e21b81526004016107db9190612816565b60006111438a8a8a8a8a8a8a8a6111ad565b905061114f8882611910565b60008061115c8c8b61168a565b915091506111718c8c8c8b8b8b8b89896116e2565b5050505061117e60018055565b5050505050505050565b6000828152600260205260409020600101546111a381611347565b61076a8383611373565b6000886111b981611662565b83158015906111cf57506001600160a01b038616155b156111ed576040516334fd817160e21b815260040160405180910390fd5b6111f68a6112d5565b89898989898989604051602001611214989796959493929190612b50565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124481611347565b61076a838361159b565b600061125981611347565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b61128461143e565b6037546000828152603e602052604090205442916112a191612aac565b106112c257604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b61081281336119c1565b61135b82826119f4565b600082815260036020526040902061076a9082611a7a565b61137d8282611a8f565b600082815260036020526040902061076a9082611af6565b61139d611b0b565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114d85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114eb8383611b54565b90508061076a57611504836001600160a01b0316611bca565b61150d83611be0565b60405160200161151e929190612bb0565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612816565b603954611484906001600160a01b0316476114df565b6107ee8282611351565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611433565b428111156115bc57604051630b4319e560e21b815260040160405180910390fd5b8181116115dc576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b61162d61143e565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ca3390565b61166b81610f16565b61081257806040516308eee0fd60e31b81526004016107db9190612816565b6000806116978484610fa1565b9092509050348111156116bd5760405163044044a560e21b815260040160405180910390fd5b348181039082146116d2576116d233826114df565b506116db611544565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b815260040161174e959493929190612c2e565b60408051808303816000875af115801561176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117909190612c79565b909250905085156117a7576117a788828989611bf7565b84156117b7576117b78b8b611c75565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117f79493929190612ca7565b60405180910390a35050505050505050505050565b6000610e568383611d0c565b600080600080845190505b808310156118fe57600085848151811061183f5761183f612716565b01602001516001600160f81b0319169050600160ff1b811015611867576001840193506118f2565b600760fd1b6001600160f81b031982161015611888576002840193506118f2565b600f60fc1b6001600160f81b0319821610156118a9576003840193506118f2565b601f60fb1b6001600160f81b0319821610156118ca576004840193506118f2565b603f60fa1b6001600160f81b0319821610156118eb576005840193506118f2565b6006840193505b50600190910190611823565b509392505050565b600061073f825490565b603854826001600160401b03161015611947576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119609042612689565b905060365481101561198857604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119ae5760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b6119cb8282610e5d565b6107ee576119d881611bca565b6119e3836020611d36565b60405160200161151e929190612cdf565b6119fe8282610e5d565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a363390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e56836001600160a01b038416611ed1565b611a998282610e5d565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e56836001600160a01b038416611f20565b60005460ff166114845760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b7e9190612d54565b60006040518083038185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d36565b606061073f82611bef84612013565b600101611d36565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c2790869086908690600401612d70565b6000604051808303816000875af1158015611c46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6e9190810190612d93565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c9d908690602001612e6a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611cc9929190612e92565b6020604051808303816000875af1158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612eb6565b6000826000018281548110611d2357611d23612716565b9060005260206000200154905092915050565b60606000611d45836002612ecf565b611d50906002612aac565b6001600160401b03811115611d6757611d67612343565b6040519080825280601f01601f191660200182016040528015611d91576020820181803683370190505b509050600360fc1b81600081518110611dac57611dac612716565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ddb57611ddb612716565b60200101906001600160f81b031916908160001a9053506000611dff846002612ecf565b611e0a906001612aac565b90505b6001811115611e82576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e3e57611e3e612716565b1a60f81b828281518110611e5457611e54612716565b60200101906001600160f81b031916908160001a90535060049490941c93611e7b81612ee6565b9050611e0d565b508315610e565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f185750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015612009576000611f44600183612689565b8554909150600090611f5890600190612689565b9050818114611fbd576000866000018281548110611f7857611f78612716565b9060005260206000200154905080876000018481548110611f9b57611f9b612716565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fce57611fce612efd565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561202b5760809290921c916010015b604083901c156120405760409290921c916008015b602083901c156120555760209290921c916004015b601083901c1561206a5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561208f57600080fd5b81356001600160e01b031981168114610e5657600080fd5b6000602082840312156120b957600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120e857600080fd5b8235915060208301356120fa816120c0565b809150509250929050565b60006020828403121561211757600080fd5b8135610e56816120c0565b6001600160401b038116811461081257600080fd5b60008060006040848603121561214c57600080fd5b83356001600160401b038082111561216357600080fd5b818601915086601f83011261217757600080fd5b81358181111561218657600080fd5b87602082850101111561219857600080fd5b602092830195509350508401356121ae81612122565b809150509250925092565b6000806000806000806000806000806101408b8d0312156121d957600080fd5b8a356121e4816120c0565b995060208b01356121f4816120c0565b985060408b0135612204816120c0565b975060608b0135965060808b0135955060a08b0135945060c08b0135612229816120c0565b935060e08b0135612239816120c0565b92506101008b013561224a816120c0565b91506101208b013561225b816120c0565b809150509295989b9194979a5092959850565b60008083601f84011261228057600080fd5b5081356001600160401b0381111561229757600080fd5b6020830191508360208260051b85010111156116db57600080fd5b801515811461081257600080fd5b6000806000806000606086880312156122d857600080fd5b85356001600160401b03808211156122ef57600080fd5b6122fb89838a0161226e565b9097509550602088013591508082111561231457600080fd5b506123218882890161226e565b9094509250506040860135612335816122b2565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561237b5761237b612343565b60405290565b604051606081016001600160401b038111828210171561237b5761237b612343565b604051601f8201601f191681016001600160401b03811182821017156123cb576123cb612343565b604052919050565b60006001600160401b038211156123ec576123ec612343565b50601f01601f191660200190565b600082601f83011261240b57600080fd5b813561241e612419826123d3565b6123a3565b81815284602083860101111561243357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561246b57600080fd5b87356001600160401b038082111561248257600080fd5b61248e8b838c016123fa565b985060208a013591506124a0826120c0565b9096506040890135906124b282612122565b9095506060890135906124c4826120c0565b909450608089013590808211156124da57600080fd5b506124e78a828b0161226e565b90945092505060a08801356124fb816122b2565b8091505092959891949750929550565b6000806040838503121561251e57600080fd5b50508035926020909101359150565b60006020828403121561253f57600080fd5b81356001600160401b0381111561255557600080fd5b612561848285016123fa565b949350505050565b6000806040838503121561257c57600080fd5b82356001600160401b0381111561259257600080fd5b61259e858286016123fa565b92505060208301356120fa81612122565b60008060008060008060008060e0898b0312156125cb57600080fd5b88356001600160401b03808211156125e257600080fd5b6125ee8c838d016123fa565b995060208b01359150612600826120c0565b90975060408a01359061261282612122565b90965060608a0135955060808a01359061262b826120c0565b90945060a08a0135908082111561264157600080fd5b5061264e8b828c0161226e565b90945092505060c0890135612662816122b2565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612673565b6000602082840312156126ae57600080fd5b8151610e5681612122565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126f66060830186886126b9565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561274c57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127a957833561278c816120c0565b6001600160a01b0316815292810192600192909201918101612779565b861515604087015293506127bc92505050565b9695505050505050565b60005b838110156127e15781810151838201526020016127c9565b50506000910152565b600081518084526128028160208601602086016127c6565b601f01601f19169290920160200192915050565b602081526000610e5660208301846127ea565b6000612837612419846123d3565b905082815283838301111561284b57600080fd5b610e568360208301846127c6565b60006080828403121561286b57600080fd5b604051608081018181106001600160401b038211171561288d5761288d612343565b806040525080915082516128a0816120c0565b815260208301516128b0816120c0565b602082015260408301516128c381612122565b604082015260608301516128d6816122b2565b6060919091015292915050565b600060208083850312156128f657600080fd5b82516001600160401b038082111561290d57600080fd5b9084019060a0828703121561292157600080fd5b612929612359565b82518281111561293857600080fd5b83016060818903121561294a57600080fd5b612952612381565b815160ff8116811461296357600080fd5b8152818601518682015260408201518481111561297f57600080fd5b82019350601f8401891361299257600080fd5b6129a0898551888701612829565b60408201528252506129b487848601612859565b848201528094505050505092915050565b6080815260006129d860808301876127ea565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a1157600080fd5b8151610e56816122b2565b604081526000612a2f60408301856127ea565b90506001600160401b03831660208301529392505050565b600060408284031215612a5957600080fd5b612a61612359565b9050815181526020820151602082015292915050565b60008060808385031215612a8a57600080fd5b612a948484612a47565b9150612aa38460408501612a47565b90509250929050565b8082018082111561073f5761073f612673565b81835260006020808501808196508560051b810191508460005b87811015612b435782840389528135601e19883603018112612afa57600080fd5b870185810190356001600160401b03811115612b1557600080fd5b803603821315612b2457600080fd5b612b2f8682846126b9565b9a87019a9550505090840190600101612ad9565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b999083018587612abf565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bfb81602a8501602088016127c6565b660103b30b63ab2960cd1b602a918401918201528351612c228160318401602088016127c6565b01603101949350505050565b85815260a060208201526000612c4760a08301876127ea565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c8c57600080fd5b8251612c9781612122565b6020939093015192949293505050565b608081526000612cba60808301876127ea565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d178160178501602088016127c6565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d488160288401602088016127c6565b01602801949350505050565b60008251612d668184602087016127c6565b9190910192915050565b838152604060208201526000612d8a604083018486612abf565b95945050505050565b60006020808385031215612da657600080fd5b82516001600160401b0380821115612dbd57600080fd5b818501915085601f830112612dd157600080fd5b815181811115612de357612de3612343565b8060051b612df28582016123a3565b9182528381018501918581019089841115612e0c57600080fd5b86860192505b83831015612e5d57825185811115612e2a5760008081fd5b8601603f81018b13612e3c5760008081fd5b612e4d8b8983015160408401612829565b8352509186019190860190612e12565b9998505050505050505050565b60008251612e7c8184602087016127c6565b63173937b760e11b920191825250600401919050565b6001600160a01b0383168152604060208201819052600090612561908301846127ea565b600060208284031215612ec857600080fd5b5051919050565b808202811582820484141761073f5761073f612673565b600081612ef557612ef5612673565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122006f996c081232038f43c5a1b7c3f11015820d9739a2a8d4b25e938ce2da8ea5764736f6c63430008150033", + "nonce": "0x2c94f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd14036bea0261c5fc04d833f1a4f269f651a096a59ccf3b2223ad527637f7343", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa7990000000000000000000000004d3a1c1c7eae7e4e68fc0eff8d721b0140793244", + "nonce": "0x2c950" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x417463687cbd26b8d8115970aebc771f80bbe129d9822c6ae7d68beeb5ed0169", + "transactionIndex": "0x0", + "blockHash": "0x7dcbc9e48241710a0541d5503c350880af304e162d082977a1f4fd19876a5edf", + "blockNumber": "0x147c792", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x2988dc", + "gasUsed": "0x2988dc", + "contractAddress": "0x4d3a1C1C7EAe7E4e68fc0eFF8d721B0140793244", + "logs": [ + { + "address": "0x4d3a1C1C7EAe7E4e68fc0eFF8d721B0140793244", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x7dcbc9e48241710a0541d5503c350880af304e162d082977a1f4fd19876a5edf", + "blockNumber": "0x147c792", + "transactionHash": "0x417463687cbd26b8d8115970aebc771f80bbe129d9822c6ae7d68beeb5ed0169", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000400000000000000000000000400000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xd14036bea0261c5fc04d833f1a4f269f651a096a59ccf3b2223ad527637f7343", + "transactionIndex": "0x1", + "blockHash": "0x7dcbc9e48241710a0541d5503c350880af304e162d082977a1f4fd19876a5edf", + "blockNumber": "0x147c792", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x2a0de6", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000004d3a1c1c7eae7e4e68fc0eff8d721b0140793244" + ], + "data": "0x", + "blockHash": "0x7dcbc9e48241710a0541d5503c350880af304e162d082977a1f4fd19876a5edf", + "blockNumber": "0x147c792", + "transactionHash": "0xd14036bea0261c5fc04d833f1a4f269f651a096a59ccf3b2223ad527637f7343", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000020000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000020000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698144161, + "chain": 2021, + "multi": false, + "commit": "19ed00e" +} \ No newline at end of file diff --git a/broadcast/20231025_UpgradeController.s.sol/2021/run-latest.json b/broadcast/20231025_UpgradeController.s.sol/2021/run-latest.json new file mode 100644 index 00000000..97a4cce2 --- /dev/null +++ b/broadcast/20231025_UpgradeController.s.sol/2021/run-latest.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0x417463687cbd26b8d8115970aebc771f80bbe129d9822c6ae7d68beeb5ed0169", + "transactionType": "CREATE", + "contractName": "RONRegistrarController", + "contractAddress": "0x4d3a1C1C7EAe7E4e68fc0eFF8d721B0140793244", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "gas": "0x35feb7", + "value": "0x0", + "data": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612f6980620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a61024536600461207d565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120a7565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d6103583660046120d5565b610745565b005b34801561036b57600080fd5b5061035d61037a3660046120d5565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b83660046120d5565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612105565b610815565b61035d61043b366004612137565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d6104733660046121b9565b6109d8565b34801561048457600080fd5b5061035d6104933660046122c0565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612450565b610cdd565b3480156104ea57600080fd5b506102a26104f936600461250b565b610e3e565b34801561050a57600080fd5b5061024a6105193660046120d5565b610e5d565b34801561052a57600080fd5b5061024a61053936600461252d565b610e88565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e36600461252d565b610f16565b34801561057f57600080fd5b5061027361058e366004612569565b610fa1565b34801561059f57600080fd5b5061035d6105ae3660046120a7565b611051565b3480156105bf57600080fd5b506103086105ce3660046120a7565b611065565b61035d6105e13660046125af565b61107c565b3480156105f257600080fd5b5061035d6106013660046120d5565b611188565b34801561061257600080fd5b506103086106213660046125af565b6111ad565b34801561063257600080fd5b5061035d61064136600461250b565b611239565b34801561065257600080fd5b50610308600080516020612f1483398151915281565b34801561067457600080fd5b5061035d610683366004612105565b61124e565b34801561069457600080fd5b5061035d6106a33660046120a7565b61127c565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f736600461252d565b6112d5565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f82611312565b92915050565b60008281526002602052604090206001015461076081611347565b61076a8383611351565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611373565b5050565b600080516020612f1483398151915261080a81611347565b610812611395565b50565b600061082081611347565b6107ee826113e7565b61083161143e565b610839611486565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610fa1915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac8234612689565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d592505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610973919061269c565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126e2565b60405180910390a282156109c3576109c333846114df565b6109cb611544565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f148339815191528b61155a565b610aca60008c61155a565b610ad3836113e7565b610adc86611564565b610ae6878961159b565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae81611347565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc612716565b9050602002013581526020019081526020016000206000888885818110610c2557610c25612716565b9050602002016020810190610c3a9190612105565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac95949392919061272c565b60405180910390a250505050505050565b600080516020612f14833981519152610cd581611347565b610812611625565b610ce561143e565b610ced611486565b86610cf781611662565b610d0088610f16565b610d1f57876040516308eee0fd60e31b81526004016107db9190612816565b6000610d2a896112d5565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610da191908101906128e3565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dde575080155b15610e04578a8a8383604051631fc5717160e01b81526004016107db94939291906129c5565b600080610e118d8c61168a565b91509150610e268d8d8d8d8d8d8d89896116e2565b505050505050610e3560018055565b50505050505050565b6000828152600360205260408120610e56908361180c565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e9583611818565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610ece908590600401612816565b602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906129ff565b1592915050565b6000610f2182610e88565b801561073f5750603a546001600160a01b03166396e494e8610f42846112d5565b6040518263ffffffff1660e01b8152600401610f6091815260200190565b602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129ff565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fdc9089908990600401612a1c565b608060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612a77565b8051825192945090925061103091612aac565b9350806020015182602001516110469190612aac565b925050509250929050565b600061105c81611347565b6107ee82611564565b600081815260036020526040812061073f90611906565b61108461143e565b61108c611486565b6000611097896112d5565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110991908101906128e3565b60200151606001511561113157886040516331597a5760e21b81526004016107db9190612816565b60006111438a8a8a8a8a8a8a8a6111ad565b905061114f8882611910565b60008061115c8c8b61168a565b915091506111718c8c8c8b8b8b8b89896116e2565b5050505061117e60018055565b5050505050505050565b6000828152600260205260409020600101546111a381611347565b61076a8383611373565b6000886111b981611662565b83158015906111cf57506001600160a01b038616155b156111ed576040516334fd817160e21b815260040160405180910390fd5b6111f68a6112d5565b89898989898989604051602001611214989796959493929190612b50565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124481611347565b61076a838361159b565b600061125981611347565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b61128461143e565b6037546000828152603e602052604090205442916112a191612aac565b106112c257604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b61081281336119c1565b61135b82826119f4565b600082815260036020526040902061076a9082611a7a565b61137d8282611a8f565b600082815260036020526040902061076a9082611af6565b61139d611b0b565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114d85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114eb8383611b54565b90508061076a57611504836001600160a01b0316611bca565b61150d83611be0565b60405160200161151e929190612bb0565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612816565b603954611484906001600160a01b0316476114df565b6107ee8282611351565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611433565b428111156115bc57604051630b4319e560e21b815260040160405180910390fd5b8181116115dc576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b61162d61143e565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ca3390565b61166b81610f16565b61081257806040516308eee0fd60e31b81526004016107db9190612816565b6000806116978484610fa1565b9092509050348111156116bd5760405163044044a560e21b815260040160405180910390fd5b348181039082146116d2576116d233826114df565b506116db611544565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b815260040161174e959493929190612c2e565b60408051808303816000875af115801561176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117909190612c79565b909250905085156117a7576117a788828989611bf7565b84156117b7576117b78b8b611c75565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117f79493929190612ca7565b60405180910390a35050505050505050505050565b6000610e568383611d0c565b600080600080845190505b808310156118fe57600085848151811061183f5761183f612716565b01602001516001600160f81b0319169050600160ff1b811015611867576001840193506118f2565b600760fd1b6001600160f81b031982161015611888576002840193506118f2565b600f60fc1b6001600160f81b0319821610156118a9576003840193506118f2565b601f60fb1b6001600160f81b0319821610156118ca576004840193506118f2565b603f60fa1b6001600160f81b0319821610156118eb576005840193506118f2565b6006840193505b50600190910190611823565b509392505050565b600061073f825490565b603854826001600160401b03161015611947576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119609042612689565b905060365481101561198857604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119ae5760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b6119cb8282610e5d565b6107ee576119d881611bca565b6119e3836020611d36565b60405160200161151e929190612cdf565b6119fe8282610e5d565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a363390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e56836001600160a01b038416611ed1565b611a998282610e5d565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e56836001600160a01b038416611f20565b60005460ff166114845760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b7e9190612d54565b60006040518083038185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d36565b606061073f82611bef84612013565b600101611d36565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c2790869086908690600401612d70565b6000604051808303816000875af1158015611c46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6e9190810190612d93565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c9d908690602001612e6a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611cc9929190612e92565b6020604051808303816000875af1158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612eb6565b6000826000018281548110611d2357611d23612716565b9060005260206000200154905092915050565b60606000611d45836002612ecf565b611d50906002612aac565b6001600160401b03811115611d6757611d67612343565b6040519080825280601f01601f191660200182016040528015611d91576020820181803683370190505b509050600360fc1b81600081518110611dac57611dac612716565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ddb57611ddb612716565b60200101906001600160f81b031916908160001a9053506000611dff846002612ecf565b611e0a906001612aac565b90505b6001811115611e82576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e3e57611e3e612716565b1a60f81b828281518110611e5457611e54612716565b60200101906001600160f81b031916908160001a90535060049490941c93611e7b81612ee6565b9050611e0d565b508315610e565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f185750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015612009576000611f44600183612689565b8554909150600090611f5890600190612689565b9050818114611fbd576000866000018281548110611f7857611f78612716565b9060005260206000200154905080876000018481548110611f9b57611f9b612716565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fce57611fce612efd565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561202b5760809290921c916010015b604083901c156120405760409290921c916008015b602083901c156120555760209290921c916004015b601083901c1561206a5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561208f57600080fd5b81356001600160e01b031981168114610e5657600080fd5b6000602082840312156120b957600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120e857600080fd5b8235915060208301356120fa816120c0565b809150509250929050565b60006020828403121561211757600080fd5b8135610e56816120c0565b6001600160401b038116811461081257600080fd5b60008060006040848603121561214c57600080fd5b83356001600160401b038082111561216357600080fd5b818601915086601f83011261217757600080fd5b81358181111561218657600080fd5b87602082850101111561219857600080fd5b602092830195509350508401356121ae81612122565b809150509250925092565b6000806000806000806000806000806101408b8d0312156121d957600080fd5b8a356121e4816120c0565b995060208b01356121f4816120c0565b985060408b0135612204816120c0565b975060608b0135965060808b0135955060a08b0135945060c08b0135612229816120c0565b935060e08b0135612239816120c0565b92506101008b013561224a816120c0565b91506101208b013561225b816120c0565b809150509295989b9194979a5092959850565b60008083601f84011261228057600080fd5b5081356001600160401b0381111561229757600080fd5b6020830191508360208260051b85010111156116db57600080fd5b801515811461081257600080fd5b6000806000806000606086880312156122d857600080fd5b85356001600160401b03808211156122ef57600080fd5b6122fb89838a0161226e565b9097509550602088013591508082111561231457600080fd5b506123218882890161226e565b9094509250506040860135612335816122b2565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561237b5761237b612343565b60405290565b604051606081016001600160401b038111828210171561237b5761237b612343565b604051601f8201601f191681016001600160401b03811182821017156123cb576123cb612343565b604052919050565b60006001600160401b038211156123ec576123ec612343565b50601f01601f191660200190565b600082601f83011261240b57600080fd5b813561241e612419826123d3565b6123a3565b81815284602083860101111561243357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561246b57600080fd5b87356001600160401b038082111561248257600080fd5b61248e8b838c016123fa565b985060208a013591506124a0826120c0565b9096506040890135906124b282612122565b9095506060890135906124c4826120c0565b909450608089013590808211156124da57600080fd5b506124e78a828b0161226e565b90945092505060a08801356124fb816122b2565b8091505092959891949750929550565b6000806040838503121561251e57600080fd5b50508035926020909101359150565b60006020828403121561253f57600080fd5b81356001600160401b0381111561255557600080fd5b612561848285016123fa565b949350505050565b6000806040838503121561257c57600080fd5b82356001600160401b0381111561259257600080fd5b61259e858286016123fa565b92505060208301356120fa81612122565b60008060008060008060008060e0898b0312156125cb57600080fd5b88356001600160401b03808211156125e257600080fd5b6125ee8c838d016123fa565b995060208b01359150612600826120c0565b90975060408a01359061261282612122565b90965060608a0135955060808a01359061262b826120c0565b90945060a08a0135908082111561264157600080fd5b5061264e8b828c0161226e565b90945092505060c0890135612662816122b2565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612673565b6000602082840312156126ae57600080fd5b8151610e5681612122565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126f66060830186886126b9565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561274c57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127a957833561278c816120c0565b6001600160a01b0316815292810192600192909201918101612779565b861515604087015293506127bc92505050565b9695505050505050565b60005b838110156127e15781810151838201526020016127c9565b50506000910152565b600081518084526128028160208601602086016127c6565b601f01601f19169290920160200192915050565b602081526000610e5660208301846127ea565b6000612837612419846123d3565b905082815283838301111561284b57600080fd5b610e568360208301846127c6565b60006080828403121561286b57600080fd5b604051608081018181106001600160401b038211171561288d5761288d612343565b806040525080915082516128a0816120c0565b815260208301516128b0816120c0565b602082015260408301516128c381612122565b604082015260608301516128d6816122b2565b6060919091015292915050565b600060208083850312156128f657600080fd5b82516001600160401b038082111561290d57600080fd5b9084019060a0828703121561292157600080fd5b612929612359565b82518281111561293857600080fd5b83016060818903121561294a57600080fd5b612952612381565b815160ff8116811461296357600080fd5b8152818601518682015260408201518481111561297f57600080fd5b82019350601f8401891361299257600080fd5b6129a0898551888701612829565b60408201528252506129b487848601612859565b848201528094505050505092915050565b6080815260006129d860808301876127ea565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a1157600080fd5b8151610e56816122b2565b604081526000612a2f60408301856127ea565b90506001600160401b03831660208301529392505050565b600060408284031215612a5957600080fd5b612a61612359565b9050815181526020820151602082015292915050565b60008060808385031215612a8a57600080fd5b612a948484612a47565b9150612aa38460408501612a47565b90509250929050565b8082018082111561073f5761073f612673565b81835260006020808501808196508560051b810191508460005b87811015612b435782840389528135601e19883603018112612afa57600080fd5b870185810190356001600160401b03811115612b1557600080fd5b803603821315612b2457600080fd5b612b2f8682846126b9565b9a87019a9550505090840190600101612ad9565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b999083018587612abf565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bfb81602a8501602088016127c6565b660103b30b63ab2960cd1b602a918401918201528351612c228160318401602088016127c6565b01603101949350505050565b85815260a060208201526000612c4760a08301876127ea565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c8c57600080fd5b8251612c9781612122565b6020939093015192949293505050565b608081526000612cba60808301876127ea565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d178160178501602088016127c6565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d488160288401602088016127c6565b01602801949350505050565b60008251612d668184602087016127c6565b9190910192915050565b838152604060208201526000612d8a604083018486612abf565b95945050505050565b60006020808385031215612da657600080fd5b82516001600160401b0380821115612dbd57600080fd5b818501915085601f830112612dd157600080fd5b815181811115612de357612de3612343565b8060051b612df28582016123a3565b9182528381018501918581019089841115612e0c57600080fd5b86860192505b83831015612e5d57825185811115612e2a5760008081fd5b8601603f81018b13612e3c5760008081fd5b612e4d8b8983015160408401612829565b8352509186019190860190612e12565b9998505050505050505050565b60008251612e7c8184602087016127c6565b63173937b760e11b920191825250600401919050565b6001600160a01b0383168152604060208201819052600090612561908301846127ea565b600060208284031215612ec857600080fd5b5051919050565b808202811582820484141761073f5761073f612673565b600081612ef557612ef5612673565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122006f996c081232038f43c5a1b7c3f11015820d9739a2a8d4b25e938ce2da8ea5764736f6c63430008150033", + "nonce": "0x2c94f" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd14036bea0261c5fc04d833f1a4f269f651a096a59ccf3b2223ad527637f7343", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "function": null, + "arguments": null, + "transaction": { + "type": "0x00", + "from": "0x968d0cd7343f711216817e617d3f92a23dc91c07", + "to": "0x505d91e8fd2091794b45b27f86c045529fa92cd7", + "gas": "0xc291", + "value": "0x0", + "data": "0x99a88ec4000000000000000000000000512699b52ac2dc2b2ad505d9f29dcdad078fa7990000000000000000000000004d3a1c1c7eae7e4e68fc0eff8d721b0140793244", + "nonce": "0x2c950" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x417463687cbd26b8d8115970aebc771f80bbe129d9822c6ae7d68beeb5ed0169", + "transactionIndex": "0x0", + "blockHash": "0x7dcbc9e48241710a0541d5503c350880af304e162d082977a1f4fd19876a5edf", + "blockNumber": "0x147c792", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": null, + "cumulativeGasUsed": "0x2988dc", + "gasUsed": "0x2988dc", + "contractAddress": "0x4d3a1C1C7EAe7E4e68fc0eFF8d721B0140793244", + "logs": [ + { + "address": "0x4d3a1C1C7EAe7E4e68fc0eFF8d721B0140793244", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x7dcbc9e48241710a0541d5503c350880af304e162d082977a1f4fd19876a5edf", + "blockNumber": "0x147c792", + "transactionHash": "0x417463687cbd26b8d8115970aebc771f80bbe129d9822c6ae7d68beeb5ed0169", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000400000000000000000000000400000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + }, + { + "transactionHash": "0xd14036bea0261c5fc04d833f1a4f269f651a096a59ccf3b2223ad527637f7343", + "transactionIndex": "0x1", + "blockHash": "0x7dcbc9e48241710a0541d5503c350880af304e162d082977a1f4fd19876a5edf", + "blockNumber": "0x147c792", + "from": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "to": "0x505d91E8fd2091794b45b27f86C045529fa92CD7", + "cumulativeGasUsed": "0x2a0de6", + "gasUsed": "0x850a", + "contractAddress": null, + "logs": [ + { + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000004d3a1c1c7eae7e4e68fc0eff8d721b0140793244" + ], + "data": "0x", + "blockHash": "0x7dcbc9e48241710a0541d5503c350880af304e162d082977a1f4fd19876a5edf", + "blockNumber": "0x147c792", + "transactionHash": "0xd14036bea0261c5fc04d833f1a4f269f651a096a59ccf3b2223ad527637f7343", + "transactionIndex": "0x1", + "logIndex": "0x1", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000020000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000082000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000020000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "effectiveGasPrice": "0x4a817c800" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1698144161, + "chain": 2021, + "multi": false, + "commit": "19ed00e" +} \ No newline at end of file diff --git a/debug.sh b/debug.sh new file mode 100755 index 00000000..9cb14cc3 --- /dev/null +++ b/debug.sh @@ -0,0 +1,39 @@ +# Source (or "dot") the .env file to load environment variables +if [ -f .env ]; then + source .debug.env +else + echo "Error: .debug.env file not found." +fi + +verify_arg="" +extra_argument="" +op_command="" + +for arg in "$@"; do + case $arg in + --trezor) + op_command="" + extra_argument+=trezor@ + ;; + --broadcast) + op_command="op run --env-file="./.env" --" + ;; + --log) + set -- "${@/#--log/}" + extra_argument+=log@ + ;; + *) ;; + esac +done + +# Remove the @ character from the end of extra_argument +extra_argument="${extra_argument%%@}" + +echo Debug Tx... +echo From: ${FROM} +echo To: ${TO} +echo Value: ${VALUE} +echo Calldata: +cast pretty-calldata ${CALLDATA} +calldata=$(cast calldata 'debug(uint256,address,address,uint256,bytes)', ${BLOCK} ${FROM} ${TO} ${VALUE} ${CALLDATA}) +${op_command} forge script ${verify_arg} --legacy ${@} script/Debug.s.sol --sig 'run(bytes,string)' ${calldata} "${extra_argument}" diff --git a/deployments/ronin-mainnet/.chainId b/deployments/ronin-mainnet/.chainId new file mode 100644 index 00000000..145262f1 --- /dev/null +++ b/deployments/ronin-mainnet/.chainId @@ -0,0 +1 @@ +2020 \ No newline at end of file diff --git a/deployments/ronin-testnet/.chainId b/deployments/ronin-testnet/.chainId new file mode 100644 index 00000000..c5e035ca --- /dev/null +++ b/deployments/ronin-testnet/.chainId @@ -0,0 +1 @@ +2021 \ No newline at end of file diff --git a/deployments/ronin-testnet/NameCheckerLogic.json b/deployments/ronin-testnet/NameCheckerLogic.json new file mode 100644 index 00000000..be6491b1 --- /dev/null +++ b/deployments/ronin-testnet/NameCheckerLogic.json @@ -0,0 +1,985 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "total", + "type": "uint256" + } + ], + "name": "TotalSubStringTooLarge", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "wordCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "shouldForbid", + "type": "bool" + } + ], + "name": "ForbiddenWordsUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "min", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "max", + "type": "uint8" + } + ], + "name": "WordRangeUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "containsBlacklistedWord", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "containsInvalidCharacter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "forbidden", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "getAllSubStrings", + "outputs": [ + { + "internalType": "string[]", + "name": "subStrings", + "type": "string[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getWordRange", + "outputs": [ + { + "internalType": "uint8", + "name": "min", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "max", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "uint8", + "name": "min", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "max", + "type": "uint8" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "pack", + "outputs": [ + { + "internalType": "uint256", + "name": "packed", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string[]", + "name": "strs", + "type": "string[]" + } + ], + "name": "packBulk", + "outputs": [ + { + "internalType": "uint256[]", + "name": "packeds", + "type": "uint256[]" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "packedWords", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "shouldForbid", + "type": "bool" + } + ], + "name": "setForbiddenWords", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string[]", + "name": "words", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "shouldForbid", + "type": "bool" + } + ], + "name": "setForbiddenWords", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "min", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "max", + "type": "uint8" + } + ], + "name": "setWordRange", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "strlen", + "type": "uint256" + } + ], + "name": "totalSubString", + "outputs": [ + { + "internalType": "uint256", + "name": "total", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "max", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "address": "0xAf4a77BC41320bedf62d33ad278d76731EAAbCF4", + "args": "0x", + "blockNumber": 21224275, + "bytecode": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611a34806100df6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806391d14854116100b8578063ca5f79951161007c578063ca5f7995146102df578063d547741f1461030d578063e04af3b714610320578063e786c3ad14610340578063fb3809be14610360578063fbc639091461037357600080fd5b806391d148541461027957806392aec2fc1461028c57806396237206146102b1578063a217fddf146102c4578063ca15c873146102cc57600080fd5b80632f2ff15d116100ff5780632f2ff15d1461020257806336568abe14610215578063439e42e7146102285780635c0a3caa1461023b5780639010d07c1461024e57600080fd5b806301ffc9a71461013c5780630fda4464146101645780631d367b5714610177578063245ed654146101bb578063248a9ca3146101d0575b600080fd5b61014f61014a3660046113ad565b610386565b60405190151581526020015b60405180910390f35b61014f6101723660046113d7565b6103b1565b6101a16040805180820190915260355460ff80821680845261010090920416602090920182905291565b6040805160ff93841681529290911660208301520161015b565b6101ce6101c93660046114aa565b6103d4565b005b6101f46101de3660046114fe565b6000908152600160208190526040909120015490565b60405190815260200161015b565b6101ce61021036600461152e565b610423565b6101ce61022336600461152e565b61044e565b61014f6102363660046113d7565b6104d1565b61014f6102493660046113d7565b61056f565b61026161025c36600461155a565b610737565b6040516001600160a01b03909116815260200161015b565b61014f61028736600461152e565b61074f565b6101f461029a366004611633565b6000601f600183510310601f830151029050919050565b6101ce6102bf3660046114aa565b61077a565b6101f4600081565b6101f46102da3660046114fe565b6107a7565b6102f26102ed3660046114fe565b6107be565b6040805193845260208401929092529082015260600161015b565b6101ce61031b36600461152e565b6107fd565b61033361032e3660046116f5565b610823565b60405161015b919061173e565b61035361034e3660046113d7565b6108b9565b60405161015b91906117d2565b6101ce61036e366004611845565b6108e9565b6101ce61038136600461187f565b610a09565b60006001600160e01b03198216635a05180f60e01b14806103ab57506103ab82610a1e565b92915050565b60006103bd838361056f565b806103cd57506103cd83836104d1565b9392505050565b60006103df81610a53565b61041d848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250610a60915050565b50505050565b6000828152600160208190526040909120015461043f81610a53565b6104498383610c00565b505050565b6001600160a01b03811633146104c35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104cd8282610c22565b5050565b6000806104de84846108b9565b805190915060005b818110156105635761054a610525848381518110610506576105066118a9565b60200260200101516000601f600183510310601f830151029050919050565b600881901c600090815260366020526040902054600160ff9092169190911b16151590565b1561055b57600193505050506103ab565b6001016104e6565b50600095945050505050565b600080600084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935050600019820190508115806105e75750826000815181106105d0576105d06118a9565b6020910101516001600160f81b031916602d60f81b145b8061061657508281815181106105ff576105ff6118a9565b6020910101516001600160f81b031916602d60f81b145b156106285760019450505050506103ab565b60005b8281101561072957838181518110610645576106456118a9565b01602001516001600160f81b0319169450602d60f81b8590036106b1578181141580156106995750838160010181518110610682576106826118a9565b6020910101516001600160f81b031916602d60f81b145b156106ac576001955050505050506103ab565b610721565b600360fc1b6001600160f81b03198616108015906106dd5750603960f81b6001600160f81b0319861611155b8061070f5750606160f81b6001600160f81b031986161080159061070f5750603d60f91b6001600160f81b0319861611155b610721576001955050505050506103ab565b60010161062b565b506000979650505050505050565b60008281526002602052604081206103cd9083610c44565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061078581610a53565b600061079461032e85876118bf565b90506107a08184610a60565b5050505050565b60008181526002602052604081206103ab90610c50565b6040805180820190915260355460ff8082168352610100909104166020820152600090819081906107f0908590610c5a565b9196909550909350915050565b6000828152600160208190526040909120015461081981610a53565b6104498383610c22565b80516060908067ffffffffffffffff8111156108415761084161157c565b60405190808252806020026020018201604052801561086a578160200160208202803683370190505b50915060005b818110156108b25761088d848281518110610506576105066118a9565b83828151811061089f5761089f6118a9565b6020908102919091010152600101610870565b5050919050565b6040805180820190915260355460ff80821683526101009091041660208201526060906103cd9084908490610ccb565b600054610100900460ff16158080156109095750600054600160ff909116105b806109235750303b158015610923575060005460ff166001145b6109865760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ba565b6000805460ff1916600117905580156109a9576000805461ff0019166101001790555b6109b4600085610dda565b6109be8383610de4565b801561041d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6000610a1481610a53565b6104498383610de4565b60006001600160e01b03198216637965db0b60e01b14806103ab57506301ffc9a760e01b6001600160e01b03198316146103ab565b610a5d8133610eca565b50565b8151600080600019815b84811015610b4a57868181518110610a8457610a846118a9565b6020026020010151600003610adb5760405162461bcd60e51b815260206004820181905260248201527f4e616d65436865636b65723a20696e76616c6964207061636b656420776f726460448201526064016104ba565b60f8878281518110610aef57610aef6118a9565b6020026020010151901c9350610b058285610f23565b9150610b118385610f39565b9250610b42878281518110610b2857610b286118a9565b6020026020010151876036610f489092919063ffffffff16565b600101610a6a565b508415610bbc576040805180820190915260355460ff808216808452610100909204166020830152610b7d908390610f23565b9150610b9083826020015160ff16610f39565b815190935060ff1682148015610bac5750806020015160ff1683145b610bba57610bba8284610de4565b505b60408051858152861515602082015233917f060d5a3fc05fdd11d7ba941d00a4fdcde096fb95171930e19997ce2b7df89174910160405180910390a2505050505050565b610c0a8282610f97565b60008281526002602052604090206104499082611002565b610c2c8282611017565b6000828152600260205260409020610449908261107e565b60006103cd8383611093565b60006103ab825490565b6000806000610c70846000015160ff1686610f23565b9150610c83846020015160ff1686610f23565b8281036001818101808302821c868a039092010203945090915061ffff841115610cc357604051630faa3ef560e11b8152600481018590526024016104ba565b509250925092565b60608260008080610cdc8487610c5a565b9250925092508267ffffffffffffffff811115610cfb57610cfb61157c565b604051908082528060200260200182016040528015610d2e57816020015b6060815260200190600190039081610d195790505b50945060008060005b86811015610dcc57610d4b84820188610f23565b91508085015b828111610dc357610d6481838d8f6118cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508b5160018801978d935091508110610db057610db06118a9565b6020908102919091010152600101610d51565b50600101610d37565b505050505050509392505050565b6104cd8282610c00565b60ff821615801590610dfc57508060ff168260ff1611155b610e5f5760405162461bcd60e51b815260206004820152602e60248201527f4e616d65436865636b65723a206d696e20776f7264206c656e677468203e206d60448201526d0c2f040eedee4c840d8cadccee8d60931b60648201526084016104ba565b60408051808201825260ff84811680835290841660209283018190526035805461ffff191683176101008302179055835191825291810191909152815133927faabf778cd749a472313a9476aa3b29565e69697c48eb0f82b52fc9f071fd3c95928290030190a25050565b610ed4828261074f565b6104cd57610ee1816110bd565b610eec8360206110cf565b604051602001610efd9291906118f6565b60408051601f198184030181529082905262461bcd60e51b82526104ba9160040161196b565b6000818310610f3257816103cd565b5090919050565b6000818311610f3257816103cd565b8015610f7257600882901c60009081526020849052604090208054600160ff85161b179055505050565b600882901c60009081526020849052604090208054600160ff85161b19169055505050565b610fa1828261074f565b6104cd5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006103cd836001600160a01b03841661126b565b611021828261074f565b156104cd5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006103cd836001600160a01b0384166112ba565b60008260000182815481106110aa576110aa6118a9565b9060005260206000200154905092915050565b60606103ab6001600160a01b03831660145b606060006110de836002611994565b6110e99060026119ab565b67ffffffffffffffff8111156111015761110161157c565b6040519080825280601f01601f19166020018201604052801561112b576020820181803683370190505b509050600360fc1b81600081518110611146576111466118a9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611175576111756118a9565b60200101906001600160f81b031916908160001a9053506000611199846002611994565b6111a49060016119ab565b90505b600181111561121c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106111d8576111d86118a9565b1a60f81b8282815181106111ee576111ee6118a9565b60200101906001600160f81b031916908160001a90535060049490941c93611215816119be565b90506111a7565b5083156103cd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ba565b60008181526001830160205260408120546112b2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556103ab565b5060006103ab565b600081815260018301602052604081205480156113a35760006112de6001836119d5565b85549091506000906112f2906001906119d5565b9050818114611357576000866000018281548110611312576113126118a9565b9060005260206000200154905080876000018481548110611335576113356118a9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611368576113686119e8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506103ab565b60009150506103ab565b6000602082840312156113bf57600080fd5b81356001600160e01b0319811681146103cd57600080fd5b600080602083850312156113ea57600080fd5b823567ffffffffffffffff8082111561140257600080fd5b818501915085601f83011261141657600080fd5b81358181111561142557600080fd5b86602082850101111561143757600080fd5b60209290920196919550909350505050565b60008083601f84011261145b57600080fd5b50813567ffffffffffffffff81111561147357600080fd5b6020830191508360208260051b850101111561148e57600080fd5b9250929050565b803580151581146114a557600080fd5b919050565b6000806000604084860312156114bf57600080fd5b833567ffffffffffffffff8111156114d657600080fd5b6114e286828701611449565b90945092506114f5905060208501611495565b90509250925092565b60006020828403121561151057600080fd5b5035919050565b80356001600160a01b03811681146114a557600080fd5b6000806040838503121561154157600080fd5b8235915061155160208401611517565b90509250929050565b6000806040838503121561156d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115bb576115bb61157c565b604052919050565b600082601f8301126115d457600080fd5b813567ffffffffffffffff8111156115ee576115ee61157c565b611601601f8201601f1916602001611592565b81815284602083860101111561161657600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561164557600080fd5b813567ffffffffffffffff81111561165c57600080fd5b611668848285016115c3565b949350505050565b600067ffffffffffffffff8084111561168b5761168b61157c565b8360051b602061169c818301611592565b868152935090840190808401878311156116b557600080fd5b855b838110156116e9578035858111156116cf5760008081fd5b6116db8a828a016115c3565b8352509082019082016116b7565b50505050509392505050565b60006020828403121561170757600080fd5b813567ffffffffffffffff81111561171e57600080fd5b8201601f8101841361172f57600080fd5b61166884823560208401611670565b6020808252825182820181905260009190848201906040850190845b818110156117765783518352928401929184019160010161175a565b50909695505050505050565b60005b8381101561179d578181015183820152602001611785565b50506000910152565b600081518084526117be816020860160208601611782565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561182757603f198886030184526118158583516117a6565b945092850192908501906001016117f9565b5092979650505050505050565b803560ff811681146114a557600080fd5b60008060006060848603121561185a57600080fd5b61186384611517565b925061187160208501611834565b91506114f560408501611834565b6000806040838503121561189257600080fd5b61189b83611834565b915061155160208401611834565b634e487b7160e01b600052603260045260246000fd5b60006103cd368484611670565b600080858511156118dc57600080fd5b838611156118e957600080fd5b5050820193919092039150565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161192e816017850160208801611782565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161195f816028840160208801611782565b01602801949350505050565b6020815260006103cd60208301846117a6565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103ab576103ab61197e565b808201808211156103ab576103ab61197e565b6000816119cd576119cd61197e565b506000190190565b818103818111156103ab576103ab61197e565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202247f1c7e637d2639344dd5ecdf7446256de2b88f161ff1c1c345bfb1a96a16764736f6c63430008150033", + "chainId": 2021, + "contractName": "NameChecker", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101375760003560e01c806391d14854116100b8578063ca5f79951161007c578063ca5f7995146102df578063d547741f1461030d578063e04af3b714610320578063e786c3ad14610340578063fb3809be14610360578063fbc639091461037357600080fd5b806391d148541461027957806392aec2fc1461028c57806396237206146102b1578063a217fddf146102c4578063ca15c873146102cc57600080fd5b80632f2ff15d116100ff5780632f2ff15d1461020257806336568abe14610215578063439e42e7146102285780635c0a3caa1461023b5780639010d07c1461024e57600080fd5b806301ffc9a71461013c5780630fda4464146101645780631d367b5714610177578063245ed654146101bb578063248a9ca3146101d0575b600080fd5b61014f61014a3660046113ad565b610386565b60405190151581526020015b60405180910390f35b61014f6101723660046113d7565b6103b1565b6101a16040805180820190915260355460ff80821680845261010090920416602090920182905291565b6040805160ff93841681529290911660208301520161015b565b6101ce6101c93660046114aa565b6103d4565b005b6101f46101de3660046114fe565b6000908152600160208190526040909120015490565b60405190815260200161015b565b6101ce61021036600461152e565b610423565b6101ce61022336600461152e565b61044e565b61014f6102363660046113d7565b6104d1565b61014f6102493660046113d7565b61056f565b61026161025c36600461155a565b610737565b6040516001600160a01b03909116815260200161015b565b61014f61028736600461152e565b61074f565b6101f461029a366004611633565b6000601f600183510310601f830151029050919050565b6101ce6102bf3660046114aa565b61077a565b6101f4600081565b6101f46102da3660046114fe565b6107a7565b6102f26102ed3660046114fe565b6107be565b6040805193845260208401929092529082015260600161015b565b6101ce61031b36600461152e565b6107fd565b61033361032e3660046116f5565b610823565b60405161015b919061173e565b61035361034e3660046113d7565b6108b9565b60405161015b91906117d2565b6101ce61036e366004611845565b6108e9565b6101ce61038136600461187f565b610a09565b60006001600160e01b03198216635a05180f60e01b14806103ab57506103ab82610a1e565b92915050565b60006103bd838361056f565b806103cd57506103cd83836104d1565b9392505050565b60006103df81610a53565b61041d848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250869250610a60915050565b50505050565b6000828152600160208190526040909120015461043f81610a53565b6104498383610c00565b505050565b6001600160a01b03811633146104c35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6104cd8282610c22565b5050565b6000806104de84846108b9565b805190915060005b818110156105635761054a610525848381518110610506576105066118a9565b60200260200101516000601f600183510310601f830151029050919050565b600881901c600090815260366020526040902054600160ff9092169190911b16151590565b1561055b57600193505050506103ab565b6001016104e6565b50600095945050505050565b600080600084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935050600019820190508115806105e75750826000815181106105d0576105d06118a9565b6020910101516001600160f81b031916602d60f81b145b8061061657508281815181106105ff576105ff6118a9565b6020910101516001600160f81b031916602d60f81b145b156106285760019450505050506103ab565b60005b8281101561072957838181518110610645576106456118a9565b01602001516001600160f81b0319169450602d60f81b8590036106b1578181141580156106995750838160010181518110610682576106826118a9565b6020910101516001600160f81b031916602d60f81b145b156106ac576001955050505050506103ab565b610721565b600360fc1b6001600160f81b03198616108015906106dd5750603960f81b6001600160f81b0319861611155b8061070f5750606160f81b6001600160f81b031986161080159061070f5750603d60f91b6001600160f81b0319861611155b610721576001955050505050506103ab565b60010161062b565b506000979650505050505050565b60008281526002602052604081206103cd9083610c44565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061078581610a53565b600061079461032e85876118bf565b90506107a08184610a60565b5050505050565b60008181526002602052604081206103ab90610c50565b6040805180820190915260355460ff8082168352610100909104166020820152600090819081906107f0908590610c5a565b9196909550909350915050565b6000828152600160208190526040909120015461081981610a53565b6104498383610c22565b80516060908067ffffffffffffffff8111156108415761084161157c565b60405190808252806020026020018201604052801561086a578160200160208202803683370190505b50915060005b818110156108b25761088d848281518110610506576105066118a9565b83828151811061089f5761089f6118a9565b6020908102919091010152600101610870565b5050919050565b6040805180820190915260355460ff80821683526101009091041660208201526060906103cd9084908490610ccb565b600054610100900460ff16158080156109095750600054600160ff909116105b806109235750303b158015610923575060005460ff166001145b6109865760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104ba565b6000805460ff1916600117905580156109a9576000805461ff0019166101001790555b6109b4600085610dda565b6109be8383610de4565b801561041d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6000610a1481610a53565b6104498383610de4565b60006001600160e01b03198216637965db0b60e01b14806103ab57506301ffc9a760e01b6001600160e01b03198316146103ab565b610a5d8133610eca565b50565b8151600080600019815b84811015610b4a57868181518110610a8457610a846118a9565b6020026020010151600003610adb5760405162461bcd60e51b815260206004820181905260248201527f4e616d65436865636b65723a20696e76616c6964207061636b656420776f726460448201526064016104ba565b60f8878281518110610aef57610aef6118a9565b6020026020010151901c9350610b058285610f23565b9150610b118385610f39565b9250610b42878281518110610b2857610b286118a9565b6020026020010151876036610f489092919063ffffffff16565b600101610a6a565b508415610bbc576040805180820190915260355460ff808216808452610100909204166020830152610b7d908390610f23565b9150610b9083826020015160ff16610f39565b815190935060ff1682148015610bac5750806020015160ff1683145b610bba57610bba8284610de4565b505b60408051858152861515602082015233917f060d5a3fc05fdd11d7ba941d00a4fdcde096fb95171930e19997ce2b7df89174910160405180910390a2505050505050565b610c0a8282610f97565b60008281526002602052604090206104499082611002565b610c2c8282611017565b6000828152600260205260409020610449908261107e565b60006103cd8383611093565b60006103ab825490565b6000806000610c70846000015160ff1686610f23565b9150610c83846020015160ff1686610f23565b8281036001818101808302821c868a039092010203945090915061ffff841115610cc357604051630faa3ef560e11b8152600481018590526024016104ba565b509250925092565b60608260008080610cdc8487610c5a565b9250925092508267ffffffffffffffff811115610cfb57610cfb61157c565b604051908082528060200260200182016040528015610d2e57816020015b6060815260200190600190039081610d195790505b50945060008060005b86811015610dcc57610d4b84820188610f23565b91508085015b828111610dc357610d6481838d8f6118cc565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250508b5160018801978d935091508110610db057610db06118a9565b6020908102919091010152600101610d51565b50600101610d37565b505050505050509392505050565b6104cd8282610c00565b60ff821615801590610dfc57508060ff168260ff1611155b610e5f5760405162461bcd60e51b815260206004820152602e60248201527f4e616d65436865636b65723a206d696e20776f7264206c656e677468203e206d60448201526d0c2f040eedee4c840d8cadccee8d60931b60648201526084016104ba565b60408051808201825260ff84811680835290841660209283018190526035805461ffff191683176101008302179055835191825291810191909152815133927faabf778cd749a472313a9476aa3b29565e69697c48eb0f82b52fc9f071fd3c95928290030190a25050565b610ed4828261074f565b6104cd57610ee1816110bd565b610eec8360206110cf565b604051602001610efd9291906118f6565b60408051601f198184030181529082905262461bcd60e51b82526104ba9160040161196b565b6000818310610f3257816103cd565b5090919050565b6000818311610f3257816103cd565b8015610f7257600882901c60009081526020849052604090208054600160ff85161b179055505050565b600882901c60009081526020849052604090208054600160ff85161b19169055505050565b610fa1828261074f565b6104cd5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b60006103cd836001600160a01b03841661126b565b611021828261074f565b156104cd5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006103cd836001600160a01b0384166112ba565b60008260000182815481106110aa576110aa6118a9565b9060005260206000200154905092915050565b60606103ab6001600160a01b03831660145b606060006110de836002611994565b6110e99060026119ab565b67ffffffffffffffff8111156111015761110161157c565b6040519080825280601f01601f19166020018201604052801561112b576020820181803683370190505b509050600360fc1b81600081518110611146576111466118a9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611175576111756118a9565b60200101906001600160f81b031916908160001a9053506000611199846002611994565b6111a49060016119ab565b90505b600181111561121c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106111d8576111d86118a9565b1a60f81b8282815181106111ee576111ee6118a9565b60200101906001600160f81b031916908160001a90535060049490941c93611215816119be565b90506111a7565b5083156103cd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ba565b60008181526001830160205260408120546112b2575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556103ab565b5060006103ab565b600081815260018301602052604081205480156113a35760006112de6001836119d5565b85549091506000906112f2906001906119d5565b9050818114611357576000866000018281548110611312576113126118a9565b9060005260206000200154905080876000018481548110611335576113356118a9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611368576113686119e8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506103ab565b60009150506103ab565b6000602082840312156113bf57600080fd5b81356001600160e01b0319811681146103cd57600080fd5b600080602083850312156113ea57600080fd5b823567ffffffffffffffff8082111561140257600080fd5b818501915085601f83011261141657600080fd5b81358181111561142557600080fd5b86602082850101111561143757600080fd5b60209290920196919550909350505050565b60008083601f84011261145b57600080fd5b50813567ffffffffffffffff81111561147357600080fd5b6020830191508360208260051b850101111561148e57600080fd5b9250929050565b803580151581146114a557600080fd5b919050565b6000806000604084860312156114bf57600080fd5b833567ffffffffffffffff8111156114d657600080fd5b6114e286828701611449565b90945092506114f5905060208501611495565b90509250925092565b60006020828403121561151057600080fd5b5035919050565b80356001600160a01b03811681146114a557600080fd5b6000806040838503121561154157600080fd5b8235915061155160208401611517565b90509250929050565b6000806040838503121561156d57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156115bb576115bb61157c565b604052919050565b600082601f8301126115d457600080fd5b813567ffffffffffffffff8111156115ee576115ee61157c565b611601601f8201601f1916602001611592565b81815284602083860101111561161657600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561164557600080fd5b813567ffffffffffffffff81111561165c57600080fd5b611668848285016115c3565b949350505050565b600067ffffffffffffffff8084111561168b5761168b61157c565b8360051b602061169c818301611592565b868152935090840190808401878311156116b557600080fd5b855b838110156116e9578035858111156116cf5760008081fd5b6116db8a828a016115c3565b8352509082019082016116b7565b50505050509392505050565b60006020828403121561170757600080fd5b813567ffffffffffffffff81111561171e57600080fd5b8201601f8101841361172f57600080fd5b61166884823560208401611670565b6020808252825182820181905260009190848201906040850190845b818110156117765783518352928401929184019160010161175a565b50909695505050505050565b60005b8381101561179d578181015183820152602001611785565b50506000910152565b600081518084526117be816020860160208601611782565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561182757603f198886030184526118158583516117a6565b945092850192908501906001016117f9565b5092979650505050505050565b803560ff811681146114a557600080fd5b60008060006060848603121561185a57600080fd5b61186384611517565b925061187160208501611834565b91506114f560408501611834565b6000806040838503121561189257600080fd5b61189b83611834565b915061155160208401611834565b634e487b7160e01b600052603260045260246000fd5b60006103cd368484611670565b600080858511156118dc57600080fd5b838611156118e957600080fd5b5050820193919092039150565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161192e816017850160208801611782565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161195f816028840160208801611782565b01602801949350505050565b6020815260006103cd60208301846117a6565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176103ab576103ab61197e565b808201808211156103ab576103ab61197e565b6000816119cd576119cd61197e565b506000190190565b818103818111156103ab576103ab61197e565b634e487b7160e01b600052603160045260246000fdfea26469706673582212202247f1c7e637d2639344dd5ecdf7446256de2b88f161ff1c1c345bfb1a96a16764736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "containsBlacklistedWord(string)": { + "params": { + "name": "The string to check." + }, + "returns": { + "_0": "true if the name contains blacklisted words, false otherwise." + } + }, + "containsInvalidCharacter(string)": { + "params": { + "name": "The string to check." + }, + "returns": { + "_0": "true if the name contains invalid characters, false otherwise." + } + }, + "forbidden(string)": { + "params": { + "name": "The string to check." + }, + "returns": { + "_0": "true if the name contains forbidden characters or blacklisted words, false otherwise." + } + }, + "getAllSubStrings(string)": { + "details": "Returns an array of all substrings of a given string.", + "params": { + "str": "The input string to analyze." + }, + "returns": { + "subStrings": "An array of all substrings." + } + }, + "getRoleAdmin(bytes32)": { + "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + }, + "getRoleMember(bytes32,uint256)": { + "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information." + }, + "getRoleMemberCount(bytes32)": { + "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role." + }, + "getWordRange()": { + "details": "Retrieves the current minimum and maximum word lengths allowed.", + "returns": { + "max": "The maximum word length allowed.", + "min": "The minimum word length allowed." + } + }, + "grantRole(bytes32,address)": { + "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + }, + "hasRole(bytes32,address)": { + "details": "Returns `true` if `account` has been granted `role`." + }, + "pack(string)": { + "details": "Packs a string into a single word representation.", + "params": { + "str": "The string to be packed." + }, + "returns": { + "packed": "The packed value of the input string." + } + }, + "packBulk(string[])": { + "details": "Packs an array of strings into their single word representations.", + "params": { + "strs": "The array of strings to be packed." + }, + "returns": { + "packeds": "An array containing the packed values of the input strings." + } + }, + "renounceRole(bytes32,address)": { + "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + }, + "revokeRole(bytes32,address)": { + "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + }, + "setForbiddenWords(string[],bool)": { + "details": "Sets a list of forbidden words and specifies whether they should be forbidden.", + "params": { + "shouldForbid": "Boolean indicating whether the specified words should be forbidden.", + "words": "An array of raw words in string representations." + } + }, + "setForbiddenWords(uint256[],bool)": { + "details": "Sets a list of forbidden words and specifies whether they should be forbidden.", + "params": { + "packedWords": "An array of packed word representations.", + "shouldForbid": "Boolean indicating whether the specified words should be forbidden." + } + }, + "setWordRange(uint8,uint8)": { + "details": "Sets the minimum and maximum word lengths allowed.", + "params": { + "max": "The maximum word length.", + "min": "The minimum word length." + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "totalSubString(uint256)": { + "details": "Returns the total number of substrings for a given string length, as well as the minimum and maximum allowed word lengths.", + "params": { + "strlen": "The length of the input string." + }, + "returns": { + "max": "The maximum word length allowed.", + "min": "The minimum word length allowed.", + "total": "The total number of substrings." + } + } + }, + "events": { + "ForbiddenWordsUpdated(address,uint256,bool)": { + "details": "Emitted when the forbidden words are updated.", + "params": { + "operator": "The address that updated the forbidden words list.", + "shouldForbid": "Boolean indicating whether the specified words should be forbidden.", + "wordCount": "The number of words in the list." + } + }, + "Initialized(uint8)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "RoleAdminChanged(bytes32,bytes32,bytes32)": { + "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + }, + "RoleGranted(bytes32,address,address)": { + "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + }, + "RoleRevoked(bytes32,address,address)": { + "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + }, + "WordRangeUpdated(address,uint8,uint8)": { + "details": "Emitted when the word range is updated.", + "params": { + "max": "The maximum word length allowed.", + "min": "The minimum word length allowed.", + "operator": "The address that updated the word range." + } + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"}],\"name\":\"TotalSubStringTooLarge\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wordCount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"shouldForbid\",\"type\":\"bool\"}],\"name\":\"ForbiddenWordsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"min\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"max\",\"type\":\"uint8\"}],\"name\":\"WordRangeUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"containsBlacklistedWord\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"containsInvalidCharacter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"forbidden\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"getAllSubStrings\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"subStrings\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWordRange\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"min\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"max\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"min\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"max\",\"type\":\"uint8\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"pack\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"packed\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"strs\",\"type\":\"string[]\"}],\"name\":\"packBulk\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"packeds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"packedWords\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"shouldForbid\",\"type\":\"bool\"}],\"name\":\"setForbiddenWords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"words\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"shouldForbid\",\"type\":\"bool\"}],\"name\":\"setForbiddenWords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"min\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"max\",\"type\":\"uint8\"}],\"name\":\"setWordRange\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"strlen\",\"type\":\"uint256\"}],\"name\":\"totalSubString\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"total\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"ForbiddenWordsUpdated(address,uint256,bool)\":{\"details\":\"Emitted when the forbidden words are updated.\",\"params\":{\"operator\":\"The address that updated the forbidden words list.\",\"shouldForbid\":\"Boolean indicating whether the specified words should be forbidden.\",\"wordCount\":\"The number of words in the list.\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"WordRangeUpdated(address,uint8,uint8)\":{\"details\":\"Emitted when the word range is updated.\",\"params\":{\"max\":\"The maximum word length allowed.\",\"min\":\"The minimum word length allowed.\",\"operator\":\"The address that updated the word range.\"}}},\"kind\":\"dev\",\"methods\":{\"containsBlacklistedWord(string)\":{\"params\":{\"name\":\"The string to check.\"},\"returns\":{\"_0\":\"true if the name contains blacklisted words, false otherwise.\"}},\"containsInvalidCharacter(string)\":{\"params\":{\"name\":\"The string to check.\"},\"returns\":{\"_0\":\"true if the name contains invalid characters, false otherwise.\"}},\"forbidden(string)\":{\"params\":{\"name\":\"The string to check.\"},\"returns\":{\"_0\":\"true if the name contains forbidden characters or blacklisted words, false otherwise.\"}},\"getAllSubStrings(string)\":{\"details\":\"Returns an array of all substrings of a given string.\",\"params\":{\"str\":\"The input string to analyze.\"},\"returns\":{\"subStrings\":\"An array of all substrings.\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"getWordRange()\":{\"details\":\"Retrieves the current minimum and maximum word lengths allowed.\",\"returns\":{\"max\":\"The maximum word length allowed.\",\"min\":\"The minimum word length allowed.\"}},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"pack(string)\":{\"details\":\"Packs a string into a single word representation.\",\"params\":{\"str\":\"The string to be packed.\"},\"returns\":{\"packed\":\"The packed value of the input string.\"}},\"packBulk(string[])\":{\"details\":\"Packs an array of strings into their single word representations.\",\"params\":{\"strs\":\"The array of strings to be packed.\"},\"returns\":{\"packeds\":\"An array containing the packed values of the input strings.\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setForbiddenWords(string[],bool)\":{\"details\":\"Sets a list of forbidden words and specifies whether they should be forbidden.\",\"params\":{\"shouldForbid\":\"Boolean indicating whether the specified words should be forbidden.\",\"words\":\"An array of raw words in string representations.\"}},\"setForbiddenWords(uint256[],bool)\":{\"details\":\"Sets a list of forbidden words and specifies whether they should be forbidden.\",\"params\":{\"packedWords\":\"An array of packed word representations.\",\"shouldForbid\":\"Boolean indicating whether the specified words should be forbidden.\"}},\"setWordRange(uint8,uint8)\":{\"details\":\"Sets the minimum and maximum word lengths allowed.\",\"params\":{\"max\":\"The maximum word length.\",\"min\":\"The minimum word length.\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"totalSubString(uint256)\":{\"details\":\"Returns the total number of substrings for a given string length, as well as the minimum and maximum allowed word lengths.\",\"params\":{\"strlen\":\"The length of the input string.\"},\"returns\":{\"max\":\"The maximum word length allowed.\",\"min\":\"The minimum word length allowed.\",\"total\":\"The total number of substrings.\"}}},\"stateVariables\":{\"____gap\":{\"details\":\"Gap for upgradeability.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"containsBlacklistedWord(string)\":{\"notice\":\"Checks if a given name contains any blacklisted words.\"},\"containsInvalidCharacter(string)\":{\"notice\":\"Checks if a given name contains any invalid characters. requirements: - all characters in name must in range [a-z] or [0-9].\"},\"forbidden(string)\":{\"notice\":\"Checks if a given name contains any forbidden characters or blacklisted words.\"},\"pack(string)\":{\"notice\":\"Returns `uint256(0)` if the length is zero or greater than 31.\"},\"packBulk(string[])\":{\"notice\":\"Returns an array of packed values, along with the minimum and maximum string lengths.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/NameChecker.sol\":\"NameChecker\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```solidity\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```solidity\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\\n * to enforce additional security measures for this role.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0dd6e52cb394d7f5abe5dca2d4908a6be40417914720932de757de34a99ab87f\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlEnumerable.sol\\\";\\nimport \\\"./AccessControl.sol\\\";\\nimport \\\"../utils/structs/EnumerableSet.sol\\\";\\n\\n/**\\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\\n */\\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\\n using EnumerableSet for EnumerableSet.AddressSet;\\n\\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {\\n return _roleMembers[role].at(index);\\n }\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) public view virtual override returns (uint256) {\\n return _roleMembers[role].length();\\n }\\n\\n /**\\n * @dev Overload {_grantRole} to track enumerable memberships\\n */\\n function _grantRole(bytes32 role, address account) internal virtual override {\\n super._grantRole(role, account);\\n _roleMembers[role].add(account);\\n }\\n\\n /**\\n * @dev Overload {_revokeRole} to track enumerable memberships\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual override {\\n super._revokeRole(role, account);\\n _roleMembers[role].remove(account);\\n }\\n}\\n\",\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toString(int256 value) internal pure returns (string memory) {\\n return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/BitMaps.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential.\\n * Largely inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol[merkle-distributor].\\n */\\nlibrary BitMaps {\\n struct BitMap {\\n mapping(uint256 => uint256) _data;\\n }\\n\\n /**\\n * @dev Returns whether the bit at `index` is set.\\n */\\n function get(BitMap storage bitmap, uint256 index) internal view returns (bool) {\\n uint256 bucket = index >> 8;\\n uint256 mask = 1 << (index & 0xff);\\n return bitmap._data[bucket] & mask != 0;\\n }\\n\\n /**\\n * @dev Sets the bit at `index` to the boolean `value`.\\n */\\n function setTo(BitMap storage bitmap, uint256 index, bool value) internal {\\n if (value) {\\n set(bitmap, index);\\n } else {\\n unset(bitmap, index);\\n }\\n }\\n\\n /**\\n * @dev Sets the bit at `index`.\\n */\\n function set(BitMap storage bitmap, uint256 index) internal {\\n uint256 bucket = index >> 8;\\n uint256 mask = 1 << (index & 0xff);\\n bitmap._data[bucket] |= mask;\\n }\\n\\n /**\\n * @dev Unsets the bit at `index`.\\n */\\n function unset(BitMap storage bitmap, uint256 index) internal {\\n uint256 bucket = index >> 8;\\n uint256 mask = 1 << (index & 0xff);\\n bitmap._data[bucket] &= ~mask;\\n }\\n}\\n\",\"keccak256\":\"0xac946730f979a447732a5bed58aa30c995ae666c3e1663b312ab5fd11dbe3eb6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)\\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```solidity\\n * contract Example {\\n * // Add the library methods\\n * using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n * // Declare a set state variable\\n * EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n *\\n * [WARNING]\\n * ====\\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\\n * unusable.\\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\\n *\\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\\n * array of EnumerableSet.\\n * ====\\n */\\nlibrary EnumerableSet {\\n // To implement this library for multiple types with as little code\\n // repetition as possible, we write it in terms of a generic Set type with\\n // bytes32 values.\\n // The Set implementation uses private functions, and user-facing\\n // implementations (such as AddressSet) are just wrappers around the\\n // underlying Set.\\n // This means that we can only create new EnumerableSets for types that fit\\n // in bytes32.\\n\\n struct Set {\\n // Storage of set values\\n bytes32[] _values;\\n // Position of the value in the `values` array, plus 1 because index 0\\n // means a value is not in the set.\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n // The value is stored at length-1, but we add 1 to all indexes\\n // and use 0 as a sentinel value\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n // We read and store the value's index to prevent multiple reads from the same storage slot\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n // Equivalent to contains(set, value)\\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n // the array, and then remove the last element (sometimes called as 'swap and pop').\\n // This modifies the order of the array, as noted in {at}.\\n\\n uint256 toDeleteIndex = valueIndex - 1;\\n uint256 lastIndex = set._values.length - 1;\\n\\n if (lastIndex != toDeleteIndex) {\\n bytes32 lastValue = set._values[lastIndex];\\n\\n // Move the last value to the index where the value to delete is\\n set._values[toDeleteIndex] = lastValue;\\n // Update the index for the moved value\\n set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex\\n }\\n\\n // Delete the slot where the moved value was stored\\n set._values.pop();\\n\\n // Delete the index for the deleted slot\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n return set._indexes[value] != 0;\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n return set._values[index];\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function _values(Set storage set) private view returns (bytes32[] memory) {\\n return set._values;\\n }\\n\\n // Bytes32Set\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _add(set._inner, value);\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _remove(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n return _contains(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n return _at(set._inner, index);\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n bytes32[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // AddressSet\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(AddressSet storage set, address value) internal returns (bool) {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(AddressSet storage set, address value) internal returns (bool) {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(AddressSet storage set, address value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(AddressSet storage set) internal view returns (address[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n address[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // UintSet\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n return uint256(_at(set._inner, index));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(UintSet storage set) internal view returns (uint256[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n uint256[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\"},\"src/NameChecker.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { AccessControlEnumerable } from \\\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\\\";\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { BitMaps } from \\\"@openzeppelin/contracts/utils/structs/BitMaps.sol\\\";\\nimport { Math, LibSubString } from \\\"./libraries/LibSubString.sol\\\";\\nimport { INameChecker } from \\\"./interfaces/INameChecker.sol\\\";\\n\\ncontract NameChecker is Initializable, AccessControlEnumerable, INameChecker {\\n using LibSubString for *;\\n using BitMaps for BitMaps.BitMap;\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n LibSubString.WordRange internal _wordRange;\\n BitMaps.BitMap internal _forbiddenWordMap;\\n\\n constructor() payable {\\n _disableInitializers();\\n }\\n\\n function initialize(address admin, uint8 min, uint8 max) external initializer {\\n _setupRole(DEFAULT_ADMIN_ROLE, admin);\\n _setWordRange(min, max);\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function getWordRange() external view returns (uint8 min, uint8 max) {\\n LibSubString.WordRange memory wordRange = _wordRange;\\n return (wordRange.min, wordRange.max);\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function setWordRange(uint8 min, uint8 max) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setWordRange(min, max);\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function forbidden(string calldata name) public view returns (bool) {\\n return containsInvalidCharacter(name) || containsBlacklistedWord(name);\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function containsBlacklistedWord(string calldata name) public view returns (bool) {\\n string[] memory sstrs = getAllSubStrings(name);\\n uint256 length = sstrs.length;\\n\\n for (uint256 i; i < length;) {\\n if (_forbiddenWordMap.get(pack(sstrs[i]))) return true;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n return false;\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function containsInvalidCharacter(string calldata name) public pure returns (bool) {\\n unchecked {\\n bytes1 char;\\n bytes memory bName = bytes(name);\\n uint256 length = bName.length;\\n\\n uint256 tail = length - 1;\\n // Check if the name is empty or starts or ends with a hyphen (-)\\n if (length == 0 || bName[0] == 0x2d || bName[tail] == 0x2d) return true;\\n\\n // [0x30, 0x39] => [0-9]\\n // [0x61, 0x7a] => [a-z]\\n for (uint256 i; i < length; ++i) {\\n char = bName[i];\\n if (char == 0x2d) {\\n // Check consecutive hyphens\\n if (i != tail && bName[i + 1] == 0x2d) return true;\\n }\\n // Check for invalid character (not (-) || [0-9] || [a-z])\\n else if (!((char >= 0x30 && char <= 0x39) || (char >= 0x61 && char <= 0x7a))) {\\n return true;\\n }\\n }\\n\\n return false;\\n }\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function pack(string memory str) public pure returns (uint256 packed) {\\n assembly (\\\"memory-safe\\\") {\\n // We don't need to zero right pad the string,\\n // since this is our own custom non-standard packing scheme.\\n packed :=\\n mul(\\n // Load the length and the bytes.\\n mload(add(str, 0x1f)),\\n // `length != 0 && length < 32`. Abuses underflow.\\n // Assumes that the length is valid and within the block gas limit.\\n lt(sub(mload(str), 1), 0x1f)\\n )\\n }\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function packBulk(string[] memory strs) public pure returns (uint256[] memory packeds) {\\n uint256 length = strs.length;\\n packeds = new uint256[](length);\\n\\n for (uint256 i; i < length;) {\\n packeds[i] = pack(strs[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function setForbiddenWords(string[] calldata words, bool shouldForbid) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n uint256[] memory packedWords = packBulk(words);\\n _setForbiddenWords(packedWords, shouldForbid);\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function setForbiddenWords(uint256[] calldata packedWords, bool shouldForbid) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setForbiddenWords(packedWords, shouldForbid);\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function totalSubString(uint256 strlen) public view returns (uint256 total, uint256 min, uint256 max) {\\n (total, min, max) = strlen.totalSubString(_wordRange);\\n }\\n\\n /**\\n * @inheritdoc INameChecker\\n */\\n function getAllSubStrings(string calldata str) public view returns (string[] memory subStrings) {\\n subStrings = str.getAllSubStrings(_wordRange);\\n }\\n\\n /**\\n * @dev Set the forbidden status of packed words.\\n * @param packedWords An array of packed word representations.\\n * @param shouldForbid A boolean flag indicating whether to forbid or unforbid the words.\\n * @notice It ensures that packed words are not zero, indicating their validity.\\n * @notice Emits a `ForbiddenWordsUpdated` event upon successful execution.\\n */\\n function _setForbiddenWords(uint256[] memory packedWords, bool shouldForbid) internal {\\n uint256 length = packedWords.length;\\n uint256 strlen;\\n uint256 max;\\n uint256 min = type(uint256).max;\\n\\n for (uint256 i; i < length;) {\\n require(packedWords[i] != 0, \\\"NameChecker: invalid packed word\\\");\\n strlen = packedWords[i] >> 0xf8;\\n min = Math.min(min, strlen);\\n max = Math.max(max, strlen);\\n _forbiddenWordMap.setTo(packedWords[i], shouldForbid);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n if (shouldForbid) {\\n LibSubString.WordRange memory wordRange = _wordRange;\\n min = Math.min(min, wordRange.min);\\n max = Math.max(max, wordRange.max);\\n if (!(min == wordRange.min && max == wordRange.max)) _setWordRange(uint8(min), uint8(max));\\n }\\n\\n emit ForbiddenWordsUpdated(_msgSender(), length, shouldForbid);\\n }\\n\\n /**\\n * @dev Set the allowed word length range.\\n * @param min The minimum word length allowed.\\n * @param max The maximum word length allowed.\\n * @notice The minimum word length must be greater than 0, and it must not exceed the maximum word length.\\n */\\n function _setWordRange(uint8 min, uint8 max) internal {\\n require(min != 0 && min <= max, \\\"NameChecker: min word length > max word length\\\");\\n _wordRange = LibSubString.WordRange(min, max);\\n emit WordRangeUpdated(_msgSender(), min, max);\\n }\\n}\\n\",\"keccak256\":\"0x986e01fd05eedebfcf1ff887b88b195ae28e4b0dd8f82d465e68813a02bf22ef\",\"license\":\"MIT\"},\"src/interfaces/INameChecker.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\n/**\\n * @title INameChecker\\n * @dev The INameChecker interface provides functions for managing and checking substrings and forbidden words in strings.\\n */\\ninterface INameChecker {\\n /**\\n * @dev Emitted when the word range is updated.\\n * @param operator The address that updated the word range.\\n * @param min The minimum word length allowed.\\n * @param max The maximum word length allowed.\\n */\\n event WordRangeUpdated(address indexed operator, uint8 min, uint8 max);\\n\\n /**\\n * @dev Emitted when the forbidden words are updated.\\n * @param operator The address that updated the forbidden words list.\\n * @param wordCount The number of words in the list.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n event ForbiddenWordsUpdated(address indexed operator, uint256 wordCount, bool shouldForbid);\\n\\n /**\\n * @dev Returns an array of all substrings of a given string.\\n * @param str The input string to analyze.\\n * @return subStrings An array of all substrings.\\n */\\n function getAllSubStrings(string calldata str) external view returns (string[] memory subStrings);\\n\\n /**\\n * @dev Returns the total number of substrings for a given string length, as well as the minimum and maximum allowed word lengths.\\n * @param strlen The length of the input string.\\n * @return total The total number of substrings.\\n * @return min The minimum word length allowed.\\n * @return max The maximum word length allowed.\\n */\\n function totalSubString(uint256 strlen) external view returns (uint256 total, uint256 min, uint256 max);\\n\\n /**\\n * @dev Sets a list of forbidden words and specifies whether they should be forbidden.\\n * @param packedWords An array of packed word representations.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n function setForbiddenWords(uint256[] calldata packedWords, bool shouldForbid) external;\\n\\n /**\\n * @dev Sets a list of forbidden words and specifies whether they should be forbidden.\\n * @param words An array of raw words in string representations.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n function setForbiddenWords(string[] calldata words, bool shouldForbid) external;\\n\\n /**\\n * @dev Sets the minimum and maximum word lengths allowed.\\n * @param min The minimum word length.\\n * @param max The maximum word length.\\n */\\n function setWordRange(uint8 min, uint8 max) external;\\n\\n /**\\n * @dev Retrieves the current minimum and maximum word lengths allowed.\\n * @return min The minimum word length allowed.\\n * @return max The maximum word length allowed.\\n */\\n function getWordRange() external view returns (uint8 min, uint8 max);\\n\\n /**\\n * @notice Checks if a given name contains any forbidden characters or blacklisted words.\\n * @param name The string to check.\\n * @return true if the name contains forbidden characters or blacklisted words, false otherwise.\\n */\\n function forbidden(string calldata name) external view returns (bool);\\n\\n /**\\n * @notice Checks if a given name contains any blacklisted words.\\n * @param name The string to check.\\n * @return true if the name contains blacklisted words, false otherwise.\\n */\\n function containsBlacklistedWord(string calldata name) external view returns (bool);\\n\\n /**\\n * @notice Checks if a given name contains any invalid characters.\\n * requirements:\\n * - all characters in name must in range [a-z] or [0-9].\\n * @param name The string to check.\\n * @return true if the name contains invalid characters, false otherwise.\\n */\\n function containsInvalidCharacter(string calldata name) external pure returns (bool);\\n\\n /**\\n * @dev Packs a string into a single word representation.\\n * @param str The string to be packed.\\n * @notice Returns `uint256(0)` if the length is zero or greater than 31.\\n * @return packed The packed value of the input string.\\n */\\n function pack(string memory str) external pure returns (uint256 packed);\\n\\n /**\\n * @dev Packs an array of strings into their single word representations.\\n * @param strs The array of strings to be packed.\\n * @notice Returns an array of packed values, along with the minimum and maximum string lengths.\\n * @return packeds An array containing the packed values of the input strings.\\n */\\n function packBulk(string[] memory strs) external pure returns (uint256[] memory packeds);\\n}\\n\",\"keccak256\":\"0x9f2b9f08f8d60f565f93925ad64353f01feaad671440d865f45008d1304d4794\",\"license\":\"MIT\"},\"src/libraries/LibSubString.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\n/**\\n * @title LibSubString\\n * @dev A library for working with substrings and word ranges in strings.\\n */\\nlibrary LibSubString {\\n error TotalSubStringTooLarge(uint256 total);\\n /**\\n * @dev Struct representing a word range with minimum and maximum word lengths.\\n */\\n\\n struct WordRange {\\n uint8 min;\\n uint8 max;\\n }\\n\\n uint256 public constant MAX_SUBSTRING_SIZE = type(uint16).max;\\n\\n /**\\n * @dev Retrieves all possible substrings within a given string based on a specified word range.\\n * @param str The input string to analyze.\\n * @param wordRange The word range specifying the minimum and maximum word lengths.\\n * @return subStrings An array of all possible substrings within the input string.\\n */\\n function getAllSubStrings(string calldata str, WordRange memory wordRange)\\n internal\\n pure\\n returns (string[] memory subStrings)\\n {\\n unchecked {\\n uint256 length = bytes(str).length;\\n (uint256 total, uint256 min, uint256 max) = totalSubString(length, wordRange);\\n subStrings = new string[](total);\\n uint256 idx;\\n uint256 bLength;\\n\\n for (uint256 i; i < length; ++i) {\\n bLength = Math.min(i + max, length);\\n\\n for (uint256 j = i + min; j <= bLength; ++j) {\\n subStrings[idx++] = str[i:j];\\n }\\n }\\n }\\n }\\n\\n /**\\n * @dev Calculates the total number of possible substrings within a given string length based on a specified word range.\\n * @param len The length of the input string.\\n * @param wordRange The word range specifying the minimum and maximum word lengths.\\n * @return total The total number of possible substrings.\\n * @return min The minimum word length allowed.\\n * @return max The maximum word length allowed.\\n */\\n function totalSubString(uint256 len, WordRange memory wordRange)\\n internal\\n pure\\n returns (uint256 total, uint256 min, uint256 max)\\n {\\n unchecked {\\n min = Math.min(wordRange.min, len);\\n max = Math.min(wordRange.max, len);\\n uint256 range = max - min;\\n // `(range + 1)` represents the number of possible substring lengths in `range`.\\n // `(strlen - min + 1)` represents the number of possible starting positions for substrings with a minimum length of `min`.\\n total = (range + 1) * (len - min + 1) - (((range + 1) * range) >> 1);\\n if (total > MAX_SUBSTRING_SIZE) revert TotalSubStringTooLarge(total);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd0f0b1fad608356df7e9fcb8a133d1f639049fc5ff45ebdf8de59183fe50abb6\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182499, + "numDeployments": 1, + "storageLayout": { + "storage": [ + { + "astId": 50000, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 50003, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 48473, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_roles", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_struct(RoleData)48468_storage)" + }, + { + "astId": 48783, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_roleMembers", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)54352_storage)" + }, + { + "astId": 58252, + "contract": "src/NameChecker.sol:NameChecker", + "label": "____gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 58255, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_wordRange", + "offset": 0, + "slot": "53", + "type": "t_struct(WordRange)66492_storage" + }, + { + "astId": 58258, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_forbiddenWordMap", + "offset": 0, + "slot": "54", + "type": "t_struct(BitMap)53896_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)54352_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct EnumerableSet.AddressSet)", + "numberOfBytes": "32", + "value": "t_struct(AddressSet)54352_storage" + }, + "t_mapping(t_bytes32,t_struct(RoleData)48468_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct AccessControl.RoleData)", + "numberOfBytes": "32", + "value": "t_struct(RoleData)48468_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(AddressSet)54352_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.AddressSet", + "numberOfBytes": "64", + "members": [ + { + "astId": 54351, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_inner", + "offset": 0, + "slot": "0", + "type": "t_struct(Set)54037_storage" + } + ] + }, + "t_struct(BitMap)53896_storage": { + "encoding": "inplace", + "label": "struct BitMaps.BitMap", + "numberOfBytes": "32", + "members": [ + { + "astId": 53895, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_data", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_uint256)" + } + ] + }, + "t_struct(RoleData)48468_storage": { + "encoding": "inplace", + "label": "struct AccessControl.RoleData", + "numberOfBytes": "64", + "members": [ + { + "astId": 48465, + "contract": "src/NameChecker.sol:NameChecker", + "label": "members", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 48467, + "contract": "src/NameChecker.sol:NameChecker", + "label": "adminRole", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ] + }, + "t_struct(Set)54037_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.Set", + "numberOfBytes": "64", + "members": [ + { + "astId": 54032, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_values", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "astId": 54036, + "contract": "src/NameChecker.sol:NameChecker", + "label": "_indexes", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_struct(WordRange)66492_storage": { + "encoding": "inplace", + "label": "struct LibSubString.WordRange", + "numberOfBytes": "32", + "members": [ + { + "astId": 66489, + "contract": "src/NameChecker.sol:NameChecker", + "label": "min", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 66491, + "contract": "src/NameChecker.sol:NameChecker", + "label": "max", + "offset": 1, + "slot": "0", + "type": "t_uint8" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "containsBlacklistedWord(string)": { + "notice": "Checks if a given name contains any blacklisted words." + }, + "containsInvalidCharacter(string)": { + "notice": "Checks if a given name contains any invalid characters. requirements: - all characters in name must in range [a-z] or [0-9]." + }, + "forbidden(string)": { + "notice": "Checks if a given name contains any forbidden characters or blacklisted words." + }, + "pack(string)": { + "notice": "Returns `uint256(0)` if the length is zero or greater than 31." + }, + "packBulk(string[])": { + "notice": "Returns an array of packed values, along with the minimum and maximum string lengths." + } + } + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/NameCheckerProxy.json b/deployments/ronin-testnet/NameCheckerProxy.json new file mode 100644 index 00000000..90d5cf86 --- /dev/null +++ b/deployments/ronin-testnet/NameCheckerProxy.json @@ -0,0 +1,120 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "address": "0xBc07DFdA8f91AAe03141b98278CB2321e36eC2F3", + "args": "0xfb3809be000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003", + "blockNumber": 21224275, + "bytecode": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "chainId": 2021, + "contractName": "TransparentUpgradeableProxy", + "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.", + "methods": { + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + } + }, + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is changed." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Emitted when the beacon is changed.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\\n * does not implement this interface directly, and some of its functions are implemented by an internal dispatch\\n * mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\\n * include them in the ABI so this interface must be used to interact with it.\\n */\\ninterface ITransparentUpgradeableProxy is IERC1967 {\\n function admin() external view returns (address);\\n\\n function implementation() external view returns (address);\\n\\n function changeAdmin(address) external;\\n\\n function upgradeTo(address) external;\\n\\n function upgradeToAndCall(address, bytes memory) external payable;\\n}\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n *\\n * NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\\n * inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch\\n * mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\\n * fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\\n * implementation.\\n *\\n * WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler\\n * will not check that there are no selector conflicts, due to the note above. A selector clash between any new function\\n * and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could\\n * render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n *\\n * CAUTION: This modifier is deprecated, as it could cause issues if the modified function has arguments, and the\\n * implementation provides a function with the same selector.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior\\n */\\n function _fallback() internal virtual override {\\n if (msg.sender == _getAdmin()) {\\n bytes memory ret;\\n bytes4 selector = msg.sig;\\n if (selector == ITransparentUpgradeableProxy.upgradeTo.selector) {\\n ret = _dispatchUpgradeTo();\\n } else if (selector == ITransparentUpgradeableProxy.upgradeToAndCall.selector) {\\n ret = _dispatchUpgradeToAndCall();\\n } else if (selector == ITransparentUpgradeableProxy.changeAdmin.selector) {\\n ret = _dispatchChangeAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.admin.selector) {\\n ret = _dispatchAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.implementation.selector) {\\n ret = _dispatchImplementation();\\n } else {\\n revert(\\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n }\\n assembly {\\n return(add(ret, 0x20), mload(ret))\\n }\\n } else {\\n super._fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function _dispatchAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address admin = _getAdmin();\\n return abi.encode(admin);\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function _dispatchImplementation() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address implementation = _implementation();\\n return abi.encode(implementation);\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _dispatchChangeAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newAdmin = abi.decode(msg.data[4:], (address));\\n _changeAdmin(newAdmin);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n */\\n function _dispatchUpgradeTo() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newImplementation = abi.decode(msg.data[4:], (address));\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n */\\n function _dispatchUpgradeToAndCall() private returns (bytes memory) {\\n (address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));\\n _upgradeToAndCall(newImplementation, data, true);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * CAUTION: This function is deprecated. Use {ERC1967Upgrade-_getAdmin} instead.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev To keep this contract fully transparent, all `ifAdmin` functions must be payable. This helper is here to\\n * emulate some proxy functions being non-payable while still allowing value to pass through.\\n */\\n function _requireZeroValue() private {\\n require(msg.value == 0);\\n }\\n}\\n\",\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n struct StringSlot {\\n string value;\\n }\\n\\n struct BytesSlot {\\n bytes value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n */\\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n */\\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n */\\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n */\\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182500, + "numDeployments": 1, + "storageLayout": { + "storage": [], + "types": {} + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/PublicResolverLogic.json b/deployments/ronin-testnet/PublicResolverLogic.json new file mode 100644 index 00000000..2682ea24 --- /dev/null +++ b/deployments/ronin-testnet/PublicResolverLogic.json @@ -0,0 +1,1680 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidContentType", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "contentType", + "type": "uint256" + } + ], + "name": "ABIChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "AddrChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "Approved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "hash", + "type": "bytes" + } + ], + "name": "ContentHashChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "name", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "resource", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "record", + "type": "bytes" + } + ], + "name": "DNSRecordChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "name", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "resource", + "type": "uint16" + } + ], + "name": "DNSRecordDeleted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "lastzonehash", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "zonehash", + "type": "bytes" + } + ], + "name": "DNSZonehashChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "implementer", + "type": "address" + } + ], + "name": "InterfaceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "NameChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "x", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "y", + "type": "bytes32" + } + ], + "name": "PubkeyChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "string", + "name": "indexedKey", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "key", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + } + ], + "name": "TextChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "newVersion", + "type": "uint64" + } + ], + "name": "VersionChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "contentTypes", + "type": "uint256" + } + ], + "name": "ABI", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "addr", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "clearRecords", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "contentHash", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "name", + "type": "bytes32" + }, + { + "internalType": "uint16", + "name": "resource", + "type": "uint16" + } + ], + "name": "dnsRecord", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRNSUnified", + "outputs": [ + { + "internalType": "contract INSUnified", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getReverseRegistrar", + "outputs": [ + { + "internalType": "contract INSReverseRegistrar", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "name", + "type": "bytes32" + } + ], + "name": "hasDNSRecords", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract INSUnified", + "name": "rnsUnified", + "type": "address" + }, + { + "internalType": "contract INSReverseRegistrar", + "name": "reverseRegistrar", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + } + ], + "name": "interfaceImplementer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isAuthorized", + "outputs": [ + { + "internalType": "bool", + "name": "authorized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "multicallWithNodeCheck", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "pubkey", + "outputs": [ + { + "internalType": "bytes32", + "name": "x", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "y", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "recordVersions", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "contentType", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "setABI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "addr_", + "type": "address" + } + ], + "name": "setAddr", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "hash", + "type": "bytes" + } + ], + "name": "setContentHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "setDNSRecords", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "implementer", + "type": "address" + } + ], + "name": "setInterface", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "newName", + "type": "string" + } + ], + "name": "setName", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "x", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "y", + "type": "bytes32" + } + ], + "name": "setPubkey", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "key", + "type": "string" + }, + { + "internalType": "string", + "name": "value", + "type": "string" + } + ], + "name": "setText", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "hash", + "type": "bytes" + } + ], + "name": "setZonehash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "key", + "type": "string" + } + ], + "name": "text", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "requireSuccess", + "type": "bool" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "name": "tryMulticall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "zonehash", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "address": "0x933Cd2272831334F1E46977BCc36153c8027Dee8", + "args": "0x", + "blockNumber": 21224275, + "bytecode": "0x60806040526200000e62000014565b620000d8565b6101cd54610100900460ff1615620000825760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b6101cd5460ff90811614620000d6576101cd805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612b7680620000e86000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063691f343111610104578063ac9650d8116100a2578063d700ff3311610071578063d700ff3314610486578063e32954eb146104c7578063e59d895d146104da578063f8014891146104ed57600080fd5b8063ac9650d8146103e5578063c869023314610405578063ce3decdc14610460578063d5fa2b001461047357600080fd5b80638c843314116100de5780638c8433141461039a578063956db465146103ac578063a821a728146103bf578063a8fa5682146103d257600080fd5b8063691f34311461036157806370687fcb14610374578063773722131461038757600080fd5b80633603d758116101715780634cbf6ba41161014b5780634cbf6ba4146102ce57806359d1d43c1461031b5780635c98042b1461033b578063623195b01461034e57600080fd5b80633603d758146102955780633b3b57de146102a8578063485cc955146102bb57600080fd5b8063124a319c116101ad578063124a319c146102245780632203ab561461024f578063237a78fb1461027057806329cd62ea1461028257600080fd5b806301ffc9a7146101d45780630af179d7146101fc57806310f13a8c14610211575b600080fd5b6101e76101e236600461219e565b610500565b60405190151581526020015b60405180910390f35b61020f61020a3660046121fc565b610511565b005b61020f61021f366004612247565b61052d565b6102376102323660046122c0565b61054d565b6040516001600160a01b0390911681526020016101f3565b61026261025d3660046122f0565b610745565b6040516101f3929190612362565b610201546001600160a01b0316610237565b61020f61029036600461237b565b61087e565b61020f6102a33660046123a7565b610894565b6102376102b63660046123a7565b6108ac565b61020f6102c93660046123d5565b61091b565b6101e76102dc3660046122f0565b6000828152603260209081526040808320546001600160401b0316835260ff825280832094835293815283822092825291909152205461ffff16151590565b61032e6103293660046121fc565b610a63565b6040516101f39190612403565b61032e6103493660046123a7565b610b45565b61020f61035c366004612416565b610c06565b61032e61036f3660046123a7565b610c24565b61020f6103823660046121fc565b610dbf565b61020f6103953660046121fc565b610dd5565b610200546001600160a01b0316610237565b6101e76103ba366004612468565b610e20565b61032e6103cd3660046123a7565b610ea5565b61032e6103e036600461248d565b610ee0565b6103f86103f3366004612511565b610f2f565b6040516101f39190612552565b61044b6104133660046123a7565b6000818152603260209081526040808320546001600160401b0316835261019982528083209383529290522080546001909101549091565b604080519283526020830191909152016101f3565b61020f61046e3660046121fc565b610f44565b61020f610481366004612468565b610f5a565b6104af6104943660046123a7565b6000908152603260205260409020546001600160401b031690565b6040516001600160401b0390911681526020016101f3565b6103f86104d53660046125b4565b610fb8565b61020f6104e83660046125f2565b611099565b6103f86104fb366004612637565b6110af565b600061050b826110bc565b92915050565b8261051c81336110e1565b610527848484611143565b50505050565b8461053881336110e1565b610545868686868661133a565b505050505050565b6000828152603260209081526040808320546001600160401b03168352610133825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156105a357905061050b565b60006105ae856108ac565b90506001600160a01b0381166105c95760009250505061050b565b6040516301ffc9a760e01b60248201526000906060906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106229190612672565b600060405180830381855afa9150503d806000811461065d576040519150601f19603f3d011682016040523d82523d6000602084013e610662565b606091505b50909250905061067282826113f5565b61068357600094505050505061050b565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106d99190612672565b600060405180830381855afa9150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50909250905061072982826113f5565b61073a57600094505050505061050b565b509095945050505050565b6000828152603260209081526040808320546001600160401b0316835260658252808320858452909152812060609060015b84811161085e57808516158015906107a75750600081815260208390526040812080546107a39061268e565b9050115b1561085657808260008381526020019081526020016000208080546107cb9061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546107f79061268e565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b50505050509050935093505050610877565b60011b610777565b5060006040518060200160405280600081525092509250505b9250929050565b8261088981336110e1565b610527848484611435565b8061089f81336110e1565b6108a8826114bd565b5050565b610200546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa1580156108f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b91906126c8565b6101cd54610100900460ff161580801561093d57506101cd54600160ff909116105b806109585750303b15801561095857506101cd5460ff166001145b6109c05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6101cd805460ff1916600117905580156109e5576101cd805461ff0019166101001790555b61020080546001600160a01b038086166001600160a01b0319928316179092556102018054928516929091169190911790558015610a5e576101cd805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000838152603260209081526040808320546001600160401b031683526101cc825280832086845290915290819020905160609190610aa590859085906126e5565b90815260200160405180910390208054610abe9061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea9061268e565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b505050505090509392505050565b6000818152603260209081526040808320546001600160401b0316835261010082528083208484529091529020805460609190610b819061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bad9061268e565b8015610bfa5780601f10610bcf57610100808354040283529160200191610bfa565b820191906000526020600020905b815481529060010190602001808311610bdd57829003601f168201915b50505050509050919050565b83610c1181336110e1565b610c1d85858585611527565b5050505050565b61020154604051635c9fcd8560e11b8152600481018390526060916000916001600160a01b039091169063b93f9b0a90602401602060405180830381865afa158015610c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9891906126c8565b90506000610ca5846115c5565b610200546040516304c3ccb160e11b81529192506000916001600160a01b0390911690630987996290610cdc908590600401612403565b602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d91906126f5565b610200546040516331a9108f60e11b8152600481018390529192506001600160a01b0385811692911690636352211e90602401602060405180830381865afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9191906126c8565b6001600160a01b031614610db45760405180602001604052806000815250610db6565b815b95945050505050565b82610dca81336110e1565b610527848484611601565b82610de081336110e1565b6105278484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166b92505050565b6102005460405163fd3fa91960e01b81526001600160a01b0383811660048301526024820185905260186044830152600092169063fd3fa919906064016040805180830381865afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d919061270e565b509392505050565b6000818152603260209081526040808320546001600160401b0316835260cb82528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260fe82528083208684528252808320858452825280832061ffff851684529091529020805460609190610abe9061268e565b6060610f3d600184846116df565b9392505050565b82610f4f81336110e1565b6105278484846117fb565b81610f6581336110e1565b60405162461bcd60e51b815260206004820152602260248201527f5075626c69635265736f6c7665723a2043616e6e6f7420736574206164647265604482015261737360f01b60648201526084016109b7565b606083156110855760005b8281101561108357838382818110610fdd57610fdd61273d565b9050602002810190610fef9190612753565b610ffe91602491600491612799565b611007916127c3565b851461107b5760405162461bcd60e51b815260206004820152603960248201527f5075626c69635265736f6c7665723a20416c6c207265636f726473206d75737460448201527f20686176652061206d61746368696e67206e616d65686173680000000000000060648201526084016109b7565b600101610fc3565b505b611091600184846116df565b949350505050565b826110a481336110e1565b61052784848461192c565b60606110918484846116df565b60006001600160e01b03198216635497184960e01b148061050b575061050b826119c1565b6110eb8282610e20565b6108a85760405162461bcd60e51b815260206004820152602360248201527f5075626c69635265736f6c7665723a20756e617574686f72697a65642063616c6044820152623632b960e91b60648201526084016109b7565b6000838152603260209081526040808320548151601f86018490048402810184019092528482528392606092839285926001600160401b039091169183916111aa9183918c908c908190840183828082843760009201919091525092939250506119e69050565b90505b805151602082015110156112d4578661ffff1660000361121257806040015196506111d781611a47565b9450846040516020016111ea9190612672565b60405160208183030381529060405280519060200120925061120b81611a68565b93506112c6565b600061121d82611a47565b9050816040015161ffff168861ffff16141580611241575061123f8682611a84565b155b156112c45761129d8b878a8d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801518d91506112949082906127f7565b8b51158a611aa2565b8160400151975081602001519650809550858051906020012093506112c182611a68565b94505b505b6112cf81611d0a565b6111ad565b5083511561132f5761132f8985888b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061132691508290508e6127f7565b89511588611aa2565b505050505050505050565b6000858152603260209081526040808320546001600160401b031683526101cc82528083208884529091529081902090518391839161137c90889088906126e5565b90815260200160405180910390209182611397929190612866565b5083836040516113a89291906126e5565b6040518091039020857f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1868686866040516113e6949392919061294e565b60405180910390a35050505050565b60008280611404575060208251105b80610f3d575081601f8151811061141d5761141d61273d565b01602001516001600160f81b03191615905092915050565b6040805180820182528381526020808201848152600087815260328352848120546001600160401b03168152610199835284812088825283528490209251835551600190920191909155815184815290810183905284917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a2505050565b60008181526032602090815260409182902080546001600160401b038082166001011667ffffffffffffffff199091168117909155915191825282917fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a250565b826115336001826127f7565b161561155257604051631e76820d60e31b815260040160405180910390fd5b6000848152603260209081526040808320546001600160401b031683526065825280832087845282528083208684529091529020611591828483612866565b50604051839085907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a350505050565b6000818152603260209081526040808320546001600160401b0316835261016682528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260cb82528083208684529091529020611638828483612866565b50827ff138098ddddc53c41c8649e6533fdf517348a8e9d24e9db5e5628db793fb76b483836040516114b0929190612980565b6000828152603260209081526040808320546001600160401b03168352610166825280832085845290915290206116a28282612994565b50817fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7826040516116d39190612403565b60405180910390a25050565b606081806001600160401b038111156116fa576116fa61280a565b60405190808252806020026020018201604052801561172d57816020015b60608152602001906001900390816117185790505b5091506000606060005b838110156117f057308787838181106117525761175261273d565b90506020028101906117649190612753565b6040516117729291906126e5565b600060405180830381855af49150503d80600081146117ad576040519150601f19603f3d011682016040523d82523d6000602084013e6117b2565b606091505b50909350915087156117ca576117ca83151583611df2565b818582815181106117dd576117dd61273d565b6020908102919091010152600101611737565b505050509392505050565b6000838152603260209081526040808320546001600160401b03168084526101008352818420878552909252822080549192916118379061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546118639061268e565b80156118b05780601f10611885576101008083540402835291602001916118b0565b820191906000526020600020905b81548152906001019060200180831161189357829003601f168201915b505050506001600160401b0384166000908152610100602090815260408083208a845290915290209192506118e89050848683612866565b50847f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f8582868660405161191d93929190612a53565b60405180910390a25050505050565b6000838152603260209081526040808320546001600160401b03168352610133825280832086845282528083206001600160e01b031986168085529083529281902080546001600160a01b0319166001600160a01b038616908117909155905190815285917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a3505050565b60006001600160e01b031982166304920eeb60e41b148061050b575061050b82611e15565b611a346040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c0810182905261050b81611d0a565b6020810151815160609161050b91611a5f9082611e3a565b84519190611e94565b60a081015160c082015160609161050b91611a5f9082906127f7565b600081518351148015610f3d5750610f3d8360008460008751611f0a565b865160208801206000611ab6878787611e94565b90508315611bdd576001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611b009061268e565b159050611b5e576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611b4283612a83565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611b9e91612132565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611bd0929190612aa1565b60405180910390a2611cfe565b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611c1f9061268e565b9050600003611c7f576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611c6383612ac7565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611cc08282612994565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611cf593929190612ae8565b60405180910390a25b50505050505050505050565b60c08101516020820181905281515111611d215750565b6000611d3582600001518360200151611e3a565b8260200151611d449190612b17565b8251909150611d539082611f2d565b61ffff166040830152611d67600282612b17565b8251909150611d769082611f2d565b61ffff166060830152611d8a600282612b17565b8251909150611d999082611f55565b63ffffffff166080830152611daf600482612b17565b8251909150600090611dc19083611f2d565b61ffff169050611dd2600283612b17565b60a084018190529150611de58183612b17565b60c0909301929092525050565b816108a85780518015611e06578060208301fd5b5063350c20f16000526004601cfd5b60006001600160e01b0319821663e1a460d960e01b148061050b575061050b82611f7f565b6000815b83518110611e4e57611e4e612b2a565b6000611e5a8583611fa4565b60ff169050611e6a816001612b17565b611e749083612b17565b915080600003611e845750611e8a565b50611e3e565b61109183826127f7565b8251606090611ea38385612b17565b1115611eae57600080fd5b6000826001600160401b03811115611ec857611ec861280a565b6040519080825280601f01601f191660200182016040528015611ef2576020820181803683370190505b5090506020808201908686010161073a828287611fc8565b6000611f1784848461201e565b611f2287878561201e565b149695505050505050565b8151600090611f3d836002612b17565b1115611f4857600080fd5b50016002015161ffff1690565b8151600090611f65836004612b17565b1115611f7057600080fd5b50016004015163ffffffff1690565b60006001600160e01b03198216630f140b1160e11b148061050b575061050b82612042565b6000828281518110611fb857611fb861273d565b016020015160f81c905092915050565b602081106120005781518352611fdf602084612b17565b9250611fec602083612b17565b9150611ff96020826127f7565b9050611fc8565b905182516020929092036101000a6000190180199091169116179052565b825160009061202d8385612b17565b111561203857600080fd5b5091016020012090565b60006001600160e01b0319821663f7d7b8c160e01b148061050b575061050b8260006001600160e01b0319821663a20b2f5560e01b148061209357506001600160e01b031982166392a5e8f760e01b145b8061050b575061050b8260006001600160e01b0319821663d849d8e360e01b148061050b575061050b8260006001600160e01b03198216637760be6f60e11b148061050b575061050b8260006001600160e01b031982166320191f7360e11b148061050b575061050b8260006001600160e01b0319821663e103286b60e01b148061050b57506301ffc9a760e01b6001600160e01b031983161461050b565b50805461213e9061268e565b6000825580601f1061214e575050565b601f01602090049060005260206000209081019061216c919061216f565b50565b5b808211156121845760008155600101612170565b5090565b6001600160e01b03198116811461216c57600080fd5b6000602082840312156121b057600080fd5b8135610f3d81612188565b60008083601f8401126121cd57600080fd5b5081356001600160401b038111156121e457600080fd5b60208301915083602082850101111561087757600080fd5b60008060006040848603121561221157600080fd5b8335925060208401356001600160401b0381111561222e57600080fd5b61223a868287016121bb565b9497909650939450505050565b60008060008060006060868803121561225f57600080fd5b8535945060208601356001600160401b038082111561227d57600080fd5b61228989838a016121bb565b909650945060408801359150808211156122a257600080fd5b506122af888289016121bb565b969995985093965092949392505050565b600080604083850312156122d357600080fd5b8235915060208301356122e581612188565b809150509250929050565b6000806040838503121561230357600080fd5b50508035926020909101359150565b60005b8381101561232d578181015183820152602001612315565b50506000910152565b6000815180845261234e816020860160208601612312565b601f01601f19169290920160200192915050565b8281526040602082015260006110916040830184612336565b60008060006060848603121561239057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156123b957600080fd5b5035919050565b6001600160a01b038116811461216c57600080fd5b600080604083850312156123e857600080fd5b82356123f3816123c0565b915060208301356122e5816123c0565b602081526000610f3d6020830184612336565b6000806000806060858703121561242c57600080fd5b843593506020850135925060408501356001600160401b0381111561245057600080fd5b61245c878288016121bb565b95989497509550505050565b6000806040838503121561247b57600080fd5b8235915060208301356122e5816123c0565b6000806000606084860312156124a257600080fd5b8335925060208401359150604084013561ffff811681146124c257600080fd5b809150509250925092565b60008083601f8401126124df57600080fd5b5081356001600160401b038111156124f657600080fd5b6020830191508360208260051b850101111561087757600080fd5b6000806020838503121561252457600080fd5b82356001600160401b0381111561253a57600080fd5b612546858286016124cd565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156125a757603f19888603018452612595858351612336565b94509285019290850190600101612579565b5092979650505050505050565b6000806000604084860312156125c957600080fd5b8335925060208401356001600160401b038111156125e657600080fd5b61223a868287016124cd565b60008060006060848603121561260757600080fd5b83359250602084013561261981612188565b915060408401356124c2816123c0565b801515811461216c57600080fd5b60008060006040848603121561264c57600080fd5b833561265781612629565b925060208401356001600160401b038111156125e657600080fd5b60008251612684818460208701612312565b9190910192915050565b600181811c908216806126a257607f821691505b6020821081036126c257634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156126da57600080fd5b8151610f3d816123c0565b8183823760009101908152919050565b60006020828403121561270757600080fd5b5051919050565b6000806040838503121561272157600080fd5b825161272c81612629565b60208401519092506122e581612188565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261276a57600080fd5b8301803591506001600160401b0382111561278457600080fd5b60200191503681900382131561087757600080fd5b600080858511156127a957600080fd5b838611156127b657600080fd5b5050820193919092039150565b8035602083101561050b57600019602084900360031b1b1692915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561050b5761050b6127e1565b634e487b7160e01b600052604160045260246000fd5b601f821115610a5e57600081815260208120601f850160051c810160208610156128475750805b601f850160051c820191505b8181101561054557828155600101612853565b6001600160401b0383111561287d5761287d61280a565b6128918361288b835461268e565b83612820565b6000601f8411600181146128c557600085156128ad5750838201355b600019600387901b1c1916600186901b178355610c1d565b600083815260209020601f19861690835b828110156128f657868501358255602094850194600190920191016128d6565b50868210156129135760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612962604083018688612925565b8281036020840152612975818587612925565b979650505050505050565b602081526000611091602083018486612925565b81516001600160401b038111156129ad576129ad61280a565b6129c1816129bb845461268e565b84612820565b602080601f8311600181146129f657600084156129de5750858301515b600019600386901b1c1916600185901b178555610545565b600085815260208120601f198616915b82811015612a2557888601518255948401946001909101908401612a06565b5085821015612a435787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000612a666040830186612336565b8281036020840152612a79818587612925565b9695505050505050565b600061ffff821680612a9757612a976127e1565b6000190192915050565b604081526000612ab46040830185612336565b905061ffff831660208301529392505050565b600061ffff808316818103612ade57612ade6127e1565b6001019392505050565b606081526000612afb6060830186612336565b61ffff851660208401528281036040840152612a798185612336565b8082018082111561050b5761050b6127e1565b634e487b7160e01b600052600160045260246000fdfea264697066735822122071bbc4bff126add9e96885c48993935407bf76c98e0f32dfd2c1c91c3f35e40664736f6c63430008150033", + "chainId": 2021, + "contractName": "PublicResolver", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063691f343111610104578063ac9650d8116100a2578063d700ff3311610071578063d700ff3314610486578063e32954eb146104c7578063e59d895d146104da578063f8014891146104ed57600080fd5b8063ac9650d8146103e5578063c869023314610405578063ce3decdc14610460578063d5fa2b001461047357600080fd5b80638c843314116100de5780638c8433141461039a578063956db465146103ac578063a821a728146103bf578063a8fa5682146103d257600080fd5b8063691f34311461036157806370687fcb14610374578063773722131461038757600080fd5b80633603d758116101715780634cbf6ba41161014b5780634cbf6ba4146102ce57806359d1d43c1461031b5780635c98042b1461033b578063623195b01461034e57600080fd5b80633603d758146102955780633b3b57de146102a8578063485cc955146102bb57600080fd5b8063124a319c116101ad578063124a319c146102245780632203ab561461024f578063237a78fb1461027057806329cd62ea1461028257600080fd5b806301ffc9a7146101d45780630af179d7146101fc57806310f13a8c14610211575b600080fd5b6101e76101e236600461219e565b610500565b60405190151581526020015b60405180910390f35b61020f61020a3660046121fc565b610511565b005b61020f61021f366004612247565b61052d565b6102376102323660046122c0565b61054d565b6040516001600160a01b0390911681526020016101f3565b61026261025d3660046122f0565b610745565b6040516101f3929190612362565b610201546001600160a01b0316610237565b61020f61029036600461237b565b61087e565b61020f6102a33660046123a7565b610894565b6102376102b63660046123a7565b6108ac565b61020f6102c93660046123d5565b61091b565b6101e76102dc3660046122f0565b6000828152603260209081526040808320546001600160401b0316835260ff825280832094835293815283822092825291909152205461ffff16151590565b61032e6103293660046121fc565b610a63565b6040516101f39190612403565b61032e6103493660046123a7565b610b45565b61020f61035c366004612416565b610c06565b61032e61036f3660046123a7565b610c24565b61020f6103823660046121fc565b610dbf565b61020f6103953660046121fc565b610dd5565b610200546001600160a01b0316610237565b6101e76103ba366004612468565b610e20565b61032e6103cd3660046123a7565b610ea5565b61032e6103e036600461248d565b610ee0565b6103f86103f3366004612511565b610f2f565b6040516101f39190612552565b61044b6104133660046123a7565b6000818152603260209081526040808320546001600160401b0316835261019982528083209383529290522080546001909101549091565b604080519283526020830191909152016101f3565b61020f61046e3660046121fc565b610f44565b61020f610481366004612468565b610f5a565b6104af6104943660046123a7565b6000908152603260205260409020546001600160401b031690565b6040516001600160401b0390911681526020016101f3565b6103f86104d53660046125b4565b610fb8565b61020f6104e83660046125f2565b611099565b6103f86104fb366004612637565b6110af565b600061050b826110bc565b92915050565b8261051c81336110e1565b610527848484611143565b50505050565b8461053881336110e1565b610545868686868661133a565b505050505050565b6000828152603260209081526040808320546001600160401b03168352610133825280832085845282528083206001600160e01b0319851684529091528120546001600160a01b031680156105a357905061050b565b60006105ae856108ac565b90506001600160a01b0381166105c95760009250505061050b565b6040516301ffc9a760e01b60248201526000906060906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106229190612672565b600060405180830381855afa9150503d806000811461065d576040519150601f19603f3d011682016040523d82523d6000602084013e610662565b606091505b50909250905061067282826113f5565b61068357600094505050505061050b565b6040516001600160e01b0319871660248201526001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b179052516106d99190612672565b600060405180830381855afa9150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50909250905061072982826113f5565b61073a57600094505050505061050b565b509095945050505050565b6000828152603260209081526040808320546001600160401b0316835260658252808320858452909152812060609060015b84811161085e57808516158015906107a75750600081815260208390526040812080546107a39061268e565b9050115b1561085657808260008381526020019081526020016000208080546107cb9061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546107f79061268e565b80156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b50505050509050935093505050610877565b60011b610777565b5060006040518060200160405280600081525092509250505b9250929050565b8261088981336110e1565b610527848484611435565b8061089f81336110e1565b6108a8826114bd565b5050565b610200546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e90602401602060405180830381865afa1580156108f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b91906126c8565b6101cd54610100900460ff161580801561093d57506101cd54600160ff909116105b806109585750303b15801561095857506101cd5460ff166001145b6109c05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6101cd805460ff1916600117905580156109e5576101cd805461ff0019166101001790555b61020080546001600160a01b038086166001600160a01b0319928316179092556102018054928516929091169190911790558015610a5e576101cd805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000838152603260209081526040808320546001600160401b031683526101cc825280832086845290915290819020905160609190610aa590859085906126e5565b90815260200160405180910390208054610abe9061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea9061268e565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b505050505090509392505050565b6000818152603260209081526040808320546001600160401b0316835261010082528083208484529091529020805460609190610b819061268e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bad9061268e565b8015610bfa5780601f10610bcf57610100808354040283529160200191610bfa565b820191906000526020600020905b815481529060010190602001808311610bdd57829003601f168201915b50505050509050919050565b83610c1181336110e1565b610c1d85858585611527565b5050505050565b61020154604051635c9fcd8560e11b8152600481018390526060916000916001600160a01b039091169063b93f9b0a90602401602060405180830381865afa158015610c74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9891906126c8565b90506000610ca5846115c5565b610200546040516304c3ccb160e11b81529192506000916001600160a01b0390911690630987996290610cdc908590600401612403565b602060405180830381865afa158015610cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1d91906126f5565b610200546040516331a9108f60e11b8152600481018390529192506001600160a01b0385811692911690636352211e90602401602060405180830381865afa158015610d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9191906126c8565b6001600160a01b031614610db45760405180602001604052806000815250610db6565b815b95945050505050565b82610dca81336110e1565b610527848484611601565b82610de081336110e1565b6105278484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061166b92505050565b6102005460405163fd3fa91960e01b81526001600160a01b0383811660048301526024820185905260186044830152600092169063fd3fa919906064016040805180830381865afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d919061270e565b509392505050565b6000818152603260209081526040808320546001600160401b0316835260cb82528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260fe82528083208684528252808320858452825280832061ffff851684529091529020805460609190610abe9061268e565b6060610f3d600184846116df565b9392505050565b82610f4f81336110e1565b6105278484846117fb565b81610f6581336110e1565b60405162461bcd60e51b815260206004820152602260248201527f5075626c69635265736f6c7665723a2043616e6e6f7420736574206164647265604482015261737360f01b60648201526084016109b7565b606083156110855760005b8281101561108357838382818110610fdd57610fdd61273d565b9050602002810190610fef9190612753565b610ffe91602491600491612799565b611007916127c3565b851461107b5760405162461bcd60e51b815260206004820152603960248201527f5075626c69635265736f6c7665723a20416c6c207265636f726473206d75737460448201527f20686176652061206d61746368696e67206e616d65686173680000000000000060648201526084016109b7565b600101610fc3565b505b611091600184846116df565b949350505050565b826110a481336110e1565b61052784848461192c565b60606110918484846116df565b60006001600160e01b03198216635497184960e01b148061050b575061050b826119c1565b6110eb8282610e20565b6108a85760405162461bcd60e51b815260206004820152602360248201527f5075626c69635265736f6c7665723a20756e617574686f72697a65642063616c6044820152623632b960e91b60648201526084016109b7565b6000838152603260209081526040808320548151601f86018490048402810184019092528482528392606092839285926001600160401b039091169183916111aa9183918c908c908190840183828082843760009201919091525092939250506119e69050565b90505b805151602082015110156112d4578661ffff1660000361121257806040015196506111d781611a47565b9450846040516020016111ea9190612672565b60405160208183030381529060405280519060200120925061120b81611a68565b93506112c6565b600061121d82611a47565b9050816040015161ffff168861ffff16141580611241575061123f8682611a84565b155b156112c45761129d8b878a8d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505060208801518d91506112949082906127f7565b8b51158a611aa2565b8160400151975081602001519650809550858051906020012093506112c182611a68565b94505b505b6112cf81611d0a565b6111ad565b5083511561132f5761132f8985888b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c925061132691508290508e6127f7565b89511588611aa2565b505050505050505050565b6000858152603260209081526040808320546001600160401b031683526101cc82528083208884529091529081902090518391839161137c90889088906126e5565b90815260200160405180910390209182611397929190612866565b5083836040516113a89291906126e5565b6040518091039020857f448bc014f1536726cf8d54ff3d6481ed3cbc683c2591ca204274009afa09b1a1868686866040516113e6949392919061294e565b60405180910390a35050505050565b60008280611404575060208251105b80610f3d575081601f8151811061141d5761141d61273d565b01602001516001600160f81b03191615905092915050565b6040805180820182528381526020808201848152600087815260328352848120546001600160401b03168152610199835284812088825283528490209251835551600190920191909155815184815290810183905284917f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e4691015b60405180910390a2505050565b60008181526032602090815260409182902080546001600160401b038082166001011667ffffffffffffffff199091168117909155915191825282917fc6621ccb8f3f5a04bb6502154b2caf6adf5983fe76dfef1cfc9c42e3579db444910160405180910390a250565b826115336001826127f7565b161561155257604051631e76820d60e31b815260040160405180910390fd5b6000848152603260209081526040808320546001600160401b031683526065825280832087845282528083208684529091529020611591828483612866565b50604051839085907faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe390600090a350505050565b6000818152603260209081526040808320546001600160401b0316835261016682528083208484529091529020805460609190610b819061268e565b6000838152603260209081526040808320546001600160401b0316835260cb82528083208684529091529020611638828483612866565b50827ff138098ddddc53c41c8649e6533fdf517348a8e9d24e9db5e5628db793fb76b483836040516114b0929190612980565b6000828152603260209081526040808320546001600160401b03168352610166825280832085845290915290206116a28282612994565b50817fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7826040516116d39190612403565b60405180910390a25050565b606081806001600160401b038111156116fa576116fa61280a565b60405190808252806020026020018201604052801561172d57816020015b60608152602001906001900390816117185790505b5091506000606060005b838110156117f057308787838181106117525761175261273d565b90506020028101906117649190612753565b6040516117729291906126e5565b600060405180830381855af49150503d80600081146117ad576040519150601f19603f3d011682016040523d82523d6000602084013e6117b2565b606091505b50909350915087156117ca576117ca83151583611df2565b818582815181106117dd576117dd61273d565b6020908102919091010152600101611737565b505050509392505050565b6000838152603260209081526040808320546001600160401b03168084526101008352818420878552909252822080549192916118379061268e565b80601f01602080910402602001604051908101604052809291908181526020018280546118639061268e565b80156118b05780601f10611885576101008083540402835291602001916118b0565b820191906000526020600020905b81548152906001019060200180831161189357829003601f168201915b505050506001600160401b0384166000908152610100602090815260408083208a845290915290209192506118e89050848683612866565b50847f8f15ed4b723ef428f250961da8315675b507046737e19319fc1a4d81bfe87f8582868660405161191d93929190612a53565b60405180910390a25050505050565b6000838152603260209081526040808320546001600160401b03168352610133825280832086845282528083206001600160e01b031986168085529083529281902080546001600160a01b0319166001600160a01b038616908117909155905190815285917f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa910160405180910390a3505050565b60006001600160e01b031982166304920eeb60e41b148061050b575061050b82611e15565b611a346040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b82815260c0810182905261050b81611d0a565b6020810151815160609161050b91611a5f9082611e3a565b84519190611e94565b60a081015160c082015160609161050b91611a5f9082906127f7565b600081518351148015610f3d5750610f3d8360008460008751611f0a565b865160208801206000611ab6878787611e94565b90508315611bdd576001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611b009061268e565b159050611b5e576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611b4283612a83565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091528120611b9e91612132565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a604051611bd0929190612aa1565b60405180910390a2611cfe565b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c16845290915290208054611c1f9061268e565b9050600003611c7f576001600160401b038316600090815260ff602090815260408083208d845282528083208584529091528120805461ffff1691611c6383612ac7565b91906101000a81548161ffff021916908361ffff160217905550505b6001600160401b038316600090815260fe602090815260408083208d84528252808320858452825280832061ffff8c1684529091529020611cc08282612994565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a84604051611cf593929190612ae8565b60405180910390a25b50505050505050505050565b60c08101516020820181905281515111611d215750565b6000611d3582600001518360200151611e3a565b8260200151611d449190612b17565b8251909150611d539082611f2d565b61ffff166040830152611d67600282612b17565b8251909150611d769082611f2d565b61ffff166060830152611d8a600282612b17565b8251909150611d999082611f55565b63ffffffff166080830152611daf600482612b17565b8251909150600090611dc19083611f2d565b61ffff169050611dd2600283612b17565b60a084018190529150611de58183612b17565b60c0909301929092525050565b816108a85780518015611e06578060208301fd5b5063350c20f16000526004601cfd5b60006001600160e01b0319821663e1a460d960e01b148061050b575061050b82611f7f565b6000815b83518110611e4e57611e4e612b2a565b6000611e5a8583611fa4565b60ff169050611e6a816001612b17565b611e749083612b17565b915080600003611e845750611e8a565b50611e3e565b61109183826127f7565b8251606090611ea38385612b17565b1115611eae57600080fd5b6000826001600160401b03811115611ec857611ec861280a565b6040519080825280601f01601f191660200182016040528015611ef2576020820181803683370190505b5090506020808201908686010161073a828287611fc8565b6000611f1784848461201e565b611f2287878561201e565b149695505050505050565b8151600090611f3d836002612b17565b1115611f4857600080fd5b50016002015161ffff1690565b8151600090611f65836004612b17565b1115611f7057600080fd5b50016004015163ffffffff1690565b60006001600160e01b03198216630f140b1160e11b148061050b575061050b82612042565b6000828281518110611fb857611fb861273d565b016020015160f81c905092915050565b602081106120005781518352611fdf602084612b17565b9250611fec602083612b17565b9150611ff96020826127f7565b9050611fc8565b905182516020929092036101000a6000190180199091169116179052565b825160009061202d8385612b17565b111561203857600080fd5b5091016020012090565b60006001600160e01b0319821663f7d7b8c160e01b148061050b575061050b8260006001600160e01b0319821663a20b2f5560e01b148061209357506001600160e01b031982166392a5e8f760e01b145b8061050b575061050b8260006001600160e01b0319821663d849d8e360e01b148061050b575061050b8260006001600160e01b03198216637760be6f60e11b148061050b575061050b8260006001600160e01b031982166320191f7360e11b148061050b575061050b8260006001600160e01b0319821663e103286b60e01b148061050b57506301ffc9a760e01b6001600160e01b031983161461050b565b50805461213e9061268e565b6000825580601f1061214e575050565b601f01602090049060005260206000209081019061216c919061216f565b50565b5b808211156121845760008155600101612170565b5090565b6001600160e01b03198116811461216c57600080fd5b6000602082840312156121b057600080fd5b8135610f3d81612188565b60008083601f8401126121cd57600080fd5b5081356001600160401b038111156121e457600080fd5b60208301915083602082850101111561087757600080fd5b60008060006040848603121561221157600080fd5b8335925060208401356001600160401b0381111561222e57600080fd5b61223a868287016121bb565b9497909650939450505050565b60008060008060006060868803121561225f57600080fd5b8535945060208601356001600160401b038082111561227d57600080fd5b61228989838a016121bb565b909650945060408801359150808211156122a257600080fd5b506122af888289016121bb565b969995985093965092949392505050565b600080604083850312156122d357600080fd5b8235915060208301356122e581612188565b809150509250929050565b6000806040838503121561230357600080fd5b50508035926020909101359150565b60005b8381101561232d578181015183820152602001612315565b50506000910152565b6000815180845261234e816020860160208601612312565b601f01601f19169290920160200192915050565b8281526040602082015260006110916040830184612336565b60008060006060848603121561239057600080fd5b505081359360208301359350604090920135919050565b6000602082840312156123b957600080fd5b5035919050565b6001600160a01b038116811461216c57600080fd5b600080604083850312156123e857600080fd5b82356123f3816123c0565b915060208301356122e5816123c0565b602081526000610f3d6020830184612336565b6000806000806060858703121561242c57600080fd5b843593506020850135925060408501356001600160401b0381111561245057600080fd5b61245c878288016121bb565b95989497509550505050565b6000806040838503121561247b57600080fd5b8235915060208301356122e5816123c0565b6000806000606084860312156124a257600080fd5b8335925060208401359150604084013561ffff811681146124c257600080fd5b809150509250925092565b60008083601f8401126124df57600080fd5b5081356001600160401b038111156124f657600080fd5b6020830191508360208260051b850101111561087757600080fd5b6000806020838503121561252457600080fd5b82356001600160401b0381111561253a57600080fd5b612546858286016124cd565b90969095509350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156125a757603f19888603018452612595858351612336565b94509285019290850190600101612579565b5092979650505050505050565b6000806000604084860312156125c957600080fd5b8335925060208401356001600160401b038111156125e657600080fd5b61223a868287016124cd565b60008060006060848603121561260757600080fd5b83359250602084013561261981612188565b915060408401356124c2816123c0565b801515811461216c57600080fd5b60008060006040848603121561264c57600080fd5b833561265781612629565b925060208401356001600160401b038111156125e657600080fd5b60008251612684818460208701612312565b9190910192915050565b600181811c908216806126a257607f821691505b6020821081036126c257634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156126da57600080fd5b8151610f3d816123c0565b8183823760009101908152919050565b60006020828403121561270757600080fd5b5051919050565b6000806040838503121561272157600080fd5b825161272c81612629565b60208401519092506122e581612188565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261276a57600080fd5b8301803591506001600160401b0382111561278457600080fd5b60200191503681900382131561087757600080fd5b600080858511156127a957600080fd5b838611156127b657600080fd5b5050820193919092039150565b8035602083101561050b57600019602084900360031b1b1692915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561050b5761050b6127e1565b634e487b7160e01b600052604160045260246000fd5b601f821115610a5e57600081815260208120601f850160051c810160208610156128475750805b601f850160051c820191505b8181101561054557828155600101612853565b6001600160401b0383111561287d5761287d61280a565b6128918361288b835461268e565b83612820565b6000601f8411600181146128c557600085156128ad5750838201355b600019600387901b1c1916600186901b178355610c1d565b600083815260209020601f19861690835b828110156128f657868501358255602094850194600190920191016128d6565b50868210156129135760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000612962604083018688612925565b8281036020840152612975818587612925565b979650505050505050565b602081526000611091602083018486612925565b81516001600160401b038111156129ad576129ad61280a565b6129c1816129bb845461268e565b84612820565b602080601f8311600181146129f657600084156129de5750858301515b600019600386901b1c1916600185901b178555610545565b600085815260208120601f198616915b82811015612a2557888601518255948401946001909101908401612a06565b5085821015612a435787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b604081526000612a666040830186612336565b8281036020840152612a79818587612925565b9695505050505050565b600061ffff821680612a9757612a976127e1565b6000190192915050565b604081526000612ab46040830185612336565b905061ffff831660208301529392505050565b600061ffff808316818103612ade57612ade6127e1565b6001019392505050565b606081526000612afb6060830186612336565b61ffff851660208401528281036040840152612a798185612336565b8082018082111561050b5761050b6127e1565b634e487b7160e01b600052600160045260246000fdfea264697066735822122071bbc4bff126add9e96885c48993935407bf76c98e0f32dfd2c1c91c3f35e40664736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "A simple resolver anyone can use, only allows the owner of a node to set its address.", + "methods": { + "ABI(bytes32,uint256)": { + "details": "Returns the ABI associated with an INS node. Defined in EIP-205, see more at https://eips.ethereum.org/EIPS/eip-205", + "params": { + "contentTypes": "A bitwise OR of the ABI formats accepted by the caller.", + "node": "The INS node to query" + }, + "returns": { + "_0": "The content type of the return value", + "_1": "The ABI data" + } + }, + "addr(bytes32)": { + "details": "Override {IAddressResolvable-addr}." + }, + "clearRecords(bytes32)": { + "details": "Increments the record version associated with an INS node. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {VersionChanged}.", + "params": { + "node": "The node to update." + } + }, + "contentHash(bytes32)": { + "details": "Returns the content hash associated with an INS node.", + "params": { + "node": "The INS node to query." + }, + "returns": { + "_0": "The associated content hash." + } + }, + "dnsRecord(bytes32,bytes32,uint16)": { + "details": "Obtain a DNS record.", + "params": { + "name": "the keccak-256 hash of the fully-qualified name for which to fetch the record", + "node": "the namehash of the node for which to fetch the record", + "resource": "the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types" + }, + "returns": { + "_0": "the DNS record in wire format if present, otherwise empty" + } + }, + "getRNSUnified()": { + "details": "Retrieves the RNSUnified associated with this resolver." + }, + "getReverseRegistrar()": { + "details": "Retrieves the reverse registrar associated with this resolver." + }, + "hasDNSRecords(bytes32,bytes32)": { + "details": "Checks whether a given node has records.", + "params": { + "name": "the namehash of the node for which to check the records", + "node": "the namehash of the node for which to check the records" + } + }, + "interfaceImplementer(bytes32,bytes4)": { + "details": "Returns the address of a contract that implements the specified interface for this name. If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that contract implements EIP165 and returns `true` for the specified interfaceID, its address will be returned.", + "params": { + "interfaceID": "The EIP 165 interface ID to check for.", + "node": "The INS node to query." + }, + "returns": { + "_0": "The address that implements this interface, or 0 if the interface is unsupported." + } + }, + "isAuthorized(bytes32,address)": { + "details": "Checks if an account is authorized to manage the resolution of a specific RNS node.", + "params": { + "account": "The account address being checked for authorization.", + "node": "The RNS node." + }, + "returns": { + "authorized": "A boolean indicating whether the account is authorized." + } + }, + "multicall(bytes[])": { + "details": "Executes bulk action to the original contract. Reverts if there is a single call failed.", + "params": { + "data": "The calldata to original contract." + } + }, + "multicallWithNodeCheck(bytes32,bytes[])": { + "details": "This function provides an extra security check when called from privileged contracts (such as RONRegistrarController) that can set records on behalf of the node owners. Reverts if the node is not null but calldata is mismatched." + }, + "name(bytes32)": { + "details": "Override {INameResolver-name}." + }, + "pubkey(bytes32)": { + "details": "See {IPublicKeyResolver-pubkey}." + }, + "recordVersions(bytes32)": { + "details": "Returns the latest version of a node." + }, + "setABI(bytes32,uint256,bytes)": { + "details": "Sets the ABI associated with an INS node. Nodes may have one ABI of each content type. To remove an ABI, set it to the empty string. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. - The content type must be powers of 2. Emitted an event {ABIChanged}.", + "params": { + "contentType": "The content type of the ABI", + "data": "The ABI data.", + "node": "The node to update." + } + }, + "setAddr(bytes32,address)": { + "details": "Sets the address associated with an INS node. Requirement: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {AddrChanged}.", + "params": { + "addr": "The address to set.", + "node": "The node to update." + } + }, + "setContentHash(bytes32,bytes)": { + "details": "Sets the content hash associated with an INS node. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {ContentHashChanged}.", + "params": { + "hash": "The content hash to set", + "node": "The node to update." + } + }, + "setDNSRecords(bytes32,bytes)": { + "details": "Set one or more DNS records. Records are supplied in wire-format. Records with the same node/name/resource must be supplied one after the other to ensure the data is updated correctly. For example, if the data was supplied: a.example.com IN A 1.2.3.4 a.example.com IN A 5.6.7.8 www.example.com IN CNAME a.example.com. then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was supplied: a.example.com IN A 1.2.3.4 www.example.com IN CNAME a.example.com. a.example.com IN A 5.6.7.8 then this would store the first A record, the CNAME, then the second A record which would overwrite the first. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}.", + "params": { + "data": "the DNS wire format records to set", + "node": "the namehash of the node for which to set the records" + } + }, + "setInterface(bytes32,bytes4,address)": { + "details": "Sets an interface associated with a name. Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}.", + "params": { + "implementer": "The address of a contract that implements this interface for this node.", + "interfaceID": "The EIP 165 interface ID.", + "node": "The node to update." + } + }, + "setName(bytes32,string)": { + "details": "Sets the name associated with an INS node, for reverse records. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {NameChanged}.", + "params": { + "node": "The node to update." + } + }, + "setPubkey(bytes32,bytes32,bytes32)": { + "details": "Sets the SECP256k1 public key associated with an INS node. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {PubkeyChanged}.", + "params": { + "node": "The INS node to query", + "x": "the X coordinate of the curve point for the public key.", + "y": "the Y coordinate of the curve point for the public key." + } + }, + "setText(bytes32,string,string)": { + "details": "Sets the text data associated with an INS node and key. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {TextChanged}.", + "params": { + "key": "The key to set.", + "node": "The node to update.", + "value": "The text data value to set." + } + }, + "setZonehash(bytes32,bytes)": { + "details": "Sets the hash for the zone. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {DNSZonehashChanged}.", + "params": { + "hash": "The zonehash to set", + "node": "The node to update." + } + }, + "supportsInterface(bytes4)": { + "details": "Override {IERC165-supportsInterface}." + }, + "text(bytes32,string)": { + "params": { + "key": "The text data key to query.", + "node": "The INS node to query." + }, + "returns": { + "_0": "The associated text data." + } + }, + "tryMulticall(bool,bytes[])": { + "details": "Executes bulk action to the original contract.", + "params": { + "data": "The calldata to original contract.", + "requireSuccess": "Flag to indicating whether the contract reverts if there is a single call failed." + } + }, + "zonehash(bytes32)": { + "details": "Obtains the hash for the zone.", + "params": { + "node": "The INS node to query." + }, + "returns": { + "_0": "The associated contenthash." + } + } + }, + "events": { + "ABIChanged(bytes32,uint256)": { + "details": "Emitted when the ABI is changed." + }, + "AddrChanged(bytes32,address)": { + "details": "Emitted when an address of a node is changed." + }, + "ApprovalForAll(address,address,bool)": { + "details": "See {IERC1155-ApprovalForAll}. Logged when an operator is added or removed." + }, + "Approved(address,bytes32,address,bool)": { + "details": "Logged when a delegate is approved or an approval is revoked." + }, + "ContentHashChanged(bytes32,bytes)": { + "details": "Emitted when the content hash of a node is changed." + }, + "DNSRecordChanged(bytes32,bytes,uint16,bytes)": { + "details": "Emitted whenever a given node/name/resource's RRSET is updated." + }, + "DNSRecordDeleted(bytes32,bytes,uint16)": { + "details": "Emitted whenever a given node/name/resource's RRSET is deleted." + }, + "DNSZonehashChanged(bytes32,bytes,bytes)": { + "details": "Emitted whenever a given node's zone hash is updated." + }, + "Initialized(uint8)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "InterfaceChanged(bytes32,bytes4,address)": { + "details": "Emitted when the interface of node is changed." + }, + "NameChanged(bytes32,string)": { + "details": "Emitted when a node name is changed." + }, + "PubkeyChanged(bytes32,bytes32,bytes32)": { + "details": "Emitted when a node public key is changed." + }, + "TextChanged(bytes32,string,string,string)": { + "details": "Emitted when a node text is changed." + }, + "VersionChanged(bytes32,uint64)": { + "details": "Emitted when the version of a node is changed." + } + }, + "title": "Public Resolver" + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidContentType\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"Approved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"ContentHashChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"resource\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"record\",\"type\":\"bytes\"}],\"name\":\"DNSRecordChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"name\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"resource\",\"type\":\"uint16\"}],\"name\":\"DNSRecordDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"lastzonehash\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"zonehash\",\"type\":\"bytes\"}],\"name\":\"DNSZonehashChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementer\",\"type\":\"address\"}],\"name\":\"InterfaceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newVersion\",\"type\":\"uint64\"}],\"name\":\"VersionChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"clearRecords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"contentHash\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"resource\",\"type\":\"uint16\"}],\"name\":\"dnsRecord\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRNSUnified\",\"outputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReverseRegistrar\",\"outputs\":[{\"internalType\":\"contract INSReverseRegistrar\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"name\",\"type\":\"bytes32\"}],\"name\":\"hasDNSRecords\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"rnsUnified\",\"type\":\"address\"},{\"internalType\":\"contract INSReverseRegistrar\",\"name\":\"reverseRegistrar\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"interfaceImplementer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isAuthorized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"authorized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicallWithNodeCheck\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"recordVersions\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"contentType\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"setContentHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setDNSRecords\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"implementer\",\"type\":\"address\"}],\"name\":\"setInterface\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"newName\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"setZonehash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"requireSuccess\",\"type\":\"bool\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"tryMulticall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"zonehash\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A simple resolver anyone can use, only allows the owner of a node to set its address.\",\"events\":{\"ABIChanged(bytes32,uint256)\":{\"details\":\"Emitted when the ABI is changed.\"},\"AddrChanged(bytes32,address)\":{\"details\":\"Emitted when an address of a node is changed.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"See {IERC1155-ApprovalForAll}. Logged when an operator is added or removed.\"},\"Approved(address,bytes32,address,bool)\":{\"details\":\"Logged when a delegate is approved or an approval is revoked.\"},\"ContentHashChanged(bytes32,bytes)\":{\"details\":\"Emitted when the content hash of a node is changed.\"},\"DNSRecordChanged(bytes32,bytes,uint16,bytes)\":{\"details\":\"Emitted whenever a given node/name/resource's RRSET is updated.\"},\"DNSRecordDeleted(bytes32,bytes,uint16)\":{\"details\":\"Emitted whenever a given node/name/resource's RRSET is deleted.\"},\"DNSZonehashChanged(bytes32,bytes,bytes)\":{\"details\":\"Emitted whenever a given node's zone hash is updated.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"InterfaceChanged(bytes32,bytes4,address)\":{\"details\":\"Emitted when the interface of node is changed.\"},\"NameChanged(bytes32,string)\":{\"details\":\"Emitted when a node name is changed.\"},\"PubkeyChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when a node public key is changed.\"},\"TextChanged(bytes32,string,string,string)\":{\"details\":\"Emitted when a node text is changed.\"},\"VersionChanged(bytes32,uint64)\":{\"details\":\"Emitted when the version of a node is changed.\"}},\"kind\":\"dev\",\"methods\":{\"ABI(bytes32,uint256)\":{\"details\":\"Returns the ABI associated with an INS node. Defined in EIP-205, see more at https://eips.ethereum.org/EIPS/eip-205\",\"params\":{\"contentTypes\":\"A bitwise OR of the ABI formats accepted by the caller.\",\"node\":\"The INS node to query\"},\"returns\":{\"_0\":\"The content type of the return value\",\"_1\":\"The ABI data\"}},\"addr(bytes32)\":{\"details\":\"Override {IAddressResolvable-addr}.\"},\"clearRecords(bytes32)\":{\"details\":\"Increments the record version associated with an INS node. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {VersionChanged}.\",\"params\":{\"node\":\"The node to update.\"}},\"contentHash(bytes32)\":{\"details\":\"Returns the content hash associated with an INS node.\",\"params\":{\"node\":\"The INS node to query.\"},\"returns\":{\"_0\":\"The associated content hash.\"}},\"dnsRecord(bytes32,bytes32,uint16)\":{\"details\":\"Obtain a DNS record.\",\"params\":{\"name\":\"the keccak-256 hash of the fully-qualified name for which to fetch the record\",\"node\":\"the namehash of the node for which to fetch the record\",\"resource\":\"the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\"},\"returns\":{\"_0\":\"the DNS record in wire format if present, otherwise empty\"}},\"getRNSUnified()\":{\"details\":\"Retrieves the RNSUnified associated with this resolver.\"},\"getReverseRegistrar()\":{\"details\":\"Retrieves the reverse registrar associated with this resolver.\"},\"hasDNSRecords(bytes32,bytes32)\":{\"details\":\"Checks whether a given node has records.\",\"params\":{\"name\":\"the namehash of the node for which to check the records\",\"node\":\"the namehash of the node for which to check the records\"}},\"interfaceImplementer(bytes32,bytes4)\":{\"details\":\"Returns the address of a contract that implements the specified interface for this name. If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that contract implements EIP165 and returns `true` for the specified interfaceID, its address will be returned.\",\"params\":{\"interfaceID\":\"The EIP 165 interface ID to check for.\",\"node\":\"The INS node to query.\"},\"returns\":{\"_0\":\"The address that implements this interface, or 0 if the interface is unsupported.\"}},\"isAuthorized(bytes32,address)\":{\"details\":\"Checks if an account is authorized to manage the resolution of a specific RNS node.\",\"params\":{\"account\":\"The account address being checked for authorization.\",\"node\":\"The RNS node.\"},\"returns\":{\"authorized\":\"A boolean indicating whether the account is authorized.\"}},\"multicall(bytes[])\":{\"details\":\"Executes bulk action to the original contract. Reverts if there is a single call failed.\",\"params\":{\"data\":\"The calldata to original contract.\"}},\"multicallWithNodeCheck(bytes32,bytes[])\":{\"details\":\"This function provides an extra security check when called from privileged contracts (such as RONRegistrarController) that can set records on behalf of the node owners. Reverts if the node is not null but calldata is mismatched.\"},\"name(bytes32)\":{\"details\":\"Override {INameResolver-name}.\"},\"pubkey(bytes32)\":{\"details\":\"See {IPublicKeyResolver-pubkey}.\"},\"recordVersions(bytes32)\":{\"details\":\"Returns the latest version of a node.\"},\"setABI(bytes32,uint256,bytes)\":{\"details\":\"Sets the ABI associated with an INS node. Nodes may have one ABI of each content type. To remove an ABI, set it to the empty string. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. - The content type must be powers of 2. Emitted an event {ABIChanged}.\",\"params\":{\"contentType\":\"The content type of the ABI\",\"data\":\"The ABI data.\",\"node\":\"The node to update.\"}},\"setAddr(bytes32,address)\":{\"details\":\"Sets the address associated with an INS node. Requirement: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {AddrChanged}.\",\"params\":{\"addr\":\"The address to set.\",\"node\":\"The node to update.\"}},\"setContentHash(bytes32,bytes)\":{\"details\":\"Sets the content hash associated with an INS node. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {ContentHashChanged}.\",\"params\":{\"hash\":\"The content hash to set\",\"node\":\"The node to update.\"}},\"setDNSRecords(bytes32,bytes)\":{\"details\":\"Set one or more DNS records. Records are supplied in wire-format. Records with the same node/name/resource must be supplied one after the other to ensure the data is updated correctly. For example, if the data was supplied: a.example.com IN A 1.2.3.4 a.example.com IN A 5.6.7.8 www.example.com IN CNAME a.example.com. then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was supplied: a.example.com IN A 1.2.3.4 www.example.com IN CNAME a.example.com. a.example.com IN A 5.6.7.8 then this would store the first A record, the CNAME, then the second A record which would overwrite the first. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}.\",\"params\":{\"data\":\"the DNS wire format records to set\",\"node\":\"the namehash of the node for which to set the records\"}},\"setInterface(bytes32,bytes4,address)\":{\"details\":\"Sets an interface associated with a name. Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}.\",\"params\":{\"implementer\":\"The address of a contract that implements this interface for this node.\",\"interfaceID\":\"The EIP 165 interface ID.\",\"node\":\"The node to update.\"}},\"setName(bytes32,string)\":{\"details\":\"Sets the name associated with an INS node, for reverse records. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {NameChanged}.\",\"params\":{\"node\":\"The node to update.\"}},\"setPubkey(bytes32,bytes32,bytes32)\":{\"details\":\"Sets the SECP256k1 public key associated with an INS node. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {PubkeyChanged}.\",\"params\":{\"node\":\"The INS node to query\",\"x\":\"the X coordinate of the curve point for the public key.\",\"y\":\"the Y coordinate of the curve point for the public key.\"}},\"setText(bytes32,string,string)\":{\"details\":\"Sets the text data associated with an INS node and key. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {TextChanged}.\",\"params\":{\"key\":\"The key to set.\",\"node\":\"The node to update.\",\"value\":\"The text data value to set.\"}},\"setZonehash(bytes32,bytes)\":{\"details\":\"Sets the hash for the zone. Requirements: - The method caller must be authorized to change user fields of RNS Token `node`. See indicator {ModifyingIndicator.USER_FIELDS_INDICATOR}. Emits an event {DNSZonehashChanged}.\",\"params\":{\"hash\":\"The zonehash to set\",\"node\":\"The node to update.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Override {IERC165-supportsInterface}.\"},\"text(bytes32,string)\":{\"params\":{\"key\":\"The text data key to query.\",\"node\":\"The INS node to query.\"},\"returns\":{\"_0\":\"The associated text data.\"}},\"tryMulticall(bool,bytes[])\":{\"details\":\"Executes bulk action to the original contract.\",\"params\":{\"data\":\"The calldata to original contract.\",\"requireSuccess\":\"Flag to indicating whether the contract reverts if there is a single call failed.\"}},\"zonehash(bytes32)\":{\"details\":\"Obtains the hash for the zone.\",\"params\":{\"node\":\"The INS node to query.\"},\"returns\":{\"_0\":\"The associated contenthash.\"}}},\"stateVariables\":{\"____gap\":{\"details\":\"Gap for upgradeability.\"},\"_reverseRegistrar\":{\"details\":\"The reverse registrar contract\"},\"_rnsUnified\":{\"details\":\"The RNS Unified contract\"}},\"title\":\"Public Resolver\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidContentType()\":[{\"notice\":\"Thrown when the input content type is invalid.\"}]},\"kind\":\"user\",\"methods\":{\"text(bytes32,string)\":{\"notice\":\"Returns the text data associated with an INS node and key.\"}},\"notice\":\"Customized version of PublicResolver: https://github.com/ensdomains/ens-contracts/blob/0c75ba23fae76165d51c9c80d76d22261e06179d/contracts/resolvers/PublicResolver.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/resolvers/PublicResolver.sol\":\"PublicResolver\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/buffer/contracts/Buffer.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-2-Clause\\npragma solidity ^0.8.4;\\n\\n/**\\n* @dev A library for working with mutable byte buffers in Solidity.\\n*\\n* Byte buffers are mutable and expandable, and provide a variety of primitives\\n* for appending to them. At any time you can fetch a bytes object containing the\\n* current contents of the buffer. The bytes object should not be stored between\\n* operations, as it may change due to resizing of the buffer.\\n*/\\nlibrary Buffer {\\n /**\\n * @dev Represents a mutable buffer. Buffers have a current value (buf) and\\n * a capacity. The capacity may be longer than the current value, in\\n * which case it can be extended without the need to allocate more memory.\\n */\\n struct buffer {\\n bytes buf;\\n uint capacity;\\n }\\n\\n /**\\n * @dev Initializes a buffer with an initial capacity.\\n * @param buf The buffer to initialize.\\n * @param capacity The number of bytes of space to allocate the buffer.\\n * @return The buffer, for chaining.\\n */\\n function init(buffer memory buf, uint capacity) internal pure returns(buffer memory) {\\n if (capacity % 32 != 0) {\\n capacity += 32 - (capacity % 32);\\n }\\n // Allocate space for the buffer data\\n buf.capacity = capacity;\\n assembly {\\n let ptr := mload(0x40)\\n mstore(buf, ptr)\\n mstore(ptr, 0)\\n let fpm := add(32, add(ptr, capacity))\\n if lt(fpm, ptr) {\\n revert(0, 0)\\n }\\n mstore(0x40, fpm)\\n }\\n return buf;\\n }\\n\\n /**\\n * @dev Initializes a new buffer from an existing bytes object.\\n * Changes to the buffer may mutate the original value.\\n * @param b The bytes object to initialize the buffer with.\\n * @return A new buffer.\\n */\\n function fromBytes(bytes memory b) internal pure returns(buffer memory) {\\n buffer memory buf;\\n buf.buf = b;\\n buf.capacity = b.length;\\n return buf;\\n }\\n\\n function resize(buffer memory buf, uint capacity) private pure {\\n bytes memory oldbuf = buf.buf;\\n init(buf, capacity);\\n append(buf, oldbuf);\\n }\\n\\n /**\\n * @dev Sets buffer length to 0.\\n * @param buf The buffer to truncate.\\n * @return The original buffer, for chaining..\\n */\\n function truncate(buffer memory buf) internal pure returns (buffer memory) {\\n assembly {\\n let bufptr := mload(buf)\\n mstore(bufptr, 0)\\n }\\n return buf;\\n }\\n\\n /**\\n * @dev Appends len bytes of a byte string to a buffer. Resizes if doing so would exceed\\n * the capacity of the buffer.\\n * @param buf The buffer to append to.\\n * @param data The data to append.\\n * @param len The number of bytes to copy.\\n * @return The original buffer, for chaining.\\n */\\n function append(buffer memory buf, bytes memory data, uint len) internal pure returns(buffer memory) {\\n require(len <= data.length);\\n\\n uint off = buf.buf.length;\\n uint newCapacity = off + len;\\n if (newCapacity > buf.capacity) {\\n resize(buf, newCapacity * 2);\\n }\\n\\n uint dest;\\n uint src;\\n assembly {\\n // Memory address of the buffer data\\n let bufptr := mload(buf)\\n // Length of existing buffer data\\n let buflen := mload(bufptr)\\n // Start address = buffer address + offset + sizeof(buffer length)\\n dest := add(add(bufptr, 32), off)\\n // Update buffer length if we're extending it\\n if gt(newCapacity, buflen) {\\n mstore(bufptr, newCapacity)\\n }\\n src := add(data, 32)\\n }\\n\\n // Copy word-length chunks while possible\\n for (; len >= 32; len -= 32) {\\n assembly {\\n mstore(dest, mload(src))\\n }\\n dest += 32;\\n src += 32;\\n }\\n\\n // Copy remaining bytes\\n unchecked {\\n uint mask = (256 ** (32 - len)) - 1;\\n assembly {\\n let srcpart := and(mload(src), not(mask))\\n let destpart := and(mload(dest), mask)\\n mstore(dest, or(destpart, srcpart))\\n }\\n }\\n\\n return buf;\\n }\\n\\n /**\\n * @dev Appends a byte string to a buffer. Resizes if doing so would exceed\\n * the capacity of the buffer.\\n * @param buf The buffer to append to.\\n * @param data The data to append.\\n * @return The original buffer, for chaining.\\n */\\n function append(buffer memory buf, bytes memory data) internal pure returns (buffer memory) {\\n return append(buf, data, data.length);\\n }\\n\\n /**\\n * @dev Appends a byte to the buffer. Resizes if doing so would exceed the\\n * capacity of the buffer.\\n * @param buf The buffer to append to.\\n * @param data The data to append.\\n * @return The original buffer, for chaining.\\n */\\n function appendUint8(buffer memory buf, uint8 data) internal pure returns(buffer memory) {\\n uint off = buf.buf.length;\\n uint offPlusOne = off + 1;\\n if (off >= buf.capacity) {\\n resize(buf, offPlusOne * 2);\\n }\\n\\n assembly {\\n // Memory address of the buffer data\\n let bufptr := mload(buf)\\n // Address = buffer address + sizeof(buffer length) + off\\n let dest := add(add(bufptr, off), 32)\\n mstore8(dest, data)\\n // Update buffer length if we extended it\\n if gt(offPlusOne, mload(bufptr)) {\\n mstore(bufptr, offPlusOne)\\n }\\n }\\n\\n return buf;\\n }\\n\\n /**\\n * @dev Appends len bytes of bytes32 to a buffer. Resizes if doing so would\\n * exceed the capacity of the buffer.\\n * @param buf The buffer to append to.\\n * @param data The data to append.\\n * @param len The number of bytes to write (left-aligned).\\n * @return The original buffer, for chaining.\\n */\\n function append(buffer memory buf, bytes32 data, uint len) private pure returns(buffer memory) {\\n uint off = buf.buf.length;\\n uint newCapacity = len + off;\\n if (newCapacity > buf.capacity) {\\n resize(buf, newCapacity * 2);\\n }\\n\\n unchecked {\\n uint mask = (256 ** len) - 1;\\n // Right-align data\\n data = data >> (8 * (32 - len));\\n assembly {\\n // Memory address of the buffer data\\n let bufptr := mload(buf)\\n // Address = buffer address + sizeof(buffer length) + newCapacity\\n let dest := add(bufptr, newCapacity)\\n mstore(dest, or(and(mload(dest), not(mask)), data))\\n // Update buffer length if we extended it\\n if gt(newCapacity, mload(bufptr)) {\\n mstore(bufptr, newCapacity)\\n }\\n }\\n }\\n return buf;\\n }\\n\\n /**\\n * @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed\\n * the capacity of the buffer.\\n * @param buf The buffer to append to.\\n * @param data The data to append.\\n * @return The original buffer, for chhaining.\\n */\\n function appendBytes20(buffer memory buf, bytes20 data) internal pure returns (buffer memory) {\\n return append(buf, bytes32(data), 20);\\n }\\n\\n /**\\n * @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed\\n * the capacity of the buffer.\\n * @param buf The buffer to append to.\\n * @param data The data to append.\\n * @return The original buffer, for chaining.\\n */\\n function appendBytes32(buffer memory buf, bytes32 data) internal pure returns (buffer memory) {\\n return append(buf, data, 32);\\n }\\n\\n /**\\n * @dev Appends a byte to the end of the buffer. Resizes if doing so would\\n * exceed the capacity of the buffer.\\n * @param buf The buffer to append to.\\n * @param data The data to append.\\n * @param len The number of bytes to write (right-aligned).\\n * @return The original buffer.\\n */\\n function appendInt(buffer memory buf, uint data, uint len) internal pure returns(buffer memory) {\\n uint off = buf.buf.length;\\n uint newCapacity = len + off;\\n if (newCapacity > buf.capacity) {\\n resize(buf, newCapacity * 2);\\n }\\n\\n uint mask = (256 ** len) - 1;\\n assembly {\\n // Memory address of the buffer data\\n let bufptr := mload(buf)\\n // Address = buffer address + sizeof(buffer length) + newCapacity\\n let dest := add(bufptr, newCapacity)\\n mstore(dest, or(and(mload(dest), not(mask)), data))\\n // Update buffer length if we extended it\\n if gt(newCapacity, mload(bufptr)) {\\n mstore(bufptr, newCapacity)\\n }\\n }\\n return buf;\\n }\\n}\\n\",\"keccak256\":\"0xd6dd3b0b327288f8e1b711a609f4040fea602e2ad4bba9febdf2f33b4e56eb0c\",\"license\":\"BSD-2-Clause\"},\"lib/ens-contracts/contracts/dnssec-oracle/BytesUtils.sol\":{\"content\":\"pragma solidity ^0.8.4;\\n\\nlibrary BytesUtils {\\n error OffsetOutOfBoundsError(uint256 offset, uint256 length);\\n\\n /*\\n * @dev Returns the keccak-256 hash of a byte range.\\n * @param self The byte string to hash.\\n * @param offset The position to start hashing at.\\n * @param len The number of bytes to hash.\\n * @return The hash of the byte range.\\n */\\n function keccak(\\n bytes memory self,\\n uint256 offset,\\n uint256 len\\n ) internal pure returns (bytes32 ret) {\\n require(offset + len <= self.length);\\n assembly {\\n ret := keccak256(add(add(self, 32), offset), len)\\n }\\n }\\n\\n /*\\n * @dev Returns a positive number if `other` comes lexicographically after\\n * `self`, a negative number if it comes before, or zero if the\\n * contents of the two bytes are equal.\\n * @param self The first bytes to compare.\\n * @param other The second bytes to compare.\\n * @return The result of the comparison.\\n */\\n function compare(\\n bytes memory self,\\n bytes memory other\\n ) internal pure returns (int256) {\\n return compare(self, 0, self.length, other, 0, other.length);\\n }\\n\\n /*\\n * @dev Returns a positive number if `other` comes lexicographically after\\n * `self`, a negative number if it comes before, or zero if the\\n * contents of the two bytes are equal. Comparison is done per-rune,\\n * on unicode codepoints.\\n * @param self The first bytes to compare.\\n * @param offset The offset of self.\\n * @param len The length of self.\\n * @param other The second bytes to compare.\\n * @param otheroffset The offset of the other string.\\n * @param otherlen The length of the other string.\\n * @return The result of the comparison.\\n */\\n function compare(\\n bytes memory self,\\n uint256 offset,\\n uint256 len,\\n bytes memory other,\\n uint256 otheroffset,\\n uint256 otherlen\\n ) internal pure returns (int256) {\\n if (offset + len > self.length) {\\n revert OffsetOutOfBoundsError(offset + len, self.length);\\n }\\n if (otheroffset + otherlen > other.length) {\\n revert OffsetOutOfBoundsError(otheroffset + otherlen, other.length);\\n }\\n\\n uint256 shortest = len;\\n if (otherlen < len) shortest = otherlen;\\n\\n uint256 selfptr;\\n uint256 otherptr;\\n\\n assembly {\\n selfptr := add(self, add(offset, 32))\\n otherptr := add(other, add(otheroffset, 32))\\n }\\n for (uint256 idx = 0; idx < shortest; idx += 32) {\\n uint256 a;\\n uint256 b;\\n assembly {\\n a := mload(selfptr)\\n b := mload(otherptr)\\n }\\n if (a != b) {\\n // Mask out irrelevant bytes and check again\\n uint256 mask;\\n if (shortest - idx >= 32) {\\n mask = type(uint256).max;\\n } else {\\n mask = ~(2 ** (8 * (idx + 32 - shortest)) - 1);\\n }\\n int256 diff = int256(a & mask) - int256(b & mask);\\n if (diff != 0) return diff;\\n }\\n selfptr += 32;\\n otherptr += 32;\\n }\\n\\n return int256(len) - int256(otherlen);\\n }\\n\\n /*\\n * @dev Returns true if the two byte ranges are equal.\\n * @param self The first byte range to compare.\\n * @param offset The offset into the first byte range.\\n * @param other The second byte range to compare.\\n * @param otherOffset The offset into the second byte range.\\n * @param len The number of bytes to compare\\n * @return True if the byte ranges are equal, false otherwise.\\n */\\n function equals(\\n bytes memory self,\\n uint256 offset,\\n bytes memory other,\\n uint256 otherOffset,\\n uint256 len\\n ) internal pure returns (bool) {\\n return keccak(self, offset, len) == keccak(other, otherOffset, len);\\n }\\n\\n /*\\n * @dev Returns true if the two byte ranges are equal with offsets.\\n * @param self The first byte range to compare.\\n * @param offset The offset into the first byte range.\\n * @param other The second byte range to compare.\\n * @param otherOffset The offset into the second byte range.\\n * @return True if the byte ranges are equal, false otherwise.\\n */\\n function equals(\\n bytes memory self,\\n uint256 offset,\\n bytes memory other,\\n uint256 otherOffset\\n ) internal pure returns (bool) {\\n return\\n keccak(self, offset, self.length - offset) ==\\n keccak(other, otherOffset, other.length - otherOffset);\\n }\\n\\n /*\\n * @dev Compares a range of 'self' to all of 'other' and returns True iff\\n * they are equal.\\n * @param self The first byte range to compare.\\n * @param offset The offset into the first byte range.\\n * @param other The second byte range to compare.\\n * @return True if the byte ranges are equal, false otherwise.\\n */\\n function equals(\\n bytes memory self,\\n uint256 offset,\\n bytes memory other\\n ) internal pure returns (bool) {\\n return\\n self.length == offset + other.length &&\\n equals(self, offset, other, 0, other.length);\\n }\\n\\n /*\\n * @dev Returns true if the two byte ranges are equal.\\n * @param self The first byte range to compare.\\n * @param other The second byte range to compare.\\n * @return True if the byte ranges are equal, false otherwise.\\n */\\n function equals(\\n bytes memory self,\\n bytes memory other\\n ) internal pure returns (bool) {\\n return\\n self.length == other.length &&\\n equals(self, 0, other, 0, self.length);\\n }\\n\\n /*\\n * @dev Returns the 8-bit number at the specified index of self.\\n * @param self The byte string.\\n * @param idx The index into the bytes\\n * @return The specified 8 bits of the string, interpreted as an integer.\\n */\\n function readUint8(\\n bytes memory self,\\n uint256 idx\\n ) internal pure returns (uint8 ret) {\\n return uint8(self[idx]);\\n }\\n\\n /*\\n * @dev Returns the 16-bit number at the specified index of self.\\n * @param self The byte string.\\n * @param idx The index into the bytes\\n * @return The specified 16 bits of the string, interpreted as an integer.\\n */\\n function readUint16(\\n bytes memory self,\\n uint256 idx\\n ) internal pure returns (uint16 ret) {\\n require(idx + 2 <= self.length);\\n assembly {\\n ret := and(mload(add(add(self, 2), idx)), 0xFFFF)\\n }\\n }\\n\\n /*\\n * @dev Returns the 32-bit number at the specified index of self.\\n * @param self The byte string.\\n * @param idx The index into the bytes\\n * @return The specified 32 bits of the string, interpreted as an integer.\\n */\\n function readUint32(\\n bytes memory self,\\n uint256 idx\\n ) internal pure returns (uint32 ret) {\\n require(idx + 4 <= self.length);\\n assembly {\\n ret := and(mload(add(add(self, 4), idx)), 0xFFFFFFFF)\\n }\\n }\\n\\n /*\\n * @dev Returns the 32 byte value at the specified index of self.\\n * @param self The byte string.\\n * @param idx The index into the bytes\\n * @return The specified 32 bytes of the string.\\n */\\n function readBytes32(\\n bytes memory self,\\n uint256 idx\\n ) internal pure returns (bytes32 ret) {\\n require(idx + 32 <= self.length);\\n assembly {\\n ret := mload(add(add(self, 32), idx))\\n }\\n }\\n\\n /*\\n * @dev Returns the 32 byte value at the specified index of self.\\n * @param self The byte string.\\n * @param idx The index into the bytes\\n * @return The specified 32 bytes of the string.\\n */\\n function readBytes20(\\n bytes memory self,\\n uint256 idx\\n ) internal pure returns (bytes20 ret) {\\n require(idx + 20 <= self.length);\\n assembly {\\n ret := and(\\n mload(add(add(self, 32), idx)),\\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000\\n )\\n }\\n }\\n\\n /*\\n * @dev Returns the n byte value at the specified index of self.\\n * @param self The byte string.\\n * @param idx The index into the bytes.\\n * @param len The number of bytes.\\n * @return The specified 32 bytes of the string.\\n */\\n function readBytesN(\\n bytes memory self,\\n uint256 idx,\\n uint256 len\\n ) internal pure returns (bytes32 ret) {\\n require(len <= 32);\\n require(idx + len <= self.length);\\n assembly {\\n let mask := not(sub(exp(256, sub(32, len)), 1))\\n ret := and(mload(add(add(self, 32), idx)), mask)\\n }\\n }\\n\\n function memcpy(uint256 dest, uint256 src, uint256 len) private pure {\\n // Copy word-length chunks while possible\\n for (; len >= 32; len -= 32) {\\n assembly {\\n mstore(dest, mload(src))\\n }\\n dest += 32;\\n src += 32;\\n }\\n\\n // Copy remaining bytes\\n unchecked {\\n uint256 mask = (256 ** (32 - len)) - 1;\\n assembly {\\n let srcpart := and(mload(src), not(mask))\\n let destpart := and(mload(dest), mask)\\n mstore(dest, or(destpart, srcpart))\\n }\\n }\\n }\\n\\n /*\\n * @dev Copies a substring into a new byte string.\\n * @param self The byte string to copy from.\\n * @param offset The offset to start copying at.\\n * @param len The number of bytes to copy.\\n */\\n function substring(\\n bytes memory self,\\n uint256 offset,\\n uint256 len\\n ) internal pure returns (bytes memory) {\\n require(offset + len <= self.length);\\n\\n bytes memory ret = new bytes(len);\\n uint256 dest;\\n uint256 src;\\n\\n assembly {\\n dest := add(ret, 32)\\n src := add(add(self, 32), offset)\\n }\\n memcpy(dest, src, len);\\n\\n return ret;\\n }\\n\\n // Maps characters from 0x30 to 0x7A to their base32 values.\\n // 0xFF represents invalid characters in that range.\\n bytes constant base32HexTable =\\n hex\\\"00010203040506070809FFFFFFFFFFFFFF0A0B0C0D0E0F101112131415161718191A1B1C1D1E1FFFFFFFFFFFFFFFFFFFFF0A0B0C0D0E0F101112131415161718191A1B1C1D1E1F\\\";\\n\\n /**\\n * @dev Decodes unpadded base32 data of up to one word in length.\\n * @param self The data to decode.\\n * @param off Offset into the string to start at.\\n * @param len Number of characters to decode.\\n * @return The decoded data, left aligned.\\n */\\n function base32HexDecodeWord(\\n bytes memory self,\\n uint256 off,\\n uint256 len\\n ) internal pure returns (bytes32) {\\n require(len <= 52);\\n\\n uint256 ret = 0;\\n uint8 decoded;\\n for (uint256 i = 0; i < len; i++) {\\n bytes1 char = self[off + i];\\n require(char >= 0x30 && char <= 0x7A);\\n decoded = uint8(base32HexTable[uint256(uint8(char)) - 0x30]);\\n require(decoded <= 0x20);\\n if (i == len - 1) {\\n break;\\n }\\n ret = (ret << 5) | decoded;\\n }\\n\\n uint256 bitlen = len * 5;\\n if (len % 8 == 0) {\\n // Multiple of 8 characters, no padding\\n ret = (ret << 5) | decoded;\\n } else if (len % 8 == 2) {\\n // Two extra characters - 1 byte\\n ret = (ret << 3) | (decoded >> 2);\\n bitlen -= 2;\\n } else if (len % 8 == 4) {\\n // Four extra characters - 2 bytes\\n ret = (ret << 1) | (decoded >> 4);\\n bitlen -= 4;\\n } else if (len % 8 == 5) {\\n // Five extra characters - 3 bytes\\n ret = (ret << 4) | (decoded >> 1);\\n bitlen -= 1;\\n } else if (len % 8 == 7) {\\n // Seven extra characters - 4 bytes\\n ret = (ret << 2) | (decoded >> 3);\\n bitlen -= 3;\\n } else {\\n revert();\\n }\\n\\n return bytes32(ret << (256 - bitlen));\\n }\\n\\n /**\\n * @dev Finds the first occurrence of the byte `needle` in `self`.\\n * @param self The string to search\\n * @param off The offset to start searching at\\n * @param len The number of bytes to search\\n * @param needle The byte to search for\\n * @return The offset of `needle` in `self`, or 2**256-1 if it was not found.\\n */\\n function find(\\n bytes memory self,\\n uint256 off,\\n uint256 len,\\n bytes1 needle\\n ) internal pure returns (uint256) {\\n for (uint256 idx = off; idx < off + len; idx++) {\\n if (self[idx] == needle) {\\n return idx;\\n }\\n }\\n return type(uint256).max;\\n }\\n}\\n\",\"keccak256\":\"0x4f10902639b85a17ae10745264feff322e793bfb1bc130a9a90efa7dda47c6cc\"},\"lib/ens-contracts/contracts/dnssec-oracle/RRUtils.sol\":{\"content\":\"pragma solidity ^0.8.4;\\n\\nimport \\\"./BytesUtils.sol\\\";\\nimport \\\"@ensdomains/buffer/contracts/Buffer.sol\\\";\\n\\n/**\\n * @dev RRUtils is a library that provides utilities for parsing DNS resource records.\\n */\\nlibrary RRUtils {\\n using BytesUtils for *;\\n using Buffer for *;\\n\\n /**\\n * @dev Returns the number of bytes in the DNS name at 'offset' in 'self'.\\n * @param self The byte array to read a name from.\\n * @param offset The offset to start reading at.\\n * @return The length of the DNS name at 'offset', in bytes.\\n */\\n function nameLength(\\n bytes memory self,\\n uint256 offset\\n ) internal pure returns (uint256) {\\n uint256 idx = offset;\\n while (true) {\\n assert(idx < self.length);\\n uint256 labelLen = self.readUint8(idx);\\n idx += labelLen + 1;\\n if (labelLen == 0) {\\n break;\\n }\\n }\\n return idx - offset;\\n }\\n\\n /**\\n * @dev Returns a DNS format name at the specified offset of self.\\n * @param self The byte array to read a name from.\\n * @param offset The offset to start reading at.\\n * @return ret The name.\\n */\\n function readName(\\n bytes memory self,\\n uint256 offset\\n ) internal pure returns (bytes memory ret) {\\n uint256 len = nameLength(self, offset);\\n return self.substring(offset, len);\\n }\\n\\n /**\\n * @dev Returns the number of labels in the DNS name at 'offset' in 'self'.\\n * @param self The byte array to read a name from.\\n * @param offset The offset to start reading at.\\n * @return The number of labels in the DNS name at 'offset', in bytes.\\n */\\n function labelCount(\\n bytes memory self,\\n uint256 offset\\n ) internal pure returns (uint256) {\\n uint256 count = 0;\\n while (true) {\\n assert(offset < self.length);\\n uint256 labelLen = self.readUint8(offset);\\n offset += labelLen + 1;\\n if (labelLen == 0) {\\n break;\\n }\\n count += 1;\\n }\\n return count;\\n }\\n\\n uint256 constant RRSIG_TYPE = 0;\\n uint256 constant RRSIG_ALGORITHM = 2;\\n uint256 constant RRSIG_LABELS = 3;\\n uint256 constant RRSIG_TTL = 4;\\n uint256 constant RRSIG_EXPIRATION = 8;\\n uint256 constant RRSIG_INCEPTION = 12;\\n uint256 constant RRSIG_KEY_TAG = 16;\\n uint256 constant RRSIG_SIGNER_NAME = 18;\\n\\n struct SignedSet {\\n uint16 typeCovered;\\n uint8 algorithm;\\n uint8 labels;\\n uint32 ttl;\\n uint32 expiration;\\n uint32 inception;\\n uint16 keytag;\\n bytes signerName;\\n bytes data;\\n bytes name;\\n }\\n\\n function readSignedSet(\\n bytes memory data\\n ) internal pure returns (SignedSet memory self) {\\n self.typeCovered = data.readUint16(RRSIG_TYPE);\\n self.algorithm = data.readUint8(RRSIG_ALGORITHM);\\n self.labels = data.readUint8(RRSIG_LABELS);\\n self.ttl = data.readUint32(RRSIG_TTL);\\n self.expiration = data.readUint32(RRSIG_EXPIRATION);\\n self.inception = data.readUint32(RRSIG_INCEPTION);\\n self.keytag = data.readUint16(RRSIG_KEY_TAG);\\n self.signerName = readName(data, RRSIG_SIGNER_NAME);\\n self.data = data.substring(\\n RRSIG_SIGNER_NAME + self.signerName.length,\\n data.length - RRSIG_SIGNER_NAME - self.signerName.length\\n );\\n }\\n\\n function rrs(\\n SignedSet memory rrset\\n ) internal pure returns (RRIterator memory) {\\n return iterateRRs(rrset.data, 0);\\n }\\n\\n /**\\n * @dev An iterator over resource records.\\n */\\n struct RRIterator {\\n bytes data;\\n uint256 offset;\\n uint16 dnstype;\\n uint16 class;\\n uint32 ttl;\\n uint256 rdataOffset;\\n uint256 nextOffset;\\n }\\n\\n /**\\n * @dev Begins iterating over resource records.\\n * @param self The byte string to read from.\\n * @param offset The offset to start reading at.\\n * @return ret An iterator object.\\n */\\n function iterateRRs(\\n bytes memory self,\\n uint256 offset\\n ) internal pure returns (RRIterator memory ret) {\\n ret.data = self;\\n ret.nextOffset = offset;\\n next(ret);\\n }\\n\\n /**\\n * @dev Returns true iff there are more RRs to iterate.\\n * @param iter The iterator to check.\\n * @return True iff the iterator has finished.\\n */\\n function done(RRIterator memory iter) internal pure returns (bool) {\\n return iter.offset >= iter.data.length;\\n }\\n\\n /**\\n * @dev Moves the iterator to the next resource record.\\n * @param iter The iterator to advance.\\n */\\n function next(RRIterator memory iter) internal pure {\\n iter.offset = iter.nextOffset;\\n if (iter.offset >= iter.data.length) {\\n return;\\n }\\n\\n // Skip the name\\n uint256 off = iter.offset + nameLength(iter.data, iter.offset);\\n\\n // Read type, class, and ttl\\n iter.dnstype = iter.data.readUint16(off);\\n off += 2;\\n iter.class = iter.data.readUint16(off);\\n off += 2;\\n iter.ttl = iter.data.readUint32(off);\\n off += 4;\\n\\n // Read the rdata\\n uint256 rdataLength = iter.data.readUint16(off);\\n off += 2;\\n iter.rdataOffset = off;\\n iter.nextOffset = off + rdataLength;\\n }\\n\\n /**\\n * @dev Returns the name of the current record.\\n * @param iter The iterator.\\n * @return A new bytes object containing the owner name from the RR.\\n */\\n function name(RRIterator memory iter) internal pure returns (bytes memory) {\\n return\\n iter.data.substring(\\n iter.offset,\\n nameLength(iter.data, iter.offset)\\n );\\n }\\n\\n /**\\n * @dev Returns the rdata portion of the current record.\\n * @param iter The iterator.\\n * @return A new bytes object containing the RR's RDATA.\\n */\\n function rdata(\\n RRIterator memory iter\\n ) internal pure returns (bytes memory) {\\n return\\n iter.data.substring(\\n iter.rdataOffset,\\n iter.nextOffset - iter.rdataOffset\\n );\\n }\\n\\n uint256 constant DNSKEY_FLAGS = 0;\\n uint256 constant DNSKEY_PROTOCOL = 2;\\n uint256 constant DNSKEY_ALGORITHM = 3;\\n uint256 constant DNSKEY_PUBKEY = 4;\\n\\n struct DNSKEY {\\n uint16 flags;\\n uint8 protocol;\\n uint8 algorithm;\\n bytes publicKey;\\n }\\n\\n function readDNSKEY(\\n bytes memory data,\\n uint256 offset,\\n uint256 length\\n ) internal pure returns (DNSKEY memory self) {\\n self.flags = data.readUint16(offset + DNSKEY_FLAGS);\\n self.protocol = data.readUint8(offset + DNSKEY_PROTOCOL);\\n self.algorithm = data.readUint8(offset + DNSKEY_ALGORITHM);\\n self.publicKey = data.substring(\\n offset + DNSKEY_PUBKEY,\\n length - DNSKEY_PUBKEY\\n );\\n }\\n\\n uint256 constant DS_KEY_TAG = 0;\\n uint256 constant DS_ALGORITHM = 2;\\n uint256 constant DS_DIGEST_TYPE = 3;\\n uint256 constant DS_DIGEST = 4;\\n\\n struct DS {\\n uint16 keytag;\\n uint8 algorithm;\\n uint8 digestType;\\n bytes digest;\\n }\\n\\n function readDS(\\n bytes memory data,\\n uint256 offset,\\n uint256 length\\n ) internal pure returns (DS memory self) {\\n self.keytag = data.readUint16(offset + DS_KEY_TAG);\\n self.algorithm = data.readUint8(offset + DS_ALGORITHM);\\n self.digestType = data.readUint8(offset + DS_DIGEST_TYPE);\\n self.digest = data.substring(offset + DS_DIGEST, length - DS_DIGEST);\\n }\\n\\n function isSubdomainOf(\\n bytes memory self,\\n bytes memory other\\n ) internal pure returns (bool) {\\n uint256 off = 0;\\n uint256 counts = labelCount(self, 0);\\n uint256 othercounts = labelCount(other, 0);\\n\\n while (counts > othercounts) {\\n off = progress(self, off);\\n counts--;\\n }\\n\\n return self.equals(off, other, 0);\\n }\\n\\n function compareNames(\\n bytes memory self,\\n bytes memory other\\n ) internal pure returns (int256) {\\n if (self.equals(other)) {\\n return 0;\\n }\\n\\n uint256 off;\\n uint256 otheroff;\\n uint256 prevoff;\\n uint256 otherprevoff;\\n uint256 counts = labelCount(self, 0);\\n uint256 othercounts = labelCount(other, 0);\\n\\n // Keep removing labels from the front of the name until both names are equal length\\n while (counts > othercounts) {\\n prevoff = off;\\n off = progress(self, off);\\n counts--;\\n }\\n\\n while (othercounts > counts) {\\n otherprevoff = otheroff;\\n otheroff = progress(other, otheroff);\\n othercounts--;\\n }\\n\\n // Compare the last nonequal labels to each other\\n while (counts > 0 && !self.equals(off, other, otheroff)) {\\n prevoff = off;\\n off = progress(self, off);\\n otherprevoff = otheroff;\\n otheroff = progress(other, otheroff);\\n counts -= 1;\\n }\\n\\n if (off == 0) {\\n return -1;\\n }\\n if (otheroff == 0) {\\n return 1;\\n }\\n\\n return\\n self.compare(\\n prevoff + 1,\\n self.readUint8(prevoff),\\n other,\\n otherprevoff + 1,\\n other.readUint8(otherprevoff)\\n );\\n }\\n\\n /**\\n * @dev Compares two serial numbers using RFC1982 serial number math.\\n */\\n function serialNumberGte(\\n uint32 i1,\\n uint32 i2\\n ) internal pure returns (bool) {\\n unchecked {\\n return int32(i1) - int32(i2) >= 0;\\n }\\n }\\n\\n function progress(\\n bytes memory body,\\n uint256 off\\n ) internal pure returns (uint256) {\\n return off + 1 + body.readUint8(off);\\n }\\n\\n /**\\n * @dev Computes the keytag for a chunk of data.\\n * @param data The data to compute a keytag for.\\n * @return The computed key tag.\\n */\\n function computeKeytag(bytes memory data) internal pure returns (uint16) {\\n /* This function probably deserves some explanation.\\n * The DNSSEC keytag function is a checksum that relies on summing up individual bytes\\n * from the input string, with some mild bitshifting. Here's a Naive solidity implementation:\\n *\\n * function computeKeytag(bytes memory data) internal pure returns (uint16) {\\n * uint ac;\\n * for (uint i = 0; i < data.length; i++) {\\n * ac += i & 1 == 0 ? uint16(data.readUint8(i)) << 8 : data.readUint8(i);\\n * }\\n * return uint16(ac + (ac >> 16));\\n * }\\n *\\n * The EVM, with its 256 bit words, is exceedingly inefficient at doing byte-by-byte operations;\\n * the code above, on reasonable length inputs, consumes over 100k gas. But we can make the EVM's\\n * large words work in our favour.\\n *\\n * The code below works by treating the input as a series of 256 bit words. It first masks out\\n * even and odd bytes from each input word, adding them to two separate accumulators `ac1` and `ac2`.\\n * The bytes are separated by empty bytes, so as long as no individual sum exceeds 2^16-1, we're\\n * effectively summing 16 different numbers with each EVM ADD opcode.\\n *\\n * Once it's added up all the inputs, it has to add all the 16 bit values in `ac1` and `ac2` together.\\n * It does this using the same trick - mask out every other value, shift to align them, add them together.\\n * After the first addition on both accumulators, there's enough room to add the two accumulators together,\\n * and the remaining sums can be done just on ac1.\\n */\\n unchecked {\\n require(data.length <= 8192, \\\"Long keys not permitted\\\");\\n uint256 ac1;\\n uint256 ac2;\\n for (uint256 i = 0; i < data.length + 31; i += 32) {\\n uint256 word;\\n assembly {\\n word := mload(add(add(data, 32), i))\\n }\\n if (i + 32 > data.length) {\\n uint256 unused = 256 - (data.length - i) * 8;\\n word = (word >> unused) << unused;\\n }\\n ac1 +=\\n (word &\\n 0xFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00) >>\\n 8;\\n ac2 += (word &\\n 0x00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF);\\n }\\n ac1 =\\n (ac1 &\\n 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) +\\n ((ac1 &\\n 0xFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000) >>\\n 16);\\n ac2 =\\n (ac2 &\\n 0x0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF) +\\n ((ac2 &\\n 0xFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000) >>\\n 16);\\n ac1 = (ac1 << 8) + ac2;\\n ac1 =\\n (ac1 &\\n 0x00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF) +\\n ((ac1 &\\n 0xFFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000000) >>\\n 32);\\n ac1 =\\n (ac1 &\\n 0x0000000000000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF) +\\n ((ac1 &\\n 0xFFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF0000000000000000) >>\\n 64);\\n ac1 =\\n (ac1 &\\n 0x00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) +\\n (ac1 >> 128);\\n ac1 += (ac1 >> 16) & 0xFFFF;\\n return uint16(ac1);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x4dd68a6efd7c38f6b0e95ca0c056ecb74f88583da650b1a8639e6e78be36fede\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"src/extensions/Multicallable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { ERC165 } from \\\"@openzeppelin/contracts/utils/introspection/ERC165.sol\\\";\\nimport { IMulticallable } from \\\"../interfaces/IMulticallable.sol\\\";\\nimport { ErrorHandler } from \\\"../libraries/ErrorHandler.sol\\\";\\n\\nabstract contract Multicallable is ERC165, IMulticallable {\\n using ErrorHandler for bool;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) {\\n return interfaceID == type(IMulticallable).interfaceId || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @inheritdoc IMulticallable\\n */\\n function multicall(bytes[] calldata data) public override returns (bytes[] memory results) {\\n return _tryMulticall(true, data);\\n }\\n\\n /**\\n * @inheritdoc IMulticallable\\n */\\n function tryMulticall(bool requireSuccess, bytes[] calldata data) public override returns (bytes[] memory results) {\\n return _tryMulticall(requireSuccess, data);\\n }\\n\\n /**\\n * @dev See {IMulticallable-tryMulticall}.\\n */\\n function _tryMulticall(bool requireSuccess, bytes[] calldata data) internal returns (bytes[] memory results) {\\n uint256 length = data.length;\\n results = new bytes[](length);\\n\\n bool success;\\n bytes memory result;\\n\\n for (uint256 i; i < length;) {\\n (success, result) = address(this).delegatecall(data[i]);\\n if (requireSuccess) success.handleRevert(result);\\n results[i] = result;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x70872947f6c70988ee36af335bf872338b55ca71d8ea3c92dcb153ec5d05bc21\",\"license\":\"MIT\"},\"src/interfaces/IMulticallable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\n/**\\n * @notice To multi-call to a specified contract which has multicall interface:\\n *\\n * ```solidity\\n * interface IMock is IMulticallable {\\n * function foo() external;\\n * function bar() external;\\n * }\\n *\\n * bytes[] memory calldatas = new bytes[](2);\\n * calldatas[0] = abi.encodeCall(IMock.foo,());\\n * calldatas[1] = abi.encodeCall(IMock.bar,());\\n * IMock(target).multicall(calldatas);\\n * ```\\n */\\ninterface IMulticallable {\\n /**\\n * @dev Executes bulk action to the original contract.\\n * Reverts if there is a single call failed.\\n *\\n * @param data The calldata to original contract.\\n *\\n */\\n function multicall(bytes[] calldata data) external returns (bytes[] memory results);\\n\\n /**\\n * @dev Executes bulk action to the original contract.\\n *\\n * @param requireSuccess Flag to indicating whether the contract reverts if there is a single call failed.\\n * @param data The calldata to original contract.\\n *\\n */\\n function tryMulticall(bool requireSuccess, bytes[] calldata data) external returns (bytes[] memory results);\\n}\\n\",\"keccak256\":\"0x0e76578b0efeafdf33915d77d3f98145ac2f74cdd311db03a9b94d4aa566d107\",\"license\":\"UNLICENSED\"},\"src/interfaces/INSReverseRegistrar.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\nimport { INameResolver } from \\\"./resolvers/INameResolver.sol\\\";\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\n\\n/// @dev See https://eips.ethereum.org/EIPS/eip-181#registrar\\ninterface IERC181 {\\n /**\\n * @dev Claims the name hex(addr) + '.addr.reverse' for addr.\\n *\\n * @param addr The address to set as the addr of the reverse record in INS.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claim(address addr) external returns (uint256 id);\\n\\n /**\\n * @dev Claims the name hex(owner) + '.addr.reverse' for owner and sets resolver.\\n *\\n * @param addr The address to set as the owner of the reverse record in INS.\\n * @param resolver The address of the resolver to set; 0 to leave unchanged.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claimWithResolver(address addr, address resolver) external returns (uint256 id);\\n\\n /**\\n * @dev Sets the name record for the reverse INS record associated with the calling account. First updates the\\n * resolver to the default reverse resolver if necessary.\\n *\\n * @param name The name to set for this address.\\n * @return The INS node hash of the reverse record.\\n */\\n function setName(string memory name) external returns (uint256);\\n}\\n\\ninterface INSReverseRegistrar is IERC181, IERC165 {\\n /// @dev Error: The provided id is not child node of `ADDR_REVERSE_ID`\\n error InvalidId();\\n /// @dev Error: The contract is not authorized for minting or modifying domain hex(addr) + '.addr.reverse'.\\n error InvalidConfig();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: The provided resolver address is null.\\n error NullAssignment();\\n\\n /// @dev Emitted when reverse node is claimed.\\n event ReverseClaimed(address indexed addr, uint256 indexed id);\\n /// @dev Emitted when the default resolver is changed.\\n event DefaultResolverChanged(INameResolver indexed resolver);\\n\\n /**\\n * @dev Returns the controller role.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns default resolver.\\n */\\n function getDefaultResolver() external view returns (INameResolver);\\n\\n /**\\n * @dev Returns RNSUnified contract.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Sets default resolver.\\n *\\n * Requirement:\\n *\\n * - The method caller must be admin.\\n *\\n * Emitted an event {DefaultResolverChanged}.\\n *\\n */\\n function setDefaultResolver(INameResolver resolver) external;\\n\\n /**\\n * @dev Same as {IERC181-setName}.\\n */\\n function setNameForAddr(address addr, string memory name) external returns (uint256 id);\\n\\n /**\\n * @dev Returns address that the reverse node resolves for.\\n * Eg. node namehash('{addr}.addr.reverse') will always resolve for `addr`.\\n */\\n function getAddress(uint256 id) external view returns (address);\\n\\n /**\\n * @dev Returns the id hash for a given account's reverse records.\\n * @param addr The address to hash\\n * @return The INS node hash.\\n */\\n function computeId(address addr) external pure returns (uint256);\\n}\\n\",\"keccak256\":\"0x3b88e9ea1dd7c128244b5d0c69cee9dcadcb16b05a7e13416cc7b95c071b60a4\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0xaef1c58bb7c8688d6677a1c2739c0dc9e645ca5c64dd875be2f2b7a318a11406\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IABIResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.0;\\n\\ninterface IABIResolver {\\n /// Thrown when the input content type is invalid.\\n error InvalidContentType();\\n\\n /// @dev Emitted when the ABI is changed.\\n event ABIChanged(bytes32 indexed node, uint256 indexed contentType);\\n\\n /**\\n * @dev Sets the ABI associated with an INS node. Nodes may have one ABI of each content type. To remove an ABI, set it\\n * to the empty string.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n * - The content type must be powers of 2.\\n *\\n * Emitted an event {ABIChanged}.\\n *\\n * @param node The node to update.\\n * @param contentType The content type of the ABI\\n * @param data The ABI data.\\n */\\n function setABI(bytes32 node, uint256 contentType, bytes calldata data) external;\\n\\n /**\\n * @dev Returns the ABI associated with an INS node.\\n * Defined in EIP-205, see more at https://eips.ethereum.org/EIPS/eip-205\\n *\\n * @param node The INS node to query\\n * @param contentTypes A bitwise OR of the ABI formats accepted by the caller.\\n * @return contentType The content type of the return value\\n * @return data The ABI data\\n */\\n function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256 contentType, bytes memory data);\\n}\\n\",\"keccak256\":\"0xc701a6cafa883d6607b5916dfb4277099f39c450930d776da36a7acc2b2498c0\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IAddressResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.0;\\n\\ninterface IAddressResolver {\\n /// @dev Emitted when an address of a node is changed.\\n event AddrChanged(bytes32 indexed node, address addr);\\n\\n /**\\n * @dev Sets the address associated with an INS node.\\n *\\n * Requirement:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {AddrChanged}.\\n *\\n * @param node The node to update.\\n * @param addr The address to set.\\n */\\n function setAddr(bytes32 node, address addr) external;\\n\\n /**\\n * @dev Returns the address associated with an INS node.\\n * @param node The INS node to query.\\n * @return The associated address.\\n */\\n function addr(bytes32 node) external view returns (address payable);\\n}\\n\",\"keccak256\":\"0xb914cb4a730d20c867805fd148e7574c6565bc6c0a129825cdf3cf4f2f7f72d0\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IContentHashResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IContentHashResolver {\\n /// @dev Emitted when the content hash of a node is changed.\\n event ContentHashChanged(bytes32 indexed node, bytes hash);\\n\\n /**\\n * @dev Sets the content hash associated with an INS node.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {ContentHashChanged}.\\n *\\n * @param node The node to update.\\n * @param hash The content hash to set\\n */\\n function setContentHash(bytes32 node, bytes calldata hash) external;\\n\\n /**\\n * @dev Returns the content hash associated with an INS node.\\n * @param node The INS node to query.\\n * @return The associated content hash.\\n */\\n function contentHash(bytes32 node) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0xfbdc7211a813065e5cc2bdd3640c13f01c87b5f31fda86e562b0525628602c00\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IDNSRecordResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4;\\n\\ninterface IDNSRecordResolver {\\n /// @dev Emitted whenever a given node/name/resource's RRSET is updated.\\n event DNSRecordChanged(bytes32 indexed node, bytes name, uint16 resource, bytes record);\\n /// @dev Emitted whenever a given node/name/resource's RRSET is deleted.\\n event DNSRecordDeleted(bytes32 indexed node, bytes name, uint16 resource);\\n\\n /**\\n * @dev Set one or more DNS records. Records are supplied in wire-format. Records with the same node/name/resource\\n * must be supplied one after the other to ensure the data is updated correctly. For example, if the data was\\n * supplied:\\n * a.example.com IN A 1.2.3.4\\n * a.example.com IN A 5.6.7.8\\n * www.example.com IN CNAME a.example.com.\\n * then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was\\n * supplied:\\n * a.example.com IN A 1.2.3.4\\n * www.example.com IN CNAME a.example.com.\\n * a.example.com IN A 5.6.7.8\\n * then this would store the first A record, the CNAME, then the second A record which would overwrite the first.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * @param node the namehash of the node for which to set the records\\n * @param data the DNS wire format records to set\\n */\\n function setDNSRecords(bytes32 node, bytes calldata data) external;\\n\\n /**\\n * @dev Obtain a DNS record.\\n * @param node the namehash of the node for which to fetch the record\\n * @param name the keccak-256 hash of the fully-qualified name for which to fetch the record\\n * @param resource the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\\n * @return the DNS record in wire format if present, otherwise empty\\n */\\n function dnsRecord(bytes32 node, bytes32 name, uint16 resource) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x2341266d70b60f5bb666c066aaf1fdb35be81277bcdd04e3bf93ee774ae4d2f6\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IDNSZoneResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4;\\n\\ninterface IDNSZoneResolver {\\n /// @dev Emitted whenever a given node's zone hash is updated.\\n event DNSZonehashChanged(bytes32 indexed node, bytes lastzonehash, bytes zonehash);\\n\\n /**\\n * @dev Sets the hash for the zone.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {DNSZonehashChanged}.\\n *\\n * @param node The node to update.\\n * @param hash The zonehash to set\\n */\\n function setZonehash(bytes32 node, bytes calldata hash) external;\\n\\n /**\\n * @dev Obtains the hash for the zone.\\n * @param node The INS node to query.\\n * @return The associated contenthash.\\n */\\n function zonehash(bytes32 node) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x42aa5409a184740461e7477b8894d7549fd3908596bb7dba9adab59b8ff4ebed\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IInterfaceResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IInterfaceResolver {\\n /// @dev Emitted when the interface of node is changed.\\n event InterfaceChanged(bytes32 indexed node, bytes4 indexed interfaceID, address implementer);\\n\\n /**\\n * @dev Sets an interface associated with a name.\\n * Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * @param node The node to update.\\n * @param interfaceID The EIP 165 interface ID.\\n * @param implementer The address of a contract that implements this interface for this node.\\n */\\n function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external;\\n\\n /**\\n * @dev Returns the address of a contract that implements the specified interface for this name.\\n *\\n * If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`.\\n * If `addr()` is set, a contract exists at that address, and that contract implements EIP165 and returns `true` for\\n * the specified interfaceID, its address will be returned.\\n *\\n * @param node The INS node to query.\\n * @param interfaceID The EIP 165 interface ID to check for.\\n * @return The address that implements this interface, or 0 if the interface is unsupported.\\n */\\n function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address);\\n}\\n\",\"keccak256\":\"0xb4a1867d5cb899bfdc2e812c4bf9b9d3d14b34e0f72cbeffb4e018f8659b13fc\",\"license\":\"MIT\"},\"src/interfaces/resolvers/INameResolver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\ninterface INameResolver {\\n /// @dev Emitted when a node name is changed.\\n event NameChanged(bytes32 indexed node, string name);\\n\\n /**\\n * @dev Sets the name associated with an INS node, for reverse records.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {NameChanged}.\\n *\\n * @param node The node to update.\\n */\\n function setName(bytes32 node, string calldata newName) external;\\n\\n /**\\n * @dev Returns the name associated with an INS node, for reverse records.\\n * @param node The INS node to query.\\n * @return The associated name.\\n */\\n function name(bytes32 node) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xf3dbbe3238d5f1e491a43dbccbd74755fcd325b5c6aef6b7f0819684bd1f9da3\",\"license\":\"UNLICENSED\"},\"src/interfaces/resolvers/IPublicKeyResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ninterface IPublicKeyResolver {\\n struct PublicKey {\\n bytes32 x;\\n bytes32 y;\\n }\\n\\n /// @dev Emitted when a node public key is changed.\\n event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);\\n\\n /**\\n * @dev Sets the SECP256k1 public key associated with an INS node.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {PubkeyChanged}.\\n *\\n * @param node The INS node to query\\n * @param x the X coordinate of the curve point for the public key.\\n * @param y the Y coordinate of the curve point for the public key.\\n */\\n function setPubkey(bytes32 node, bytes32 x, bytes32 y) external;\\n\\n /**\\n * @dev Returns the SECP256k1 public key associated with an INS node.\\n * Defined in EIP 619.\\n *\\n * @param node The INS node to query\\n * @return x The X coordinate of the curve point for the public key.\\n * @return y The Y coordinate of the curve point for the public key.\\n */\\n function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y);\\n}\\n\",\"keccak256\":\"0x2644fd8d9b951c2aca5521ba519b68d4f3de19b731dae7907b6372e1ceac07ae\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IPublicResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"../INSUnified.sol\\\";\\nimport { INSReverseRegistrar } from \\\"../INSReverseRegistrar.sol\\\";\\nimport { IABIResolver } from \\\"./IABIResolver.sol\\\";\\nimport { IAddressResolver } from \\\"./IAddressResolver.sol\\\";\\nimport { IContentHashResolver } from \\\"./IContentHashResolver.sol\\\";\\nimport { IDNSRecordResolver } from \\\"./IDNSRecordResolver.sol\\\";\\nimport { IDNSZoneResolver } from \\\"./IDNSZoneResolver.sol\\\";\\nimport { IInterfaceResolver } from \\\"./IInterfaceResolver.sol\\\";\\nimport { INameResolver } from \\\"./INameResolver.sol\\\";\\nimport { IPublicKeyResolver } from \\\"./IPublicKeyResolver.sol\\\";\\nimport { ITextResolver } from \\\"./ITextResolver.sol\\\";\\nimport { IMulticallable } from \\\"../IMulticallable.sol\\\";\\n\\ninterface IPublicResolver is\\n IABIResolver,\\n IAddressResolver,\\n IContentHashResolver,\\n IDNSRecordResolver,\\n IDNSZoneResolver,\\n IInterfaceResolver,\\n INameResolver,\\n IPublicKeyResolver,\\n ITextResolver,\\n IMulticallable\\n{\\n /// @dev See {IERC1155-ApprovalForAll}. Logged when an operator is added or removed.\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /// @dev Logged when a delegate is approved or an approval is revoked.\\n event Approved(address owner, bytes32 indexed node, address indexed delegate, bool indexed approved);\\n\\n /**\\n * @dev Checks if an account is authorized to manage the resolution of a specific RNS node.\\n * @param node The RNS node.\\n * @param account The account address being checked for authorization.\\n * @return A boolean indicating whether the account is authorized.\\n */\\n function isAuthorized(bytes32 node, address account) external view returns (bool);\\n\\n /**\\n * @dev Retrieves the RNSUnified associated with this resolver.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Retrieves the reverse registrar associated with this resolver.\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar);\\n\\n /**\\n * @dev This function provides an extra security check when called from privileged contracts (such as\\n * RONRegistrarController) that can set records on behalf of the node owners.\\n *\\n * Reverts if the node is not null but calldata is mismatched.\\n */\\n function multicallWithNodeCheck(bytes32 node, bytes[] calldata data) external returns (bytes[] memory results);\\n}\\n\",\"keccak256\":\"0x97b6f762f25a4dc3f6398a76bbcb7d3922f5f440ee9e0541c83579e09a8f87b7\",\"license\":\"MIT\"},\"src/interfaces/resolvers/ITextResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ninterface ITextResolver {\\n /// @dev Emitted when a node text is changed.\\n event TextChanged(bytes32 indexed node, string indexed indexedKey, string key, string value);\\n\\n /**\\n * @dev Sets the text data associated with an INS node and key.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {TextChanged}.\\n *\\n * @param node The node to update.\\n * @param key The key to set.\\n * @param value The text data value to set.\\n */\\n function setText(bytes32 node, string calldata key, string calldata value) external;\\n\\n /**\\n * Returns the text data associated with an INS node and key.\\n * @param node The INS node to query.\\n * @param key The text data key to query.\\n * @return The associated text data.\\n */\\n function text(bytes32 node, string calldata key) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x05ce1760d3a16d99614b1a46c11308238e1ecd8be23f081fac146bbc58961ecf\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IVersionResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IVersionResolver {\\n /// @dev Emitted when the version of a node is changed.\\n event VersionChanged(bytes32 indexed node, uint64 newVersion);\\n\\n /**\\n * @dev Increments the record version associated with an INS node.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {VersionChanged}.\\n *\\n * @param node The node to update.\\n */\\n function clearRecords(bytes32 node) external;\\n\\n /**\\n * @dev Returns the latest version of a node.\\n */\\n function recordVersions(bytes32 node) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0xa242d9b3a63c3851d973e11f1c2cd73fb103e462994c55a069c0a386446d13c3\",\"license\":\"MIT\"},\"src/libraries/ErrorHandler.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nlibrary ErrorHandler {\\n error ExternalCallFailed();\\n\\n function handleRevert(bool status, bytes memory returnOrRevertData) internal pure {\\n assembly {\\n if iszero(status) {\\n let revertLength := mload(returnOrRevertData)\\n if iszero(iszero(revertLength)) {\\n // Start of revert data bytes. The 0x20 offset is always the same.\\n revert(add(returnOrRevertData, 0x20), revertLength)\\n }\\n\\n // revert ExternalCallFailed()\\n mstore(0x00, 0x350c20f1)\\n revert(0x1c, 0x04)\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x90049794d1f708cc33034b26d4e8c79c1c4ed630399fccd9280c9d43751e3d0e\",\"license\":\"MIT\"},\"src/resolvers/ABIResolvable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/utils/introspection/ERC165.sol\\\";\\nimport \\\"../interfaces/resolvers/IABIResolver.sol\\\";\\nimport \\\"./BaseVersion.sol\\\";\\n\\nabstract contract ABIResolvable is IABIResolver, ERC165, BaseVersion {\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Mapping from version => node => content type => abi\\n mapping(uint64 version => mapping(bytes32 node => mapping(uint256 contentType => bytes abi))) internal _versionalAbi;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) {\\n return interfaceID == type(IABIResolver).interfaceId || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @inheritdoc IABIResolver\\n */\\n function ABI(bytes32 node, uint256 contentTypes) external view virtual override returns (uint256, bytes memory) {\\n mapping(uint256 contentType => bytes abi) storage abiSet = _versionalAbi[_recordVersion[node]][node];\\n\\n for (uint256 contentType = 1; contentType <= contentTypes; contentType <<= 1) {\\n if ((contentType & contentTypes) != 0 && abiSet[contentType].length > 0) {\\n return (contentType, abiSet[contentType]);\\n }\\n }\\n\\n return (0, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IABIResolver-setABI}.\\n */\\n function _setABI(bytes32 node, uint256 contentType, bytes calldata data) internal {\\n if (((contentType - 1) & contentType) != 0) revert InvalidContentType();\\n _versionalAbi[_recordVersion[node]][node][contentType] = data;\\n emit ABIChanged(node, contentType);\\n }\\n}\\n\",\"keccak256\":\"0xac8f1a328cf0b63c742bdb22a20131670b7f1ad83aa1d84b449df83d4e72b1b7\",\"license\":\"MIT\"},\"src/resolvers/AddressResolvable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/utils/introspection/ERC165.sol\\\";\\nimport \\\"../interfaces/resolvers/IAddressResolver.sol\\\";\\nimport \\\"./BaseVersion.sol\\\";\\n\\nabstract contract AddressResolvable is IAddressResolver, ERC165, BaseVersion {\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Mapping from version => node => address\\n mapping(uint64 version => mapping(bytes32 node => address addr)) internal _versionAddress;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) {\\n return interfaceID == type(IAddressResolver).interfaceId || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @inheritdoc IAddressResolver\\n */\\n function addr(bytes32 node) public view virtual override returns (address payable) {\\n return payable(_versionAddress[_recordVersion[node]][node]);\\n }\\n\\n /**\\n * @dev See {IAddressResolver-setAddr}.\\n */\\n function _setAddr(bytes32 node, address addr_) internal {\\n emit AddrChanged(node, addr_);\\n _versionAddress[_recordVersion[node]][node] = addr_;\\n }\\n}\\n\",\"keccak256\":\"0x9c4b5a43362faad9f03143ab8aeadd9a54d454201bf845bd35639a344e43007d\",\"license\":\"MIT\"},\"src/resolvers/BaseVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/utils/introspection/ERC165.sol\\\";\\nimport \\\"../interfaces/resolvers/IVersionResolver.sol\\\";\\n\\nabstract contract BaseVersion is IVersionResolver, ERC165 {\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Mapping from node => version\\n mapping(bytes32 node => uint64 version) internal _recordVersion;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) {\\n return interfaceID == type(IVersionResolver).interfaceId || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @inheritdoc IVersionResolver\\n */\\n function recordVersions(bytes32 node) external view returns (uint64) {\\n return _recordVersion[node];\\n }\\n\\n /**\\n * @dev See {IVersionResolver-clearRecords}.\\n */\\n function _clearRecords(bytes32 node) internal {\\n unchecked {\\n emit VersionChanged(node, ++_recordVersion[node]);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x8d09835f4729b898f9cb443c17436067d809961a57794254e5c7bec5114e719d\",\"license\":\"MIT\"},\"src/resolvers/ContentHashResolvable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/utils/introspection/ERC165.sol\\\";\\nimport \\\"../interfaces/resolvers/IContentHashResolver.sol\\\";\\nimport \\\"./BaseVersion.sol\\\";\\n\\nabstract contract ContentHashResolvable is IContentHashResolver, ERC165, BaseVersion {\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Mapping from version => node => content hash\\n mapping(uint64 version => mapping(bytes32 node => bytes contentHash)) internal _versionContentHash;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) {\\n return interfaceID == type(IContentHashResolver).interfaceId || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @inheritdoc IContentHashResolver\\n */\\n function contentHash(bytes32 node) external view virtual override returns (bytes memory) {\\n return _versionContentHash[_recordVersion[node]][node];\\n }\\n\\n /**\\n * @dev See {IContentHashResolver-setContentHash}.\\n */\\n function _setContentHash(bytes32 node, bytes calldata hash) internal {\\n _versionContentHash[_recordVersion[node]][node] = hash;\\n emit ContentHashChanged(node, hash);\\n }\\n}\\n\",\"keccak256\":\"0xe422bff4488e840435ffc6f865032bf74c61273524389b08933cbbb245146dd0\",\"license\":\"MIT\"},\"src/resolvers/DNSResolvable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/utils/introspection/ERC165.sol\\\";\\nimport \\\"@ensdomains/ens-contracts/dnssec-oracle/RRUtils.sol\\\";\\nimport \\\"../interfaces/resolvers/IDNSRecordResolver.sol\\\";\\nimport \\\"../interfaces/resolvers/IDNSZoneResolver.sol\\\";\\nimport \\\"./BaseVersion.sol\\\";\\n\\nabstract contract DNSResolvable is IDNSRecordResolver, IDNSZoneResolver, ERC165, BaseVersion {\\n using RRUtils for *;\\n using BytesUtils for bytes;\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev The records themselves. Stored as binary RRSETs.\\n mapping(\\n uint64 version => mapping(bytes32 node => mapping(bytes32 nameHash => mapping(uint16 resource => bytes data)))\\n ) private _versionRecord;\\n\\n /// @dev Count of number of entries for a given name. Required for DNS resolvers when resolving wildcards.\\n mapping(uint64 version => mapping(bytes32 node => mapping(bytes32 nameHash => uint16 count))) private\\n _versionNameEntriesCount;\\n\\n /**\\n * @dev Zone hashes for the domains. A zone hash is an EIP-1577 content hash in binary format that should point to a\\n * resource containing a single zonefile.\\n */\\n mapping(uint64 version => mapping(bytes32 node => bytes data)) private _versionZonehash;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) {\\n return interfaceID == type(IDNSRecordResolver).interfaceId || interfaceID == type(IDNSZoneResolver).interfaceId\\n || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @dev Checks whether a given node has records.\\n * @param node the namehash of the node for which to check the records\\n * @param name the namehash of the node for which to check the records\\n */\\n function hasDNSRecords(bytes32 node, bytes32 name) public view virtual returns (bool) {\\n return (_versionNameEntriesCount[_recordVersion[node]][node][name] != 0);\\n }\\n\\n /**\\n * @inheritdoc IDNSRecordResolver\\n */\\n function dnsRecord(bytes32 node, bytes32 name, uint16 resource) public view virtual override returns (bytes memory) {\\n return _versionRecord[_recordVersion[node]][node][name][resource];\\n }\\n\\n /**\\n * @inheritdoc IDNSZoneResolver\\n */\\n function zonehash(bytes32 node) external view virtual override returns (bytes memory) {\\n return _versionZonehash[_recordVersion[node]][node];\\n }\\n\\n /**\\n * @dev See {IDNSRecordResolver-setDNSRecords}.\\n */\\n function _setDNSRecords(bytes32 node, bytes calldata data) internal {\\n uint16 resource = 0;\\n uint256 offset = 0;\\n bytes memory name;\\n bytes memory value;\\n bytes32 nameHash;\\n uint64 version = _recordVersion[node];\\n // Iterate over the data to add the resource records\\n for (RRUtils.RRIterator memory iter = data.iterateRRs(0); !iter.done(); iter.next()) {\\n if (resource == 0) {\\n resource = iter.dnstype;\\n name = iter.name();\\n nameHash = keccak256(abi.encodePacked(name));\\n value = bytes(iter.rdata());\\n } else {\\n bytes memory newName = iter.name();\\n if (resource != iter.dnstype || !name.equals(newName)) {\\n _setDNSRRSet(node, name, resource, data, offset, iter.offset - offset, value.length == 0, version);\\n resource = iter.dnstype;\\n offset = iter.offset;\\n name = newName;\\n nameHash = keccak256(name);\\n value = bytes(iter.rdata());\\n }\\n }\\n }\\n\\n if (name.length > 0) {\\n _setDNSRRSet(node, name, resource, data, offset, data.length - offset, value.length == 0, version);\\n }\\n }\\n\\n /**\\n * @dev See {IDNSZoneResolver-setZonehash}.\\n */\\n function _setZonehash(bytes32 node, bytes calldata hash) internal {\\n uint64 currentRecordVersion = _recordVersion[node];\\n bytes memory oldhash = _versionZonehash[currentRecordVersion][node];\\n _versionZonehash[currentRecordVersion][node] = hash;\\n emit DNSZonehashChanged(node, oldhash, hash);\\n }\\n\\n /**\\n * @dev Helper method to set DNS config.\\n *\\n * May emit an event {DNSRecordDeleted}.\\n * May emit an event {DNSRecordChanged}.\\n *\\n */\\n function _setDNSRRSet(\\n bytes32 node,\\n bytes memory name,\\n uint16 resource,\\n bytes memory data,\\n uint256 offset,\\n uint256 size,\\n bool deleteRecord,\\n uint64 version\\n ) private {\\n bytes32 nameHash = keccak256(name);\\n bytes memory rrData = data.substring(offset, size);\\n if (deleteRecord) {\\n if (_versionRecord[version][node][nameHash][resource].length != 0) {\\n _versionNameEntriesCount[version][node][nameHash]--;\\n }\\n delete (_versionRecord[version][node][nameHash][resource]);\\n emit DNSRecordDeleted(node, name, resource);\\n } else {\\n if (_versionRecord[version][node][nameHash][resource].length == 0) {\\n _versionNameEntriesCount[version][node][nameHash]++;\\n }\\n _versionRecord[version][node][nameHash][resource] = rrData;\\n emit DNSRecordChanged(node, name, resource, rrData);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcd9cd7b32ee0a019bc6442226c89272ef271f5f9d4adbc4307131c0df94ea6a3\",\"license\":\"MIT\"},\"src/resolvers/InterfaceResolvable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport \\\"@openzeppelin/contracts/utils/introspection/ERC165.sol\\\";\\nimport { BaseVersion } from \\\"./BaseVersion.sol\\\";\\nimport { IInterfaceResolver } from \\\"../interfaces/resolvers/IInterfaceResolver.sol\\\";\\n\\nabstract contract InterfaceResolvable is IInterfaceResolver, ERC165, BaseVersion {\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Mapping from version => node => interfaceID => address\\n mapping(uint64 version => mapping(bytes32 node => mapping(bytes4 interfaceID => address addr))) internal\\n _versionInterface;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) {\\n return interfaceID == type(IInterfaceResolver).interfaceId || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @inheritdoc IInterfaceResolver\\n */\\n function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view virtual override returns (address) {\\n address implementer = _versionInterface[_recordVersion[node]][node][interfaceID];\\n if (implementer != address(0)) return implementer;\\n\\n address addrOfNode = addr(node);\\n if (addrOfNode == address(0)) return address(0);\\n\\n bool success;\\n bytes memory returnData;\\n\\n (success, returnData) =\\n addrOfNode.staticcall(abi.encodeCall(IERC165.supportsInterface, (type(IERC165).interfaceId)));\\n\\n // EIP 165 not supported by target\\n if (!_isValidReturnData(success, returnData)) return address(0);\\n\\n (success, returnData) = addrOfNode.staticcall(abi.encodeCall(IERC165.supportsInterface, (interfaceID)));\\n // Specified interface not supported by target\\n if (!_isValidReturnData(success, returnData)) return address(0);\\n\\n return addrOfNode;\\n }\\n\\n /**\\n * @dev See {IAddressResolver-addr}.\\n */\\n function addr(bytes32 node) public view virtual returns (address payable);\\n\\n /**\\n * @dev Checks whether the return data is valid.\\n */\\n function _isValidReturnData(bool success, bytes memory returnData) internal pure returns (bool) {\\n return success || returnData.length < 32 || returnData[31] == 0;\\n }\\n\\n /**\\n * @dev See {InterfaceResolver-setInterface}.\\n */\\n function _setInterface(bytes32 node, bytes4 interfaceID, address implementer) internal virtual {\\n _versionInterface[_recordVersion[node]][node][interfaceID] = implementer;\\n emit InterfaceChanged(node, interfaceID, implementer);\\n }\\n}\\n\",\"keccak256\":\"0x16136902c24340f0feecdfcfd7b3549f310d30a0c78b4f7744eb209bd06f85ae\",\"license\":\"MIT\"},\"src/resolvers/NameResolvable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { BaseVersion } from \\\"./BaseVersion.sol\\\";\\nimport { INameResolver } from \\\"../interfaces/resolvers/INameResolver.sol\\\";\\n\\nabstract contract NameResolvable is INameResolver, BaseVersion {\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev mapping from version => node => name\\n mapping(uint64 version => mapping(bytes32 node => string name)) internal _versionName;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) {\\n return interfaceID == type(INameResolver).interfaceId || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @inheritdoc INameResolver\\n */\\n function name(bytes32 node) public view virtual override returns (string memory) {\\n return _versionName[_recordVersion[node]][node];\\n }\\n\\n /**\\n * @dev See {INameResolver-setName}.\\n */\\n function _setName(bytes32 node, string memory newName) internal virtual {\\n _versionName[_recordVersion[node]][node] = newName;\\n emit NameChanged(node, newName);\\n }\\n}\\n\",\"keccak256\":\"0x4a2ca2f53f96792df863c5d87ff9399470212b5d570d2f4728191dbda3fa10c1\",\"license\":\"MIT\"},\"src/resolvers/PublicKeyResolvable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { BaseVersion } from \\\"./BaseVersion.sol\\\";\\nimport { IPublicKeyResolver } from \\\"../interfaces/resolvers/IPublicKeyResolver.sol\\\";\\n\\nabstract contract PublicKeyResolvable is BaseVersion, IPublicKeyResolver {\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Mapping from version => node => public key\\n mapping(uint64 version => mapping(bytes32 node => PublicKey publicKey)) internal _versionPublicKey;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) {\\n return interfaceID == type(IPublicKeyResolver).interfaceId || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @dev See {IPublicKeyResolver-pubkey}.\\n */\\n function pubkey(bytes32 node) external view virtual override returns (bytes32 x, bytes32 y) {\\n uint64 currentRecordVersion = _recordVersion[node];\\n return (_versionPublicKey[currentRecordVersion][node].x, _versionPublicKey[currentRecordVersion][node].y);\\n }\\n\\n /**\\n * @dev See {IPublicKeyResolver-setPubkey}.\\n */\\n function _setPubkey(bytes32 node, bytes32 x, bytes32 y) internal virtual {\\n _versionPublicKey[_recordVersion[node]][node] = PublicKey(x, y);\\n emit PubkeyChanged(node, x, y);\\n }\\n}\\n\",\"keccak256\":\"0x8d6c1d0d7f4e795cc21f07179d4d355b064f785f5bdcd0e57d603e6c8e8803dd\",\"license\":\"MIT\"},\"src/resolvers/PublicResolver.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { IVersionResolver } from \\\"../interfaces/resolvers/IVersionResolver.sol\\\";\\nimport { Multicallable } from \\\"../extensions/Multicallable.sol\\\";\\nimport { USER_FIELDS_INDICATOR } from \\\"../types/ModifyingIndicator.sol\\\";\\nimport { ABIResolvable } from \\\"./ABIResolvable.sol\\\";\\nimport { AddressResolvable } from \\\"./AddressResolvable.sol\\\";\\nimport { ContentHashResolvable } from \\\"./ContentHashResolvable.sol\\\";\\nimport { DNSResolvable } from \\\"./DNSResolvable.sol\\\";\\nimport { InterfaceResolvable } from \\\"./InterfaceResolvable.sol\\\";\\nimport { NameResolvable } from \\\"./NameResolvable.sol\\\";\\nimport { PublicKeyResolvable } from \\\"./PublicKeyResolvable.sol\\\";\\nimport { TextResolvable } from \\\"./TextResolvable.sol\\\";\\nimport \\\"../interfaces/resolvers/IPublicResolver.sol\\\";\\n\\n/**\\n * @title Public Resolver\\n * @notice Customized version of PublicResolver: https://github.com/ensdomains/ens-contracts/blob/0c75ba23fae76165d51c9c80d76d22261e06179d/contracts/resolvers/PublicResolver.sol\\n * @dev A simple resolver anyone can use, only allows the owner of a node to set its address.\\n */\\ncontract PublicResolver is\\n IPublicResolver,\\n ABIResolvable,\\n AddressResolvable,\\n ContentHashResolvable,\\n DNSResolvable,\\n InterfaceResolvable,\\n NameResolvable,\\n PublicKeyResolvable,\\n TextResolvable,\\n Multicallable,\\n Initializable\\n{\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev The RNS Unified contract\\n INSUnified internal _rnsUnified;\\n\\n /// @dev The reverse registrar contract\\n INSReverseRegistrar internal _reverseRegistrar;\\n\\n modifier onlyAuthorized(bytes32 node) {\\n _requireAuthorized(node, msg.sender);\\n _;\\n }\\n\\n constructor() payable {\\n _disableInitializers();\\n }\\n\\n function initialize(INSUnified rnsUnified, INSReverseRegistrar reverseRegistrar) external initializer {\\n _rnsUnified = rnsUnified;\\n _reverseRegistrar = reverseRegistrar;\\n }\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID)\\n public\\n view\\n override(\\n ABIResolvable,\\n AddressResolvable,\\n ContentHashResolvable,\\n DNSResolvable,\\n InterfaceResolvable,\\n NameResolvable,\\n PublicKeyResolvable,\\n TextResolvable,\\n Multicallable\\n )\\n returns (bool)\\n {\\n return super.supportsInterface(interfaceID);\\n }\\n\\n /// @inheritdoc IPublicResolver\\n function getRNSUnified() external view returns (INSUnified) {\\n return _rnsUnified;\\n }\\n\\n /// @inheritdoc IPublicResolver\\n function getReverseRegistrar() external view returns (INSReverseRegistrar) {\\n return _reverseRegistrar;\\n }\\n\\n /// @inheritdoc IPublicResolver\\n function multicallWithNodeCheck(bytes32 node, bytes[] calldata data)\\n external\\n override\\n returns (bytes[] memory results)\\n {\\n if (node != 0) {\\n for (uint256 i; i < data.length;) {\\n require(node == bytes32(data[i][4:36]), \\\"PublicResolver: All records must have a matching namehash\\\");\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n return _tryMulticall(true, data);\\n }\\n\\n /// @inheritdoc IVersionResolver\\n function clearRecords(bytes32 node) external onlyAuthorized(node) {\\n _clearRecords(node);\\n }\\n\\n /// @inheritdoc IABIResolver\\n function setABI(bytes32 node, uint256 contentType, bytes calldata data) external onlyAuthorized(node) {\\n _setABI(node, contentType, data);\\n }\\n\\n /// @inheritdoc IAddressResolver\\n function setAddr(bytes32 node, address addr_) external onlyAuthorized(node) {\\n revert(\\\"PublicResolver: Cannot set address\\\");\\n _setAddr(node, addr_);\\n }\\n\\n /// @inheritdoc IContentHashResolver\\n function setContentHash(bytes32 node, bytes calldata hash) external onlyAuthorized(node) {\\n _setContentHash(node, hash);\\n }\\n\\n /// @inheritdoc IDNSRecordResolver\\n function setDNSRecords(bytes32 node, bytes calldata data) external onlyAuthorized(node) {\\n _setDNSRecords(node, data);\\n }\\n\\n /// @inheritdoc IDNSZoneResolver\\n function setZonehash(bytes32 node, bytes calldata hash) external onlyAuthorized(node) {\\n _setZonehash(node, hash);\\n }\\n\\n /// @inheritdoc IInterfaceResolver\\n function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external onlyAuthorized(node) {\\n _setInterface(node, interfaceID, implementer);\\n }\\n\\n /// @inheritdoc INameResolver\\n function setName(bytes32 node, string calldata newName) external onlyAuthorized(node) {\\n _setName(node, newName);\\n }\\n\\n /// @inheritdoc IPublicKeyResolver\\n function setPubkey(bytes32 node, bytes32 x, bytes32 y) external onlyAuthorized(node) {\\n _setPubkey(node, x, y);\\n }\\n\\n /// @inheritdoc ITextResolver\\n function setText(bytes32 node, string calldata key, string calldata value) external onlyAuthorized(node) {\\n _setText(node, key, value);\\n }\\n\\n /// @inheritdoc IPublicResolver\\n function isAuthorized(bytes32 node, address account) public view returns (bool authorized) {\\n (authorized,) = _rnsUnified.canSetRecord(account, uint256(node), USER_FIELDS_INDICATOR);\\n }\\n\\n /// @dev Override {IAddressResolvable-addr}.\\n function addr(bytes32 node)\\n public\\n view\\n virtual\\n override(AddressResolvable, IAddressResolver, InterfaceResolvable)\\n returns (address payable)\\n {\\n return payable(_rnsUnified.ownerOf(uint256(node)));\\n }\\n\\n /// @dev Override {INameResolver-name}.\\n function name(bytes32 node) public view virtual override(INameResolver, NameResolvable) returns (string memory) {\\n address reversedAddress = _reverseRegistrar.getAddress(uint256(node));\\n string memory domainName = super.name(node);\\n uint256 tokenId = uint256(_rnsUnified.namehash(domainName));\\n return _rnsUnified.ownerOf(tokenId) == reversedAddress ? domainName : \\\"\\\";\\n }\\n\\n /**\\n * @dev Reverts if the msg sender is not authorized.\\n */\\n function _requireAuthorized(bytes32 node, address account) internal view {\\n require(isAuthorized(node, account), \\\"PublicResolver: unauthorized caller\\\");\\n }\\n}\\n\",\"keccak256\":\"0xd801a8373c330e97c7e3acf5cab650bcfc66f792ed9791c509fbf09adb2cc200\",\"license\":\"MIT\"},\"src/resolvers/TextResolvable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { BaseVersion } from \\\"./BaseVersion.sol\\\";\\nimport { ITextResolver } from \\\"../interfaces/resolvers/ITextResolver.sol\\\";\\n\\nabstract contract TextResolvable is BaseVersion, ITextResolver {\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n /// @dev Mapping from version => node => key => text\\n mapping(uint64 version => mapping(bytes32 node => mapping(string key => string text))) internal _versionText;\\n\\n /**\\n * @dev Override {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) {\\n return interfaceID == type(ITextResolver).interfaceId || super.supportsInterface(interfaceID);\\n }\\n\\n /**\\n * @inheritdoc ITextResolver\\n */\\n function text(bytes32 node, string calldata key) external view virtual override returns (string memory) {\\n return _versionText[_recordVersion[node]][node][key];\\n }\\n\\n /**\\n * @dev See {ITextResolver-setText}.\\n */\\n function _setText(bytes32 node, string calldata key, string calldata value) internal virtual {\\n _versionText[_recordVersion[node]][node][key] = value;\\n emit TextChanged(node, key, key, value);\\n }\\n}\\n\",\"keccak256\":\"0x96ba97e9d286137e00aef1c40934fa5175be44b11048ac3fea1c8e59d872df2e\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0xe364b4d2e480a7f3e392a40f792303c0febf79c1a623eb4c2278f652210e2e6c\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182505, + "numDeployments": 1, + "storageLayout": { + "storage": [ + { + "astId": 67858, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "0", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 67863, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_recordVersion", + "offset": 0, + "slot": "50", + "type": "t_mapping(t_bytes32,t_uint64)" + }, + { + "astId": 67613, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 67622, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionalAbi", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes_storage)))" + }, + { + "astId": 67768, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 67775, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionAddress", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_address))" + }, + { + "astId": 67931, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "153", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 67938, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionContentHash", + "offset": 0, + "slot": "203", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_bytes_storage))" + }, + { + "astId": 68030, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "204", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 68041, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionRecord", + "offset": 0, + "slot": "254", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_uint16,t_bytes_storage))))" + }, + { + "astId": 68050, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionNameEntriesCount", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_bytes32,t_uint16)))" + }, + { + "astId": 68057, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionZonehash", + "offset": 0, + "slot": "256", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_bytes_storage))" + }, + { + "astId": 68508, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "257", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 68517, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionInterface", + "offset": 0, + "slot": "307", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_bytes4,t_address)))" + }, + { + "astId": 68732, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "308", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 68739, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionName", + "offset": 0, + "slot": "358", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_string_storage))" + }, + { + "astId": 68819, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "359", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 68827, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionPublicKey", + "offset": 0, + "slot": "409", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_struct(PublicKey)65836_storage))" + }, + { + "astId": 69423, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "410", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 69432, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_versionText", + "offset": 0, + "slot": "460", + "type": "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_string_memory_ptr,t_string_storage)))" + }, + { + "astId": 50000, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_initialized", + "offset": 0, + "slot": "461", + "type": "t_uint8" + }, + { + "astId": 50003, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_initializing", + "offset": 1, + "slot": "461", + "type": "t_bool" + }, + { + "astId": 68967, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "____gap", + "offset": 0, + "slot": "462", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 68971, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_rnsUnified", + "offset": 0, + "slot": "512", + "type": "t_contract(INSUnified)65128" + }, + { + "astId": 68975, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "_reverseRegistrar", + "offset": 0, + "slot": "513", + "type": "t_contract(INSReverseRegistrar)64874" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_bytes_storage": { + "encoding": "bytes", + "label": "bytes", + "numberOfBytes": "32" + }, + "t_contract(INSReverseRegistrar)64874": { + "encoding": "inplace", + "label": "contract INSReverseRegistrar", + "numberOfBytes": "20" + }, + "t_contract(INSUnified)65128": { + "encoding": "inplace", + "label": "contract INSUnified", + "numberOfBytes": "20" + }, + "t_mapping(t_bytes32,t_address)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_bytes32,t_bytes_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => bytes)", + "numberOfBytes": "32", + "value": "t_bytes_storage" + }, + "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_uint16,t_bytes_storage)))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(bytes32 => mapping(uint16 => bytes)))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_mapping(t_uint16,t_bytes_storage))" + }, + "t_mapping(t_bytes32,t_mapping(t_bytes32,t_uint16))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(bytes32 => uint16))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_uint16)" + }, + "t_mapping(t_bytes32,t_mapping(t_bytes4,t_address))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(bytes4 => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes4,t_address)" + }, + "t_mapping(t_bytes32,t_mapping(t_string_memory_ptr,t_string_storage))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(string => string))", + "numberOfBytes": "32", + "value": "t_mapping(t_string_memory_ptr,t_string_storage)" + }, + "t_mapping(t_bytes32,t_mapping(t_uint16,t_bytes_storage))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(uint16 => bytes))", + "numberOfBytes": "32", + "value": "t_mapping(t_uint16,t_bytes_storage)" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes_storage))": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => mapping(uint256 => bytes))", + "numberOfBytes": "32", + "value": "t_mapping(t_uint256,t_bytes_storage)" + }, + "t_mapping(t_bytes32,t_string_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_mapping(t_bytes32,t_struct(PublicKey)65836_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct IPublicKeyResolver.PublicKey)", + "numberOfBytes": "32", + "value": "t_struct(PublicKey)65836_storage" + }, + "t_mapping(t_bytes32,t_uint16)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint16)", + "numberOfBytes": "32", + "value": "t_uint16" + }, + "t_mapping(t_bytes32,t_uint64)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint64)", + "numberOfBytes": "32", + "value": "t_uint64" + }, + "t_mapping(t_bytes4,t_address)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_string_memory_ptr,t_string_storage)": { + "encoding": "mapping", + "key": "t_string_memory_ptr", + "label": "mapping(string => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_mapping(t_uint16,t_bytes_storage)": { + "encoding": "mapping", + "key": "t_uint16", + "label": "mapping(uint16 => bytes)", + "numberOfBytes": "32", + "value": "t_bytes_storage" + }, + "t_mapping(t_uint256,t_bytes_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bytes)", + "numberOfBytes": "32", + "value": "t_bytes_storage" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_address))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => address))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_address)" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_bytes_storage))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => bytes))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_bytes_storage)" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_uint16,t_bytes_storage))))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => mapping(bytes32 => mapping(uint16 => bytes))))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_uint16,t_bytes_storage)))" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_bytes32,t_uint16)))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => mapping(bytes32 => uint16)))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_uint16))" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_bytes4,t_address)))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => mapping(bytes4 => address)))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_mapping(t_bytes4,t_address))" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_string_memory_ptr,t_string_storage)))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => mapping(string => string)))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_mapping(t_string_memory_ptr,t_string_storage))" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes_storage)))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => mapping(uint256 => bytes)))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes_storage))" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_string_storage))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => string))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_string_storage)" + }, + "t_mapping(t_uint64,t_mapping(t_bytes32,t_struct(PublicKey)65836_storage))": { + "encoding": "mapping", + "key": "t_uint64", + "label": "mapping(uint64 => mapping(bytes32 => struct IPublicKeyResolver.PublicKey))", + "numberOfBytes": "32", + "value": "t_mapping(t_bytes32,t_struct(PublicKey)65836_storage)" + }, + "t_string_memory_ptr": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(PublicKey)65836_storage": { + "encoding": "inplace", + "label": "struct IPublicKeyResolver.PublicKey", + "numberOfBytes": "64", + "members": [ + { + "astId": 65833, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "x", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 65835, + "contract": "src/resolvers/PublicResolver.sol:PublicResolver", + "label": "y", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ] + }, + "t_uint16": { + "encoding": "inplace", + "label": "uint16", + "numberOfBytes": "2" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "text(bytes32,string)": { + "notice": "Returns the text data associated with an INS node and key." + } + }, + "errors": { + "InvalidContentType()": [ + { + "notice": "Thrown when the input content type is invalid." + } + ] + }, + "notice": "Customized version of PublicResolver: https://github.com/ensdomains/ens-contracts/blob/0c75ba23fae76165d51c9c80d76d22261e06179d/contracts/resolvers/PublicResolver.sol" + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/PublicResolverProxy.json b/deployments/ronin-testnet/PublicResolverProxy.json new file mode 100644 index 00000000..693d006c --- /dev/null +++ b/deployments/ronin-testnet/PublicResolverProxy.json @@ -0,0 +1,120 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "address": "0x803c459dCB8771e5354D1fC567Ecc6885A9fd5E6", + "args": "0x485cc955000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf830000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716", + "blockNumber": 21224275, + "bytecode": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "chainId": 2021, + "contractName": "TransparentUpgradeableProxy", + "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.", + "methods": { + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + } + }, + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is changed." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Emitted when the beacon is changed.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\\n * does not implement this interface directly, and some of its functions are implemented by an internal dispatch\\n * mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\\n * include them in the ABI so this interface must be used to interact with it.\\n */\\ninterface ITransparentUpgradeableProxy is IERC1967 {\\n function admin() external view returns (address);\\n\\n function implementation() external view returns (address);\\n\\n function changeAdmin(address) external;\\n\\n function upgradeTo(address) external;\\n\\n function upgradeToAndCall(address, bytes memory) external payable;\\n}\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n *\\n * NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\\n * inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch\\n * mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\\n * fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\\n * implementation.\\n *\\n * WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler\\n * will not check that there are no selector conflicts, due to the note above. A selector clash between any new function\\n * and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could\\n * render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n *\\n * CAUTION: This modifier is deprecated, as it could cause issues if the modified function has arguments, and the\\n * implementation provides a function with the same selector.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior\\n */\\n function _fallback() internal virtual override {\\n if (msg.sender == _getAdmin()) {\\n bytes memory ret;\\n bytes4 selector = msg.sig;\\n if (selector == ITransparentUpgradeableProxy.upgradeTo.selector) {\\n ret = _dispatchUpgradeTo();\\n } else if (selector == ITransparentUpgradeableProxy.upgradeToAndCall.selector) {\\n ret = _dispatchUpgradeToAndCall();\\n } else if (selector == ITransparentUpgradeableProxy.changeAdmin.selector) {\\n ret = _dispatchChangeAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.admin.selector) {\\n ret = _dispatchAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.implementation.selector) {\\n ret = _dispatchImplementation();\\n } else {\\n revert(\\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n }\\n assembly {\\n return(add(ret, 0x20), mload(ret))\\n }\\n } else {\\n super._fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function _dispatchAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address admin = _getAdmin();\\n return abi.encode(admin);\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function _dispatchImplementation() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address implementation = _implementation();\\n return abi.encode(implementation);\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _dispatchChangeAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newAdmin = abi.decode(msg.data[4:], (address));\\n _changeAdmin(newAdmin);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n */\\n function _dispatchUpgradeTo() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newImplementation = abi.decode(msg.data[4:], (address));\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n */\\n function _dispatchUpgradeToAndCall() private returns (bytes memory) {\\n (address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));\\n _upgradeToAndCall(newImplementation, data, true);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * CAUTION: This function is deprecated. Use {ERC1967Upgrade-_getAdmin} instead.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev To keep this contract fully transparent, all `ifAdmin` functions must be payable. This helper is here to\\n * emulate some proxy functions being non-payable while still allowing value to pass through.\\n */\\n function _requireZeroValue() private {\\n require(msg.value == 0);\\n }\\n}\\n\",\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n struct StringSlot {\\n string value;\\n }\\n\\n struct BytesSlot {\\n bytes value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n */\\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n */\\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n */\\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n */\\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182506, + "numDeployments": 1, + "storageLayout": { + "storage": [], + "types": {} + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RNSAuctionLogic.json b/deployments/ronin-testnet/RNSAuctionLogic.json new file mode 100644 index 00000000..483063a3 --- /dev/null +++ b/deployments/ronin-testnet/RNSAuctionLogic.json @@ -0,0 +1,13595 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AlreadyBidding", + "type": "error" + }, + { + "inputs": [], + "name": "ContractBidderIsForbidden", + "type": "error" + }, + { + "inputs": [], + "name": "EventIsNotCreatedOrAlreadyStarted", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientAmount", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidArrayLength", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidEventRange", + "type": "error" + }, + { + "inputs": [], + "name": "NameNotReserved", + "type": "error" + }, + { + "inputs": [], + "name": "NoOneBidded", + "type": "error" + }, + { + "inputs": [], + "name": "NotYetEnded", + "type": "error" + }, + { + "inputs": [], + "name": "NullAssignment", + "type": "error" + }, + { + "inputs": [], + "name": "QueryIsNotInPeriod", + "type": "error" + }, + { + "inputs": [], + "name": "RatioIsTooLarge", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "auctionId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endedAt", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct EventRange", + "name": "range", + "type": "tuple" + } + ], + "name": "AuctionEventSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "BidGapRatioUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "auctionId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "bidder", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "previousBidder", + "type": "address" + } + ], + "name": "BidPlaced", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "auctionId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "startingPrices", + "type": "uint256[]" + } + ], + "name": "LabelsListed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "TreasuryUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_EXPIRY_DURATION", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_AUCTION_DOMAIN_EXPIRY", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_EXPIRY", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_PERCENTAGE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OPERATOR_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "bulkClaimBidNames", + "outputs": [ + { + "internalType": "uint256[]", + "name": "claimedAts", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string[]", + "name": "labels", + "type": "string[]" + } + ], + "name": "bulkRegister", + "outputs": [ + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "startedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endedAt", + "type": "uint256" + } + ], + "internalType": "struct EventRange", + "name": "range", + "type": "tuple" + } + ], + "name": "createAuctionEvent", + "outputs": [ + { + "internalType": "bytes32", + "name": "auctionId", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getAuction", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "auctionId", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "startingPrice", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "bidder", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedAt", + "type": "uint256" + } + ], + "internalType": "struct INSAuction.Bid", + "name": "bid", + "type": "tuple" + } + ], + "internalType": "struct INSAuction.DomainAuction", + "name": "auction", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "beatPrice", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "auctionId", + "type": "bytes32" + } + ], + "name": "getAuctionEvent", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "startedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endedAt", + "type": "uint256" + } + ], + "internalType": "struct EventRange", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBidGapRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRNSUnified", + "outputs": [ + { + "internalType": "contract INSUnified", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTreasury", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "contract INSUnified", + "name": "rnsUnified", + "type": "address" + }, + { + "internalType": "address payable", + "name": "treasury", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidGapRatio", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "auctionId", + "type": "bytes32" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "startingPrices", + "type": "uint256[]" + } + ], + "name": "listNamesForAuction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "placeBid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "reserved", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "auctionId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endedAt", + "type": "uint256" + } + ], + "internalType": "struct EventRange", + "name": "range", + "type": "tuple" + } + ], + "name": "setAuctionEvent", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "setBidGapRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "addr", + "type": "address" + } + ], + "name": "setTreasury", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "address": "0xc1A64532aB6e3EC0E01f2064A9075311B483Acb9", + "args": "0x", + "ast": { + "absolutePath": "src/RNSAuction.sol", + "id": 59648, + "exportedSymbols": { + "AccessControlEnumerable": [ + 48591 + ], + "BitMaps": [ + 53728 + ], + "EventRange": [ + 65968 + ], + "INSAuction": [ + 64411 + ], + "INSUnified": [ + 65048 + ], + "Initializable": [ + 49864 + ], + "LibEventRange": [ + 66039 + ], + "LibRNSDomain": [ + 66115 + ], + "LibSafeRange": [ + 66659 + ], + "Math": [ + 53173 + ], + "RNSAuction": [ + 59647 + ], + "RONTransferHelper": [ + 67517 + ] + }, + "nodeType": "SourceUnit", + "src": "32:9957:85", + "nodes": [ + { + "id": 58651, + "nodeType": "PragmaDirective", + "src": "32:24:85", + "nodes": [], + "literals": [ + "solidity", + "^", + "0.8", + ".19" + ] + }, + { + "id": 58653, + "nodeType": "ImportDirective", + "src": "58:86:85", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "nameLocation": "-1:-1:-1", + "scope": 59648, + "sourceUnit": 49865, + "symbolAliases": [ + { + "foreign": { + "id": 58652, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49864, + "src": "67:13:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 58655, + "nodeType": "ImportDirective", + "src": "145:101:85", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol", + "file": "@openzeppelin/contracts/access/AccessControlEnumerable.sol", + "nameLocation": "-1:-1:-1", + "scope": 59648, + "sourceUnit": 48592, + "symbolAliases": [ + { + "foreign": { + "id": 58654, + "name": "AccessControlEnumerable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48591, + "src": "154:23:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 58657, + "nodeType": "ImportDirective", + "src": "247:67:85", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/Math.sol", + "file": "@openzeppelin/contracts/utils/math/Math.sol", + "nameLocation": "-1:-1:-1", + "scope": 59648, + "sourceUnit": 53174, + "symbolAliases": [ + { + "foreign": { + "id": 58656, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53173, + "src": "256:4:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 58659, + "nodeType": "ImportDirective", + "src": "315:76:85", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol", + "file": "@openzeppelin/contracts/utils/structs/BitMaps.sol", + "nameLocation": "-1:-1:-1", + "scope": 59648, + "sourceUnit": 53729, + "symbolAliases": [ + { + "foreign": { + "id": 58658, + "name": "BitMaps", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53728, + "src": "324:7:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 58662, + "nodeType": "ImportDirective", + "src": "392:69:85", + "nodes": [], + "absolutePath": "src/interfaces/INSAuction.sol", + "file": "./interfaces/INSAuction.sol", + "nameLocation": "-1:-1:-1", + "scope": 59648, + "sourceUnit": 64412, + "symbolAliases": [ + { + "foreign": { + "id": 58660, + "name": "INSUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65048, + "src": "401:10:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 58661, + "name": "INSAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64411, + "src": "413:10:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 58664, + "nodeType": "ImportDirective", + "src": "462:65:85", + "nodes": [], + "absolutePath": "src/libraries/math/LibSafeRange.sol", + "file": "./libraries/math/LibSafeRange.sol", + "nameLocation": "-1:-1:-1", + "scope": 59648, + "sourceUnit": 66660, + "symbolAliases": [ + { + "foreign": { + "id": 58663, + "name": "LibSafeRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66659, + "src": "471:12:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 58666, + "nodeType": "ImportDirective", + "src": "528:60:85", + "nodes": [], + "absolutePath": "src/libraries/LibRNSDomain.sol", + "file": "./libraries/LibRNSDomain.sol", + "nameLocation": "-1:-1:-1", + "scope": 59648, + "sourceUnit": 66116, + "symbolAliases": [ + { + "foreign": { + "id": 58665, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66115, + "src": "537:12:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 58669, + "nodeType": "ImportDirective", + "src": "589:74:85", + "nodes": [], + "absolutePath": "src/libraries/LibEventRange.sol", + "file": "./libraries/LibEventRange.sol", + "nameLocation": "-1:-1:-1", + "scope": 59648, + "sourceUnit": 66040, + "symbolAliases": [ + { + "foreign": { + "id": 58667, + "name": "LibEventRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66039, + "src": "598:13:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 58668, + "name": "EventRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65968, + "src": "613:10:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 58671, + "nodeType": "ImportDirective", + "src": "664:80:85", + "nodes": [], + "absolutePath": "src/libraries/transfers/RONTransferHelper.sol", + "file": "./libraries/transfers/RONTransferHelper.sol", + "nameLocation": "-1:-1:-1", + "scope": 59648, + "sourceUnit": 67518, + "symbolAliases": [ + { + "foreign": { + "id": 58670, + "name": "RONTransferHelper", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67517, + "src": "673:17:85", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 59647, + "nodeType": "ContractDefinition", + "src": "746:9242:85", + "nodes": [ + { + "id": 58680, + "nodeType": "UsingForDirective", + "src": "824:31:85", + "nodes": [], + "global": false, + "libraryName": { + "id": 58678, + "name": "LibSafeRange", + "nameLocations": [ + "830:12:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66659, + "src": "830:12:85" + }, + "typeName": { + "id": 58679, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "847:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 58684, + "nodeType": "UsingForDirective", + "src": "858:33:85", + "nodes": [], + "global": false, + "libraryName": { + "id": 58681, + "name": "BitMaps", + "nameLocations": [ + "864:7:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 53728, + "src": "864:7:85" + }, + "typeName": { + "id": 58683, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58682, + "name": "BitMaps.BitMap", + "nameLocations": [ + "876:7:85", + "884:6:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 53598, + "src": "876:14:85" + }, + "referencedDeclaration": 53598, + "src": "876:14:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BitMap_$53598_storage_ptr", + "typeString": "struct BitMaps.BitMap" + } + } + }, + { + "id": 58688, + "nodeType": "UsingForDirective", + "src": "894:35:85", + "nodes": [], + "global": false, + "libraryName": { + "id": 58685, + "name": "LibEventRange", + "nameLocations": [ + "900:13:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66039, + "src": "900:13:85" + }, + "typeName": { + "id": 58687, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58686, + "name": "EventRange", + "nameLocations": [ + "918:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "918:10:85" + }, + "referencedDeclaration": 65968, + "src": "918:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + } + }, + { + "id": 58696, + "nodeType": "VariableDeclaration", + "src": "962:52:85", + "nodes": [], + "baseFunctions": [ + 64271 + ], + "constant": true, + "documentation": { + "id": 58689, + "nodeType": "StructuredDocumentation", + "src": "933:26:85", + "text": "@inheritdoc INSAuction" + }, + "functionSelector": "b9671690", + "mutability": "constant", + "name": "MAX_EXPIRY", + "nameLocation": "985:10:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 58690, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "962:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 58693, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1003:6:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 58692, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1003:6:85", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + } + ], + "id": 58691, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "998:4:85", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 58694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "998:12:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint64", + "typeString": "type(uint64)" + } + }, + "id": 58695, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1011:3:85", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "998:16:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "public" + }, + { + "id": 58700, + "nodeType": "VariableDeclaration", + "src": "1047:47:85", + "nodes": [], + "baseFunctions": [ + 64289 + ], + "constant": true, + "documentation": { + "id": 58697, + "nodeType": "StructuredDocumentation", + "src": "1018:26:85", + "text": "@inheritdoc INSAuction" + }, + "functionSelector": "4c255c97", + "mutability": "constant", + "name": "MAX_PERCENTAGE", + "nameLocation": "1071:14:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 58698, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1047:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "hexValue": "3130305f3030", + "id": 58699, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1088:6:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000_by_1", + "typeString": "int_const 10000" + }, + "value": "100_00" + }, + "visibility": "public" + }, + { + "id": 58704, + "nodeType": "VariableDeclaration", + "src": "1127:56:85", + "nodes": [], + "baseFunctions": [ + 64295 + ], + "constant": true, + "documentation": { + "id": 58701, + "nodeType": "StructuredDocumentation", + "src": "1098:26:85", + "text": "@inheritdoc INSAuction" + }, + "functionSelector": "19a3ee40", + "mutability": "constant", + "name": "DOMAIN_EXPIRY_DURATION", + "nameLocation": "1150:22:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 58702, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1127:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": { + "hexValue": "333635", + "id": 58703, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1175:8:85", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_31536000_by_1", + "typeString": "int_const 31536000" + }, + "value": "365" + }, + "visibility": "public" + }, + { + "id": 58710, + "nodeType": "VariableDeclaration", + "src": "1216:63:85", + "nodes": [], + "baseFunctions": [ + 64277 + ], + "constant": true, + "documentation": { + "id": 58705, + "nodeType": "StructuredDocumentation", + "src": "1187:26:85", + "text": "@inheritdoc INSAuction" + }, + "functionSelector": "0afe1bb3", + "mutability": "constant", + "name": "MAX_AUCTION_DOMAIN_EXPIRY", + "nameLocation": "1239:25:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 58706, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1216:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": { + "commonType": { + "typeIdentifier": "t_rational_94608000_by_1", + "typeString": "int_const 94608000" + }, + "id": 58709, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "leftExpression": { + "hexValue": "333635", + "id": 58707, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1267:8:85", + "subdenomination": "days", + "typeDescriptions": { + "typeIdentifier": "t_rational_31536000_by_1", + "typeString": "int_const 31536000" + }, + "value": "365" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "hexValue": "33", + "id": 58708, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1278:1:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "1267:12:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_94608000_by_1", + "typeString": "int_const 94608000" + } + }, + "visibility": "public" + }, + { + "id": 58716, + "nodeType": "VariableDeclaration", + "src": "1312:66:85", + "nodes": [], + "baseFunctions": [ + 64283 + ], + "constant": true, + "documentation": { + "id": 58711, + "nodeType": "StructuredDocumentation", + "src": "1283:26:85", + "text": "@inheritdoc INSAuction" + }, + "functionSelector": "f5b541a6", + "mutability": "constant", + "name": "OPERATOR_ROLE", + "nameLocation": "1336:13:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 58712, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1312:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "4f50455241544f525f524f4c45", + "id": 58714, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1362:15:85", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "typeString": "literal_string \"OPERATOR_ROLE\"" + }, + "value": "OPERATOR_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "typeString": "literal_string \"OPERATOR_ROLE\"" + } + ], + "id": 58713, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1352:9:85", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 58715, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1352:26:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 58721, + "nodeType": "VariableDeclaration", + "src": "1418:27:85", + "nodes": [], + "constant": false, + "documentation": { + "id": 58717, + "nodeType": "StructuredDocumentation", + "src": "1383:32:85", + "text": "@dev Gap for upgradeability." + }, + "mutability": "mutable", + "name": "____gap", + "nameLocation": "1438:7:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 58718, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1418:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 58720, + "length": { + "hexValue": "3530", + "id": 58719, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1426:2:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "1418:11:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + }, + { + "id": 58725, + "nodeType": "VariableDeclaration", + "src": "1485:31:85", + "nodes": [], + "constant": false, + "documentation": { + "id": 58722, + "nodeType": "StructuredDocumentation", + "src": "1449:33:85", + "text": "@dev The RNSUnified contract." + }, + "mutability": "mutable", + "name": "_rnsUnified", + "nameLocation": "1505:11:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + }, + "typeName": { + "id": 58724, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58723, + "name": "INSUnified", + "nameLocations": [ + "1485:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65048, + "src": "1485:10:85" + }, + "referencedDeclaration": 65048, + "src": "1485:10:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "visibility": "internal" + }, + { + "id": 58731, + "nodeType": "VariableDeclaration", + "src": "1570:63:85", + "nodes": [], + "constant": false, + "documentation": { + "id": 58726, + "nodeType": "StructuredDocumentation", + "src": "1520:47:85", + "text": "@dev Mapping from auction Id => event range" + }, + "mutability": "mutable", + "name": "_auctionRange", + "nameLocation": "1620:13:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_EventRange_$65968_storage_$", + "typeString": "mapping(bytes32 => struct EventRange)" + }, + "typeName": { + "id": 58730, + "keyName": "auctionId", + "keyNameLocation": "1586:9:85", + "keyType": { + "id": 58727, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1578:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "1570:40:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_EventRange_$65968_storage_$", + "typeString": "mapping(bytes32 => struct EventRange)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 58729, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58728, + "name": "EventRange", + "nameLocations": [ + "1599:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "1599:10:85" + }, + "referencedDeclaration": 65968, + "src": "1599:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + } + }, + "visibility": "internal" + }, + { + "id": 58737, + "nodeType": "VariableDeclaration", + "src": "1699:60:85", + "nodes": [], + "constant": false, + "documentation": { + "id": 58732, + "nodeType": "StructuredDocumentation", + "src": "1637:59:85", + "text": "@dev Mapping from id of domain names => auction detail." + }, + "mutability": "mutable", + "name": "_domainAuction", + "nameLocation": "1745:14:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_DomainAuction_$64221_storage_$", + "typeString": "mapping(uint256 => struct INSAuction.DomainAuction)" + }, + "typeName": { + "id": 58736, + "keyName": "id", + "keyNameLocation": "1715:2:85", + "keyType": { + "id": 58733, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1707:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "1699:36:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_DomainAuction_$64221_storage_$", + "typeString": "mapping(uint256 => struct INSAuction.DomainAuction)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 58735, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58734, + "name": "DomainAuction", + "nameLocations": [ + "1721:13:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64221, + "src": "1721:13:85" + }, + "referencedDeclaration": 64221, + "src": "1721:13:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction" + } + } + }, + "visibility": "internal" + }, + { + "id": 58740, + "nodeType": "VariableDeclaration", + "src": "1789:34:85", + "nodes": [], + "constant": false, + "documentation": { + "id": 58738, + "nodeType": "StructuredDocumentation", + "src": "1764:22:85", + "text": "@dev The treasury." + }, + "mutability": "mutable", + "name": "_treasury", + "nameLocation": "1814:9:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 58739, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1789:15:85", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "id": 58743, + "nodeType": "VariableDeclaration", + "src": "1892:29:85", + "nodes": [], + "constant": false, + "documentation": { + "id": 58741, + "nodeType": "StructuredDocumentation", + "src": "1827:62:85", + "text": "@dev The gap ratio between 2 bids with the starting price." + }, + "mutability": "mutable", + "name": "_bidGapRatio", + "nameLocation": "1909:12:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 58742, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1892:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "id": 58747, + "nodeType": "VariableDeclaration", + "src": "1976:33:85", + "nodes": [], + "constant": false, + "documentation": { + "id": 58744, + "nodeType": "StructuredDocumentation", + "src": "1925:48:85", + "text": "@dev Mapping from id => bool reserved status" + }, + "mutability": "mutable", + "name": "_reserved", + "nameLocation": "2000:9:85", + "scope": 59647, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BitMap_$53598_storage", + "typeString": "struct BitMaps.BitMap" + }, + "typeName": { + "id": 58746, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58745, + "name": "BitMaps.BitMap", + "nameLocations": [ + "1976:7:85", + "1984:6:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 53598, + "src": "1976:14:85" + }, + "referencedDeclaration": 53598, + "src": "1976:14:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BitMap_$53598_storage_ptr", + "typeString": "struct BitMaps.BitMap" + } + }, + "visibility": "internal" + }, + { + "id": 58757, + "nodeType": "ModifierDefinition", + "src": "2014:90:85", + "nodes": [], + "body": { + "id": 58756, + "nodeType": "Block", + "src": "2057:47:85", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 58752, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58749, + "src": "2082:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 58751, + "name": "_requireNotStarted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59646, + "src": "2063:18:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$__$", + "typeString": "function (bytes32) view" + } + }, + "id": 58753, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2063:29:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58754, + "nodeType": "ExpressionStatement", + "src": "2063:29:85" + }, + { + "id": 58755, + "nodeType": "PlaceholderStatement", + "src": "2098:1:85" + } + ] + }, + "name": "whenNotStarted", + "nameLocation": "2023:14:85", + "parameters": { + "id": 58750, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58749, + "mutability": "mutable", + "name": "auctionId", + "nameLocation": "2046:9:85", + "nodeType": "VariableDeclaration", + "scope": 58757, + "src": "2038:17:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 58748, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2038:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2037:19:85" + }, + "virtual": false, + "visibility": "internal" + }, + { + "id": 58768, + "nodeType": "ModifierDefinition", + "src": "2108:104:85", + "nodes": [], + "body": { + "id": 58767, + "nodeType": "Block", + "src": "2164:48:85", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 58763, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58760, + "src": "2194:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + ], + "id": 58762, + "name": "_requireValidEventRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59629, + "src": "2170:23:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_EventRange_$65968_calldata_ptr_$returns$__$", + "typeString": "function (struct EventRange calldata) view" + } + }, + "id": 58764, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2170:30:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58765, + "nodeType": "ExpressionStatement", + "src": "2170:30:85" + }, + { + "id": 58766, + "nodeType": "PlaceholderStatement", + "src": "2206:1:85" + } + ] + }, + "name": "onlyValidEventRange", + "nameLocation": "2117:19:85", + "parameters": { + "id": 58761, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58760, + "mutability": "mutable", + "name": "range", + "nameLocation": "2157:5:85", + "nodeType": "VariableDeclaration", + "scope": 58768, + "src": "2137:25:85", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange" + }, + "typeName": { + "id": 58759, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58758, + "name": "EventRange", + "nameLocations": [ + "2137:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "2137:10:85" + }, + "referencedDeclaration": 65968, + "src": "2137:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + }, + "visibility": "internal" + } + ], + "src": "2136:27:85" + }, + "virtual": false, + "visibility": "internal" + }, + { + "id": 58775, + "nodeType": "FunctionDefinition", + "src": "2216:55:85", + "nodes": [], + "body": { + "id": 58774, + "nodeType": "Block", + "src": "2238:33:85", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 58771, + "name": "_disableInitializers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49845, + "src": "2244:20:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 58772, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2244:22:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58773, + "nodeType": "ExpressionStatement", + "src": "2244:22:85" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 58769, + "nodeType": "ParameterList", + "parameters": [], + "src": "2227:2:85" + }, + "returnParameters": { + "id": 58770, + "nodeType": "ParameterList", + "parameters": [], + "src": "2238:0:85" + }, + "scope": 59647, + "stateMutability": "payable", + "virtual": false, + "visibility": "public" + }, + { + "id": 58838, + "nodeType": "FunctionDefinition", + "src": "2275:531:85", + "nodes": [], + "body": { + "id": 58837, + "nodeType": "Block", + "src": "2455:351:85", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 58793, + "name": "treasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58785, + "src": "2474:8:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 58792, + "name": "_setTreasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59540, + "src": "2461:12:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$", + "typeString": "function (address payable)" + } + }, + "id": 58794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2461:22:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58795, + "nodeType": "ExpressionStatement", + "src": "2461:22:85" + }, + { + "expression": { + "arguments": [ + { + "id": 58797, + "name": "bidGapRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58787, + "src": "2505:11:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 58796, + "name": "_setBidGapRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59562, + "src": "2489:15:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 58798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2489:28:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58799, + "nodeType": "ExpressionStatement", + "src": "2489:28:85" + }, + { + "expression": { + "arguments": [ + { + "id": 58801, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "2534:18:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 58802, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58777, + "src": "2554:5:85", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 58800, + "name": "_setupRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48374, + "src": "2523:10:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 58803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2523:37:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58804, + "nodeType": "ExpressionStatement", + "src": "2523:37:85" + }, + { + "assignments": [ + 58806 + ], + "declarations": [ + { + "constant": false, + "id": 58806, + "mutability": "mutable", + "name": "length", + "nameLocation": "2575:6:85", + "nodeType": "VariableDeclaration", + "scope": 58837, + "src": "2567:14:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 58805, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2567:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 58809, + "initialValue": { + "expression": { + "id": 58807, + "name": "operators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58780, + "src": "2584:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 58808, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2594:6:85", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2584:16:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2567:33:85" + }, + { + "assignments": [ + 58811 + ], + "declarations": [ + { + "constant": false, + "id": 58811, + "mutability": "mutable", + "name": "operatorRole", + "nameLocation": "2614:12:85", + "nodeType": "VariableDeclaration", + "scope": 58837, + "src": "2606:20:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 58810, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2606:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 58813, + "initialValue": { + "id": 58812, + "name": "OPERATOR_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58716, + "src": "2629:13:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2606:36:85" + }, + { + "body": { + "id": 58831, + "nodeType": "Block", + "src": "2678:93:85", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 58821, + "name": "operatorRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58811, + "src": "2697:12:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "baseExpression": { + "id": 58822, + "name": "operators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58780, + "src": "2711:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 58824, + "indexExpression": { + "id": 58823, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58815, + "src": "2721:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "2711:12:85", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 58820, + "name": "_setupRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48374, + "src": "2686:10:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 58825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2686:38:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58826, + "nodeType": "ExpressionStatement", + "src": "2686:38:85" + }, + { + "id": 58830, + "nodeType": "UncheckedBlock", + "src": "2733:32:85", + "statements": [ + { + "expression": { + "id": 58828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "2753:3:85", + "subExpression": { + "id": 58827, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58815, + "src": "2755:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 58829, + "nodeType": "ExpressionStatement", + "src": "2753:3:85" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 58819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 58817, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58815, + "src": "2665:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 58818, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58806, + "src": "2669:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2665:10:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 58832, + "initializationExpression": { + "assignments": [ + 58815 + ], + "declarations": [ + { + "constant": false, + "id": 58815, + "mutability": "mutable", + "name": "i", + "nameLocation": "2662:1:85", + "nodeType": "VariableDeclaration", + "scope": 58832, + "src": "2654:9:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 58814, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2654:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 58816, + "nodeType": "VariableDeclarationStatement", + "src": "2654:9:85" + }, + "nodeType": "ForStatement", + "src": "2649:122:85" + }, + { + "expression": { + "id": 58835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 58833, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58725, + "src": "2777:11:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 58834, + "name": "rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58783, + "src": "2791:10:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "src": "2777:24:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "id": 58836, + "nodeType": "ExpressionStatement", + "src": "2777:24:85" + } + ] + }, + "functionSelector": "ec14cf37", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 58790, + "kind": "modifierInvocation", + "modifierName": { + "id": 58789, + "name": "initializer", + "nameLocations": [ + "2443:11:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49766, + "src": "2443:11:85" + }, + "nodeType": "ModifierInvocation", + "src": "2443:11:85" + } + ], + "name": "initialize", + "nameLocation": "2284:10:85", + "parameters": { + "id": 58788, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58777, + "mutability": "mutable", + "name": "admin", + "nameLocation": "2308:5:85", + "nodeType": "VariableDeclaration", + "scope": 58838, + "src": "2300:13:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 58776, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2300:7:85", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 58780, + "mutability": "mutable", + "name": "operators", + "nameLocation": "2338:9:85", + "nodeType": "VariableDeclaration", + "scope": 58838, + "src": "2319:28:85", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 58778, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2319:7:85", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 58779, + "nodeType": "ArrayTypeName", + "src": "2319:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 58783, + "mutability": "mutable", + "name": "rnsUnified", + "nameLocation": "2364:10:85", + "nodeType": "VariableDeclaration", + "scope": 58838, + "src": "2353:21:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + }, + "typeName": { + "id": 58782, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58781, + "name": "INSUnified", + "nameLocations": [ + "2353:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65048, + "src": "2353:10:85" + }, + "referencedDeclaration": 65048, + "src": "2353:10:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 58785, + "mutability": "mutable", + "name": "treasury", + "nameLocation": "2396:8:85", + "nodeType": "VariableDeclaration", + "scope": 58838, + "src": "2380:24:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 58784, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2380:15:85", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 58787, + "mutability": "mutable", + "name": "bidGapRatio", + "nameLocation": "2418:11:85", + "nodeType": "VariableDeclaration", + "scope": 58838, + "src": "2410:19:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 58786, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2410:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2294:139:85" + }, + "returnParameters": { + "id": 58791, + "nodeType": "ParameterList", + "parameters": [], + "src": "2455:0:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 58928, + "nodeType": "FunctionDefinition", + "src": "2850:598:85", + "nodes": [], + "body": { + "id": 58927, + "nodeType": "Block", + "src": "2962:486:85", + "nodes": [], + "statements": [ + { + "assignments": [ + 58852 + ], + "declarations": [ + { + "constant": false, + "id": 58852, + "mutability": "mutable", + "name": "length", + "nameLocation": "2976:6:85", + "nodeType": "VariableDeclaration", + "scope": 58927, + "src": "2968:14:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 58851, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2968:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 58855, + "initialValue": { + "expression": { + "id": 58853, + "name": "labels", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58842, + "src": "2985:6:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string calldata[] calldata" + } + }, + "id": 58854, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2992:6:85", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2985:13:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2968:30:85" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 58858, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 58856, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58852, + "src": "3008:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 58857, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3018:1:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "3008:11:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 58862, + "nodeType": "IfStatement", + "src": "3004:44:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 58859, + "name": "InvalidArrayLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64200, + "src": "3028:18:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 58860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3028:20:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58861, + "nodeType": "RevertStatement", + "src": "3021:27:85" + } + }, + { + "expression": { + "id": 58869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 58863, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58849, + "src": "3054:3:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 58867, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58852, + "src": "3074:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 58866, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "3060:13:85", + "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": 58864, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3064:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 58865, + "nodeType": "ArrayTypeName", + "src": "3064:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 58868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3060:21:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "src": "3054:27:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 58870, + "nodeType": "ExpressionStatement", + "src": "3054:27:85" + }, + { + "assignments": [ + 58873 + ], + "declarations": [ + { + "constant": false, + "id": 58873, + "mutability": "mutable", + "name": "rnsUnified", + "nameLocation": "3098:10:85", + "nodeType": "VariableDeclaration", + "scope": 58927, + "src": "3087:21:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + }, + "typeName": { + "id": 58872, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58871, + "name": "INSUnified", + "nameLocations": [ + "3087:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65048, + "src": "3087:10:85" + }, + "referencedDeclaration": 65048, + "src": "3087:10:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "visibility": "internal" + } + ], + "id": 58875, + "initialValue": { + "id": 58874, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58725, + "src": "3111:11:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3087:35:85" + }, + { + "assignments": [ + 58877 + ], + "declarations": [ + { + "constant": false, + "id": 58877, + "mutability": "mutable", + "name": "parentId", + "nameLocation": "3136:8:85", + "nodeType": "VariableDeclaration", + "scope": 58927, + "src": "3128:16:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 58876, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3128:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 58880, + "initialValue": { + "expression": { + "id": 58878, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66115, + "src": "3147:12:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$66115_$", + "typeString": "type(library LibRNSDomain)" + } + }, + "id": 58879, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3160:6:85", + "memberName": "RON_ID", + "nodeType": "MemberAccess", + "referencedDeclaration": 66078, + "src": "3147:19:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3128:38:85" + }, + { + "assignments": [ + 58882 + ], + "declarations": [ + { + "constant": false, + "id": 58882, + "mutability": "mutable", + "name": "domainExpiryDuration", + "nameLocation": "3179:20:85", + "nodeType": "VariableDeclaration", + "scope": 58927, + "src": "3172:27:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 58881, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "3172:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 58884, + "initialValue": { + "id": 58883, + "name": "DOMAIN_EXPIRY_DURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58704, + "src": "3202:22:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3172:52:85" + }, + { + "body": { + "id": 58925, + "nodeType": "Block", + "src": "3260:184:85", + "statements": [ + { + "expression": { + "id": 58911, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + null, + { + "baseExpression": { + "id": 58891, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58849, + "src": "3271:3:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 58893, + "indexExpression": { + "id": 58892, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58886, + "src": "3275:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3271:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 58894, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "3268:10:85", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$_t_uint256_$", + "typeString": "tuple(,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 58897, + "name": "parentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58877, + "src": "3297:8:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 58898, + "name": "labels", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58842, + "src": "3307:6:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string calldata[] calldata" + } + }, + "id": 58900, + "indexExpression": { + "id": 58899, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58886, + "src": "3314:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3307:9:85", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + }, + { + "arguments": [ + { + "hexValue": "307830", + "id": 58903, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3326:3:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 58902, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3318:7:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 58901, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3318:7:85", + "typeDescriptions": {} + } + }, + "id": 58904, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3318:12:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 58907, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "3340:4:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RNSAuction_$59647", + "typeString": "contract RNSAuction" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RNSAuction_$59647", + "typeString": "contract RNSAuction" + } + ], + "id": 58906, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3332:7:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 58905, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3332:7:85", + "typeDescriptions": {} + } + }, + "id": 58908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3332:13:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 58909, + "name": "domainExpiryDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58882, + "src": "3347:20:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 58895, + "name": "rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58873, + "src": "3281:10:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "id": 58896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3292:4:85", + "memberName": "mint", + "nodeType": "MemberAccess", + "referencedDeclaration": 64968, + "src": "3281:15:85", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint64_$returns$_t_uint64_$_t_uint256_$", + "typeString": "function (uint256,string memory,address,address,uint64) external returns (uint64,uint256)" + } + }, + "id": 58910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3281:87:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint64_$_t_uint256_$", + "typeString": "tuple(uint64,uint256)" + } + }, + "src": "3268:100:85", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58912, + "nodeType": "ExpressionStatement", + "src": "3268:100:85" + }, + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 58916, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58849, + "src": "3390:3:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 58918, + "indexExpression": { + "id": 58917, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58886, + "src": "3394:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3390:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 58913, + "name": "_reserved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58747, + "src": "3376:9:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BitMap_$53598_storage", + "typeString": "struct BitMaps.BitMap storage ref" + } + }, + "id": 58915, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3386:3:85", + "memberName": "set", + "nodeType": "MemberAccess", + "referencedDeclaration": 53693, + "src": "3376:13:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_BitMap_$53598_storage_ptr_$_t_uint256_$returns$__$attached_to$_t_struct$_BitMap_$53598_storage_ptr_$", + "typeString": "function (struct BitMaps.BitMap storage pointer,uint256)" + } + }, + "id": 58919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3376:21:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58920, + "nodeType": "ExpressionStatement", + "src": "3376:21:85" + }, + { + "id": 58924, + "nodeType": "UncheckedBlock", + "src": "3406:32:85", + "statements": [ + { + "expression": { + "id": 58922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "3426:3:85", + "subExpression": { + "id": 58921, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58886, + "src": "3428:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 58923, + "nodeType": "ExpressionStatement", + "src": "3426:3:85" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 58890, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 58888, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58886, + "src": "3247:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 58889, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58852, + "src": "3251:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3247:10:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 58926, + "initializationExpression": { + "assignments": [ + 58886 + ], + "declarations": [ + { + "constant": false, + "id": 58886, + "mutability": "mutable", + "name": "i", + "nameLocation": "3244:1:85", + "nodeType": "VariableDeclaration", + "scope": 58926, + "src": "3236:9:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 58885, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3236:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 58887, + "nodeType": "VariableDeclarationStatement", + "src": "3236:9:85" + }, + "nodeType": "ForStatement", + "src": "3231:213:85" + } + ] + }, + "baseFunctions": [ + 64305 + ], + "documentation": { + "id": 58839, + "nodeType": "StructuredDocumentation", + "src": "2810:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "791a26b4", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 58845, + "name": "OPERATOR_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58716, + "src": "2916:13:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 58846, + "kind": "modifierInvocation", + "modifierName": { + "id": 58844, + "name": "onlyRole", + "nameLocations": [ + "2907:8:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "2907:8:85" + }, + "nodeType": "ModifierInvocation", + "src": "2907:23:85" + } + ], + "name": "bulkRegister", + "nameLocation": "2859:12:85", + "parameters": { + "id": 58843, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58842, + "mutability": "mutable", + "name": "labels", + "nameLocation": "2890:6:85", + "nodeType": "VariableDeclaration", + "scope": 58928, + "src": "2872:24:85", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", + "typeString": "string[]" + }, + "typeName": { + "baseType": { + "id": 58840, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2872:6:85", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "id": 58841, + "nodeType": "ArrayTypeName", + "src": "2872:8:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr", + "typeString": "string[]" + } + }, + "visibility": "internal" + } + ], + "src": "2871:26:85" + }, + "returnParameters": { + "id": 58850, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58849, + "mutability": "mutable", + "name": "ids", + "nameLocation": "2957:3:85", + "nodeType": "VariableDeclaration", + "scope": 58928, + "src": "2940:20:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 58847, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2940:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 58848, + "nodeType": "ArrayTypeName", + "src": "2940:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "2939:22:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 58942, + "nodeType": "FunctionDefinition", + "src": "3492:92:85", + "nodes": [], + "body": { + "id": 58941, + "nodeType": "Block", + "src": "3549:35:85", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 58938, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58931, + "src": "3576:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 58936, + "name": "_reserved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58747, + "src": "3562:9:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_BitMap_$53598_storage", + "typeString": "struct BitMaps.BitMap storage ref" + } + }, + "id": 58937, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3572:3:85", + "memberName": "get", + "nodeType": "MemberAccess", + "referencedDeclaration": 53634, + "src": "3562:13:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_BitMap_$53598_storage_ptr_$_t_uint256_$returns$_t_bool_$attached_to$_t_struct$_BitMap_$53598_storage_ptr_$", + "typeString": "function (struct BitMaps.BitMap storage pointer,uint256) view returns (bool)" + } + }, + "id": 58939, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3562:17:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 58935, + "id": 58940, + "nodeType": "Return", + "src": "3555:24:85" + } + ] + }, + "baseFunctions": [ + 64313 + ], + "documentation": { + "id": 58929, + "nodeType": "StructuredDocumentation", + "src": "3452:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "53f9195e", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "reserved", + "nameLocation": "3501:8:85", + "parameters": { + "id": 58932, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58931, + "mutability": "mutable", + "name": "id", + "nameLocation": "3518:2:85", + "nodeType": "VariableDeclaration", + "scope": 58942, + "src": "3510:10:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 58930, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3510:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3509:12:85" + }, + "returnParameters": { + "id": 58935, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58934, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 58942, + "src": "3543:4:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 58933, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3543:4:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "3542:6:85" + }, + "scope": 59647, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 58980, + "nodeType": "FunctionDefinition", + "src": "3628:313:85", + "nodes": [], + "body": { + "id": 58979, + "nodeType": "Block", + "src": "3794:147:85", + "nodes": [], + "statements": [ + { + "expression": { + "id": 58966, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 58957, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58955, + "src": "3800:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 58961, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51922, + "src": "3833:10:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 58962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3833:12:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 58963, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58946, + "src": "3847:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + ], + "expression": { + "id": 58959, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3822:3:85", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 58960, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3826:6:85", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "3822:10:85", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 58964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3822:31:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 58958, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "3812:9:85", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 58965, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3812:42:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "3800:54:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 58967, + "nodeType": "ExpressionStatement", + "src": "3800:54:85" + }, + { + "expression": { + "id": 58972, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 58968, + "name": "_auctionRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58731, + "src": "3860:13:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_EventRange_$65968_storage_$", + "typeString": "mapping(bytes32 => struct EventRange storage ref)" + } + }, + "id": 58970, + "indexExpression": { + "id": 58969, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58955, + "src": "3874:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3860:24:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage", + "typeString": "struct EventRange storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 58971, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58946, + "src": "3887:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + }, + "src": "3860:32:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage", + "typeString": "struct EventRange storage ref" + } + }, + "id": 58973, + "nodeType": "ExpressionStatement", + "src": "3860:32:85" + }, + { + "eventCall": { + "arguments": [ + { + "id": 58975, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58955, + "src": "3919:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 58976, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58946, + "src": "3930:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + ], + "id": 58974, + "name": "AuctionEventSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64229, + "src": "3903:15:85", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_struct$_EventRange_$65968_memory_ptr_$returns$__$", + "typeString": "function (bytes32,struct EventRange memory)" + } + }, + "id": 58977, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3903:33:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 58978, + "nodeType": "EmitStatement", + "src": "3898:38:85" + } + ] + }, + "baseFunctions": [ + 64322 + ], + "documentation": { + "id": 58943, + "nodeType": "StructuredDocumentation", + "src": "3588:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "db5e1ec6", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 58949, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "3709:18:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 58950, + "kind": "modifierInvocation", + "modifierName": { + "id": 58948, + "name": "onlyRole", + "nameLocations": [ + "3700:8:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "3700:8:85" + }, + "nodeType": "ModifierInvocation", + "src": "3700:28:85" + }, + { + "arguments": [ + { + "id": 58952, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58946, + "src": "3753:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + } + ], + "id": 58953, + "kind": "modifierInvocation", + "modifierName": { + "id": 58951, + "name": "onlyValidEventRange", + "nameLocations": [ + "3733:19:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 58768, + "src": "3733:19:85" + }, + "nodeType": "ModifierInvocation", + "src": "3733:26:85" + } + ], + "name": "createAuctionEvent", + "nameLocation": "3637:18:85", + "parameters": { + "id": 58947, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58946, + "mutability": "mutable", + "name": "range", + "nameLocation": "3676:5:85", + "nodeType": "VariableDeclaration", + "scope": 58980, + "src": "3656:25:85", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange" + }, + "typeName": { + "id": 58945, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58944, + "name": "EventRange", + "nameLocations": [ + "3656:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "3656:10:85" + }, + "referencedDeclaration": 65968, + "src": "3656:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + }, + "visibility": "internal" + } + ], + "src": "3655:27:85" + }, + "returnParameters": { + "id": 58956, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58955, + "mutability": "mutable", + "name": "auctionId", + "nameLocation": "3781:9:85", + "nodeType": "VariableDeclaration", + "scope": 58980, + "src": "3773:17:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 58954, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3773:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3772:19:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 59010, + "nodeType": "FunctionDefinition", + "src": "3985:267:85", + "nodes": [], + "body": { + "id": 59009, + "nodeType": "Block", + "src": "4165:87:85", + "nodes": [], + "statements": [ + { + "expression": { + "id": 59002, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 58998, + "name": "_auctionRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58731, + "src": "4171:13:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_EventRange_$65968_storage_$", + "typeString": "mapping(bytes32 => struct EventRange storage ref)" + } + }, + "id": 59000, + "indexExpression": { + "id": 58999, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58983, + "src": "4185:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "4171:24:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage", + "typeString": "struct EventRange storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 59001, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58986, + "src": "4198:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + }, + "src": "4171:32:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage", + "typeString": "struct EventRange storage ref" + } + }, + "id": 59003, + "nodeType": "ExpressionStatement", + "src": "4171:32:85" + }, + { + "eventCall": { + "arguments": [ + { + "id": 59005, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58983, + "src": "4230:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 59006, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58986, + "src": "4241:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + ], + "id": 59004, + "name": "AuctionEventSet", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64229, + "src": "4214:15:85", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_struct$_EventRange_$65968_memory_ptr_$returns$__$", + "typeString": "function (bytes32,struct EventRange memory)" + } + }, + "id": 59007, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4214:33:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59008, + "nodeType": "EmitStatement", + "src": "4209:38:85" + } + ] + }, + "baseFunctions": [ + 64331 + ], + "documentation": { + "id": 58981, + "nodeType": "StructuredDocumentation", + "src": "3945:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "81bec1b3", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 58989, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "4082:18:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 58990, + "kind": "modifierInvocation", + "modifierName": { + "id": 58988, + "name": "onlyRole", + "nameLocations": [ + "4073:8:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "4073:8:85" + }, + "nodeType": "ModifierInvocation", + "src": "4073:28:85" + }, + { + "arguments": [ + { + "id": 58992, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58986, + "src": "4126:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + } + ], + "id": 58993, + "kind": "modifierInvocation", + "modifierName": { + "id": 58991, + "name": "onlyValidEventRange", + "nameLocations": [ + "4106:19:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 58768, + "src": "4106:19:85" + }, + "nodeType": "ModifierInvocation", + "src": "4106:26:85" + }, + { + "arguments": [ + { + "id": 58995, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58983, + "src": "4152:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 58996, + "kind": "modifierInvocation", + "modifierName": { + "id": 58994, + "name": "whenNotStarted", + "nameLocations": [ + "4137:14:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 58757, + "src": "4137:14:85" + }, + "nodeType": "ModifierInvocation", + "src": "4137:25:85" + } + ], + "name": "setAuctionEvent", + "nameLocation": "3994:15:85", + "parameters": { + "id": 58987, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 58983, + "mutability": "mutable", + "name": "auctionId", + "nameLocation": "4018:9:85", + "nodeType": "VariableDeclaration", + "scope": 59010, + "src": "4010:17:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 58982, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4010:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 58986, + "mutability": "mutable", + "name": "range", + "nameLocation": "4049:5:85", + "nodeType": "VariableDeclaration", + "scope": 59010, + "src": "4029:25:85", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange" + }, + "typeName": { + "id": 58985, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 58984, + "name": "EventRange", + "nameLocations": [ + "4029:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "4029:10:85" + }, + "referencedDeclaration": 65968, + "src": "4029:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + }, + "visibility": "internal" + } + ], + "src": "4009:46:85" + }, + "returnParameters": { + "id": 58997, + "nodeType": "ParameterList", + "parameters": [], + "src": "4165:0:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 59024, + "nodeType": "FunctionDefinition", + "src": "4296:126:85", + "nodes": [], + "body": { + "id": 59023, + "nodeType": "Block", + "src": "4380:42:85", + "nodes": [], + "statements": [ + { + "expression": { + "baseExpression": { + "id": 59019, + "name": "_auctionRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58731, + "src": "4393:13:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_EventRange_$65968_storage_$", + "typeString": "mapping(bytes32 => struct EventRange storage ref)" + } + }, + "id": 59021, + "indexExpression": { + "id": 59020, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59013, + "src": "4407:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4393:24:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage", + "typeString": "struct EventRange storage ref" + } + }, + "functionReturnParameters": 59018, + "id": 59022, + "nodeType": "Return", + "src": "4386:31:85" + } + ] + }, + "baseFunctions": [ + 64340 + ], + "documentation": { + "id": 59011, + "nodeType": "StructuredDocumentation", + "src": "4256:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "15a29162", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAuctionEvent", + "nameLocation": "4305:15:85", + "parameters": { + "id": 59014, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59013, + "mutability": "mutable", + "name": "auctionId", + "nameLocation": "4329:9:85", + "nodeType": "VariableDeclaration", + "scope": 59024, + "src": "4321:17:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 59012, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4321:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "4320:19:85" + }, + "returnParameters": { + "id": 59018, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59017, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 59024, + "src": "4361:17:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange" + }, + "typeName": { + "id": 59016, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59015, + "name": "EventRange", + "nameLocations": [ + "4361:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "4361:10:85" + }, + "referencedDeclaration": 65968, + "src": "4361:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + }, + "visibility": "internal" + } + ], + "src": "4360:19:85" + }, + "scope": 59647, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 59147, + "nodeType": "FunctionDefinition", + "src": "4466:884:85", + "nodes": [], + "body": { + "id": 59146, + "nodeType": "Block", + "src": "4646:704:85", + "nodes": [], + "statements": [ + { + "assignments": [ + 59043 + ], + "declarations": [ + { + "constant": false, + "id": 59043, + "mutability": "mutable", + "name": "length", + "nameLocation": "4660:6:85", + "nodeType": "VariableDeclaration", + "scope": 59146, + "src": "4652:14:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59042, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4652:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 59046, + "initialValue": { + "expression": { + "id": 59044, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59030, + "src": "4669:3:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 59045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4673:6:85", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4669:10:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4652:27:85" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 59054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59047, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59043, + "src": "4689:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 59048, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4699:1:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4689:11:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59053, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59050, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59043, + "src": "4704:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "expression": { + "id": 59051, + "name": "startingPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59033, + "src": "4714:14:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 59052, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4729:6:85", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4714:21:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4704:31:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "4689:46:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59058, + "nodeType": "IfStatement", + "src": "4685:79:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59055, + "name": "InvalidArrayLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64200, + "src": "4744:18:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59056, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4744:20:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59057, + "nodeType": "RevertStatement", + "src": "4737:27:85" + } + }, + { + "assignments": [ + 59060 + ], + "declarations": [ + { + "constant": false, + "id": 59060, + "mutability": "mutable", + "name": "id", + "nameLocation": "4778:2:85", + "nodeType": "VariableDeclaration", + "scope": 59146, + "src": "4770:10:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59059, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4770:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 59061, + "nodeType": "VariableDeclarationStatement", + "src": "4770:10:85" + }, + { + "assignments": [ + 59063 + ], + "declarations": [ + { + "constant": false, + "id": 59063, + "mutability": "mutable", + "name": "mAuctionId", + "nameLocation": "4794:10:85", + "nodeType": "VariableDeclaration", + "scope": 59146, + "src": "4786:18:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 59062, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4786:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 59064, + "nodeType": "VariableDeclarationStatement", + "src": "4786:18:85" + }, + { + "assignments": [ + 59067 + ], + "declarations": [ + { + "constant": false, + "id": 59067, + "mutability": "mutable", + "name": "sAuction", + "nameLocation": "4832:8:85", + "nodeType": "VariableDeclaration", + "scope": 59146, + "src": "4810:30:85", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction" + }, + "typeName": { + "id": 59066, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59065, + "name": "DomainAuction", + "nameLocations": [ + "4810:13:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64221, + "src": "4810:13:85" + }, + "referencedDeclaration": 64221, + "src": "4810:13:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction" + } + }, + "visibility": "internal" + } + ], + "id": 59068, + "nodeType": "VariableDeclarationStatement", + "src": "4810:30:85" + }, + { + "body": { + "id": 59138, + "nodeType": "Block", + "src": "4876:414:85", + "statements": [ + { + "expression": { + "id": 59079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59075, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59060, + "src": "4884:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 59076, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59030, + "src": "4889:3:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 59078, + "indexExpression": { + "id": 59077, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59070, + "src": "4893:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4889:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4884:11:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59080, + "nodeType": "ExpressionStatement", + "src": "4884:11:85" + }, + { + "condition": { + "id": 59084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4907:13:85", + "subExpression": { + "arguments": [ + { + "id": 59082, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59060, + "src": "4917:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 59081, + "name": "reserved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58942, + "src": "4908:8:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 59083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4908:12:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59088, + "nodeType": "IfStatement", + "src": "4903:43:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59085, + "name": "NameNotReserved", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64192, + "src": "4929:15:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4929:17:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59087, + "nodeType": "RevertStatement", + "src": "4922:24:85" + } + }, + { + "expression": { + "id": 59093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59089, + "name": "sAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59067, + "src": "4955:8:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction storage pointer" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 59090, + "name": "_domainAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58737, + "src": "4966:14:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_DomainAuction_$64221_storage_$", + "typeString": "mapping(uint256 => struct INSAuction.DomainAuction storage ref)" + } + }, + "id": 59092, + "indexExpression": { + "id": 59091, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59060, + "src": "4981:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4966:18:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage", + "typeString": "struct INSAuction.DomainAuction storage ref" + } + }, + "src": "4955:29:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction storage pointer" + } + }, + "id": 59094, + "nodeType": "ExpressionStatement", + "src": "4955:29:85" + }, + { + "expression": { + "id": 59098, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59095, + "name": "mAuctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59063, + "src": "4992:10:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 59096, + "name": "sAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59067, + "src": "5005:8:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction storage pointer" + } + }, + "id": 59097, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5014:9:85", + "memberName": "auctionId", + "nodeType": "MemberAccess", + "referencedDeclaration": 64215, + "src": "5005:18:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "4992:31:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 59099, + "nodeType": "ExpressionStatement", + "src": "4992:31:85" + }, + { + "condition": { + "id": 59114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "5035:76:85", + "subExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 59112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 59106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 59102, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59100, + "name": "mAuctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59063, + "src": "5037:10:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 59101, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5051:1:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5037:15:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 59105, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59103, + "name": "mAuctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59063, + "src": "5056:10:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 59104, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59027, + "src": "5070:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "5056:23:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5037:42:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59111, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 59107, + "name": "sAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59067, + "src": "5083:8:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction storage pointer" + } + }, + "id": 59108, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5092:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "5083:12:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_storage", + "typeString": "struct INSAuction.Bid storage ref" + } + }, + "id": 59109, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5096:9:85", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 64210, + "src": "5083:22:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 59110, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5109:1:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5083:27:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5037:73:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 59113, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5036:75:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59119, + "nodeType": "IfStatement", + "src": "5031:124:85", + "trueBody": { + "id": 59118, + "nodeType": "Block", + "src": "5113:42:85", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59115, + "name": "AlreadyBidding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64188, + "src": "5130:14:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59116, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5130:16:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59117, + "nodeType": "RevertStatement", + "src": "5123:23:85" + } + ] + } + }, + { + "expression": { + "id": 59124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 59120, + "name": "sAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59067, + "src": "5163:8:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction storage pointer" + } + }, + "id": 59122, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "5172:9:85", + "memberName": "auctionId", + "nodeType": "MemberAccess", + "referencedDeclaration": 64215, + "src": "5163:18:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 59123, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59027, + "src": "5184:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "5163:30:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 59125, + "nodeType": "ExpressionStatement", + "src": "5163:30:85" + }, + { + "expression": { + "id": 59132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 59126, + "name": "sAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59067, + "src": "5201:8:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction storage pointer" + } + }, + "id": 59128, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "5210:13:85", + "memberName": "startingPrice", + "nodeType": "MemberAccess", + "referencedDeclaration": 64217, + "src": "5201:22:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 59129, + "name": "startingPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59033, + "src": "5226:14:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 59131, + "indexExpression": { + "id": 59130, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59070, + "src": "5241:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5226:17:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5201:42:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59133, + "nodeType": "ExpressionStatement", + "src": "5201:42:85" + }, + { + "id": 59137, + "nodeType": "UncheckedBlock", + "src": "5252:32:85", + "statements": [ + { + "expression": { + "id": 59135, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "5272:3:85", + "subExpression": { + "id": 59134, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59070, + "src": "5274:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59136, + "nodeType": "ExpressionStatement", + "src": "5272:3:85" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59074, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59072, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59070, + "src": "4863:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 59073, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59043, + "src": "4867:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4863:10:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59139, + "initializationExpression": { + "assignments": [ + 59070 + ], + "declarations": [ + { + "constant": false, + "id": 59070, + "mutability": "mutable", + "name": "i", + "nameLocation": "4860:1:85", + "nodeType": "VariableDeclaration", + "scope": 59139, + "src": "4852:9:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59069, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4852:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 59071, + "nodeType": "VariableDeclarationStatement", + "src": "4852:9:85" + }, + "nodeType": "ForStatement", + "src": "4847:443:85" + }, + { + "eventCall": { + "arguments": [ + { + "id": 59141, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59027, + "src": "5314:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 59142, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59030, + "src": "5325:3:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + { + "id": 59143, + "name": "startingPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59033, + "src": "5330:14:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + ], + "id": 59140, + "name": "LabelsListed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64240, + "src": "5301:12:85", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$", + "typeString": "function (bytes32,uint256[] memory,uint256[] memory)" + } + }, + "id": 59144, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5301:44:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59145, + "nodeType": "EmitStatement", + "src": "5296:49:85" + } + ] + }, + "baseFunctions": [ + 64352 + ], + "documentation": { + "id": 59025, + "nodeType": "StructuredDocumentation", + "src": "4426:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "777b0a18", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 59036, + "name": "OPERATOR_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58716, + "src": "4599:13:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 59037, + "kind": "modifierInvocation", + "modifierName": { + "id": 59035, + "name": "onlyRole", + "nameLocations": [ + "4590:8:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "4590:8:85" + }, + "nodeType": "ModifierInvocation", + "src": "4590:23:85" + }, + { + "arguments": [ + { + "id": 59039, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59027, + "src": "4633:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 59040, + "kind": "modifierInvocation", + "modifierName": { + "id": 59038, + "name": "whenNotStarted", + "nameLocations": [ + "4618:14:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 58757, + "src": "4618:14:85" + }, + "nodeType": "ModifierInvocation", + "src": "4618:25:85" + } + ], + "name": "listNamesForAuction", + "nameLocation": "4475:19:85", + "parameters": { + "id": 59034, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59027, + "mutability": "mutable", + "name": "auctionId", + "nameLocation": "4503:9:85", + "nodeType": "VariableDeclaration", + "scope": 59147, + "src": "4495:17:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 59026, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "4495:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 59030, + "mutability": "mutable", + "name": "ids", + "nameLocation": "4533:3:85", + "nodeType": "VariableDeclaration", + "scope": 59147, + "src": "4514:22:85", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 59028, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4514:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59029, + "nodeType": "ArrayTypeName", + "src": "4514:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 59033, + "mutability": "mutable", + "name": "startingPrices", + "nameLocation": "4557:14:85", + "nodeType": "VariableDeclaration", + "scope": 59147, + "src": "4538:33:85", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 59031, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4538:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59032, + "nodeType": "ArrayTypeName", + "src": "4538:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "4494:78:85" + }, + "returnParameters": { + "id": 59041, + "nodeType": "ParameterList", + "parameters": [], + "src": "4646:0:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 59270, + "nodeType": "FunctionDefinition", + "src": "5394:938:85", + "nodes": [], + "body": { + "id": 59269, + "nodeType": "Block", + "src": "5441:891:85", + "nodes": [], + "statements": [ + { + "assignments": [ + 59155 + ], + "declarations": [ + { + "constant": false, + "id": 59155, + "mutability": "mutable", + "name": "auction", + "nameLocation": "5468:7:85", + "nodeType": "VariableDeclaration", + "scope": 59269, + "src": "5447:28:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction" + }, + "typeName": { + "id": 59154, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59153, + "name": "DomainAuction", + "nameLocations": [ + "5447:13:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64221, + "src": "5447:13:85" + }, + "referencedDeclaration": 64221, + "src": "5447:13:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction" + } + }, + "visibility": "internal" + } + ], + "id": 59159, + "initialValue": { + "baseExpression": { + "id": 59156, + "name": "_domainAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58737, + "src": "5478:14:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_DomainAuction_$64221_storage_$", + "typeString": "mapping(uint256 => struct INSAuction.DomainAuction storage ref)" + } + }, + "id": 59158, + "indexExpression": { + "id": 59157, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59150, + "src": "5493:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5478:18:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage", + "typeString": "struct INSAuction.DomainAuction storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5447:49:85" + }, + { + "assignments": [ + 59162 + ], + "declarations": [ + { + "constant": false, + "id": 59162, + "mutability": "mutable", + "name": "range", + "nameLocation": "5520:5:85", + "nodeType": "VariableDeclaration", + "scope": 59269, + "src": "5502:23:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange" + }, + "typeName": { + "id": 59161, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59160, + "name": "EventRange", + "nameLocations": [ + "5502:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "5502:10:85" + }, + "referencedDeclaration": 65968, + "src": "5502:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + }, + "visibility": "internal" + } + ], + "id": 59167, + "initialValue": { + "baseExpression": { + "id": 59163, + "name": "_auctionRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58731, + "src": "5528:13:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_EventRange_$65968_storage_$", + "typeString": "mapping(bytes32 => struct EventRange storage ref)" + } + }, + "id": 59166, + "indexExpression": { + "expression": { + "id": 59164, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59155, + "src": "5542:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59165, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5550:9:85", + "memberName": "auctionId", + "nodeType": "MemberAccess", + "referencedDeclaration": 64215, + "src": "5542:17:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5528:32:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage", + "typeString": "struct EventRange storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5502:58:85" + }, + { + "assignments": [ + 59169 + ], + "declarations": [ + { + "constant": false, + "id": 59169, + "mutability": "mutable", + "name": "beatPrice", + "nameLocation": "5574:9:85", + "nodeType": "VariableDeclaration", + "scope": 59269, + "src": "5566:17:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59168, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5566:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 59174, + "initialValue": { + "arguments": [ + { + "id": 59171, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59155, + "src": "5600:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + { + "id": 59172, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59162, + "src": "5609:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + }, + { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + ], + "id": 59170, + "name": "_getBeatPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59608, + "src": "5586:13:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_DomainAuction_$64221_memory_ptr_$_t_struct$_EventRange_$65968_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct INSAuction.DomainAuction memory,struct EventRange memory) view returns (uint256)" + } + }, + "id": 59173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5586:29:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5566:49:85" + }, + { + "condition": { + "id": 59178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "5626:19:85", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 59175, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59162, + "src": "5627:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + }, + "id": 59176, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5633:10:85", + "memberName": "isInPeriod", + "nodeType": "MemberAccess", + "referencedDeclaration": 66038, + "src": "5627:16:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_EventRange_$65968_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_EventRange_$65968_memory_ptr_$", + "typeString": "function (struct EventRange memory) view returns (bool)" + } + }, + "id": 59177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5627:18:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59182, + "nodeType": "IfStatement", + "src": "5622:52:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59179, + "name": "QueryIsNotInPeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64196, + "src": "5654:18:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5654:20:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59181, + "nodeType": "RevertStatement", + "src": "5647:27:85" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 59183, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5684:3:85", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 59184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5688:5:85", + "memberName": "value", + "nodeType": "MemberAccess", + "src": "5684:9:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 59185, + "name": "beatPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59169, + "src": "5696:9:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5684:21:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59190, + "nodeType": "IfStatement", + "src": "5680:54:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59187, + "name": "InsufficientAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64198, + "src": "5714:18:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5714:20:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59189, + "nodeType": "RevertStatement", + "src": "5707:27:85" + } + }, + { + "assignments": [ + 59192 + ], + "declarations": [ + { + "constant": false, + "id": 59192, + "mutability": "mutable", + "name": "bidder", + "nameLocation": "5756:6:85", + "nodeType": "VariableDeclaration", + "scope": 59269, + "src": "5740:22:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 59191, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5740:15:85", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "id": 59198, + "initialValue": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59195, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51922, + "src": "5773:10:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 59196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5773:12:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 59194, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5765:8:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 59193, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5765:8:85", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 59197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5765:21:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5740:46:85" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 59202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59199, + "name": "bidder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59192, + "src": "5844:6:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "expression": { + "id": 59200, + "name": "tx", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -26, + "src": "5854:2:85", + "typeDescriptions": { + "typeIdentifier": "t_magic_transaction", + "typeString": "tx" + } + }, + "id": 59201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5857:6:85", + "memberName": "origin", + "nodeType": "MemberAccess", + "src": "5854:9:85", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5844:19:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59206, + "nodeType": "IfStatement", + "src": "5840:59:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59203, + "name": "ContractBidderIsForbidden", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64202, + "src": "5872:25:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59204, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5872:27:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59205, + "nodeType": "RevertStatement", + "src": "5865:34:85" + } + }, + { + "assignments": [ + 59208 + ], + "declarations": [ + { + "constant": false, + "id": 59208, + "mutability": "mutable", + "name": "prvBidder", + "nameLocation": "5921:9:85", + "nodeType": "VariableDeclaration", + "scope": 59269, + "src": "5905:25:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 59207, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5905:15:85", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "id": 59212, + "initialValue": { + "expression": { + "expression": { + "id": 59209, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59155, + "src": "5933:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59210, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5941:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "5933:11:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_memory_ptr", + "typeString": "struct INSAuction.Bid memory" + } + }, + "id": 59211, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5945:6:85", + "memberName": "bidder", + "nodeType": "MemberAccess", + "referencedDeclaration": 64206, + "src": "5933:18:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5905:46:85" + }, + { + "assignments": [ + 59214 + ], + "declarations": [ + { + "constant": false, + "id": 59214, + "mutability": "mutable", + "name": "prvPrice", + "nameLocation": "5965:8:85", + "nodeType": "VariableDeclaration", + "scope": 59269, + "src": "5957:16:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59213, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5957:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 59218, + "initialValue": { + "expression": { + "expression": { + "id": 59215, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59155, + "src": "5976:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59216, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5984:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "5976:11:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_memory_ptr", + "typeString": "struct INSAuction.Bid memory" + } + }, + "id": 59217, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5988:5:85", + "memberName": "price", + "nodeType": "MemberAccess", + "referencedDeclaration": 64208, + "src": "5976:17:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5957:36:85" + }, + { + "assignments": [ + 59221 + ], + "declarations": [ + { + "constant": false, + "id": 59221, + "mutability": "mutable", + "name": "sBid", + "nameLocation": "6012:4:85", + "nodeType": "VariableDeclaration", + "scope": 59269, + "src": "6000:16:85", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_storage_ptr", + "typeString": "struct INSAuction.Bid" + }, + "typeName": { + "id": 59220, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59219, + "name": "Bid", + "nameLocations": [ + "6000:3:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64213, + "src": "6000:3:85" + }, + "referencedDeclaration": 64213, + "src": "6000:3:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_storage_ptr", + "typeString": "struct INSAuction.Bid" + } + }, + "visibility": "internal" + } + ], + "id": 59226, + "initialValue": { + "expression": { + "baseExpression": { + "id": 59222, + "name": "_domainAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58737, + "src": "6019:14:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_DomainAuction_$64221_storage_$", + "typeString": "mapping(uint256 => struct INSAuction.DomainAuction storage ref)" + } + }, + "id": 59224, + "indexExpression": { + "id": 59223, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59150, + "src": "6034:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6019:18:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage", + "typeString": "struct INSAuction.DomainAuction storage ref" + } + }, + "id": 59225, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6038:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "6019:22:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_storage", + "typeString": "struct INSAuction.Bid storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6000:41:85" + }, + { + "expression": { + "id": 59232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 59227, + "name": "sBid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59221, + "src": "6047:4:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_storage_ptr", + "typeString": "struct INSAuction.Bid storage pointer" + } + }, + "id": 59229, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6052:5:85", + "memberName": "price", + "nodeType": "MemberAccess", + "referencedDeclaration": 64208, + "src": "6047:10:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 59230, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "6060:3:85", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 59231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6064:5:85", + "memberName": "value", + "nodeType": "MemberAccess", + "src": "6060:9:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6047:22:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59233, + "nodeType": "ExpressionStatement", + "src": "6047:22:85" + }, + { + "expression": { + "id": 59238, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 59234, + "name": "sBid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59221, + "src": "6075:4:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_storage_ptr", + "typeString": "struct INSAuction.Bid storage pointer" + } + }, + "id": 59236, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6080:6:85", + "memberName": "bidder", + "nodeType": "MemberAccess", + "referencedDeclaration": 64206, + "src": "6075:11:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 59237, + "name": "bidder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59192, + "src": "6089:6:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "6075:20:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 59239, + "nodeType": "ExpressionStatement", + "src": "6075:20:85" + }, + { + "expression": { + "id": 59245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 59240, + "name": "sBid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59221, + "src": "6101:4:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_storage_ptr", + "typeString": "struct INSAuction.Bid storage pointer" + } + }, + "id": 59242, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6106:9:85", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 64210, + "src": "6101:14:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 59243, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "6118:5:85", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 59244, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6124:9:85", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "6118:15:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6101:32:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59246, + "nodeType": "ExpressionStatement", + "src": "6101:32:85" + }, + { + "eventCall": { + "arguments": [ + { + "expression": { + "id": 59248, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59155, + "src": "6154:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59249, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6162:9:85", + "memberName": "auctionId", + "nodeType": "MemberAccess", + "referencedDeclaration": 64215, + "src": "6154:17:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 59250, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59150, + "src": "6173:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 59251, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "6177:3:85", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 59252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6181:5:85", + "memberName": "value", + "nodeType": "MemberAccess", + "src": "6177:9:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 59253, + "name": "bidder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59192, + "src": "6188:6:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 59254, + "name": "prvPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59214, + "src": "6196:8:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 59255, + "name": "prvBidder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59208, + "src": "6206:9:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 59247, + "name": "BidPlaced", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64255, + "src": "6144:9:85", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint256_$_t_address_payable_$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (bytes32,uint256,uint256,address payable,uint256,address)" + } + }, + "id": 59256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6144:72:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59257, + "nodeType": "EmitStatement", + "src": "6139:77:85" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59258, + "name": "prvPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59214, + "src": "6261:8:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 59259, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6273:1:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6261:13:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59268, + "nodeType": "IfStatement", + "src": "6257:70:85", + "trueBody": { + "expression": { + "arguments": [ + { + "id": 59264, + "name": "prvBidder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59208, + "src": "6307:9:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 59265, + "name": "prvPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59214, + "src": "6318:8:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 59261, + "name": "RONTransferHelper", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67517, + "src": "6276:17:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_RONTransferHelper_$67517_$", + "typeString": "type(library RONTransferHelper)" + } + }, + "id": 59263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6294:12:85", + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 67492, + "src": "6276:30:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$", + "typeString": "function (address payable,uint256)" + } + }, + "id": 59266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6276:51:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59267, + "nodeType": "ExpressionStatement", + "src": "6276:51:85" + } + } + ] + }, + "baseFunctions": [ + 64358 + ], + "documentation": { + "id": 59148, + "nodeType": "StructuredDocumentation", + "src": "5354:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "9979ef45", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "placeBid", + "nameLocation": "5403:8:85", + "parameters": { + "id": 59151, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59150, + "mutability": "mutable", + "name": "id", + "nameLocation": "5420:2:85", + "nodeType": "VariableDeclaration", + "scope": 59270, + "src": "5412:10:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59149, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5412:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5411:12:85" + }, + "returnParameters": { + "id": 59152, + "nodeType": "ParameterList", + "parameters": [], + "src": "5441:0:85" + }, + "scope": 59647, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "id": 59426, + "nodeType": "FunctionDefinition", + "src": "6376:1072:85", + "nodes": [], + "body": { + "id": 59425, + "nodeType": "Block", + "src": "6474:974:85", + "nodes": [], + "statements": [ + { + "assignments": [ + 59281 + ], + "declarations": [ + { + "constant": false, + "id": 59281, + "mutability": "mutable", + "name": "id", + "nameLocation": "6488:2:85", + "nodeType": "VariableDeclaration", + "scope": 59425, + "src": "6480:10:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59280, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6480:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 59282, + "nodeType": "VariableDeclarationStatement", + "src": "6480:10:85" + }, + { + "assignments": [ + 59284 + ], + "declarations": [ + { + "constant": false, + "id": 59284, + "mutability": "mutable", + "name": "accumulatedRON", + "nameLocation": "6504:14:85", + "nodeType": "VariableDeclaration", + "scope": 59425, + "src": "6496:22:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59283, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6496:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 59285, + "nodeType": "VariableDeclarationStatement", + "src": "6496:22:85" + }, + { + "assignments": [ + 59288 + ], + "declarations": [ + { + "constant": false, + "id": 59288, + "mutability": "mutable", + "name": "range", + "nameLocation": "6542:5:85", + "nodeType": "VariableDeclaration", + "scope": 59425, + "src": "6524:23:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange" + }, + "typeName": { + "id": 59287, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59286, + "name": "EventRange", + "nameLocations": [ + "6524:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "6524:10:85" + }, + "referencedDeclaration": 65968, + "src": "6524:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + }, + "visibility": "internal" + } + ], + "id": 59289, + "nodeType": "VariableDeclarationStatement", + "src": "6524:23:85" + }, + { + "assignments": [ + 59292 + ], + "declarations": [ + { + "constant": false, + "id": 59292, + "mutability": "mutable", + "name": "auction", + "nameLocation": "6574:7:85", + "nodeType": "VariableDeclaration", + "scope": 59425, + "src": "6553:28:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction" + }, + "typeName": { + "id": 59291, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59290, + "name": "DomainAuction", + "nameLocations": [ + "6553:13:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64221, + "src": "6553:13:85" + }, + "referencedDeclaration": 64221, + "src": "6553:13:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction" + } + }, + "visibility": "internal" + } + ], + "id": 59293, + "nodeType": "VariableDeclarationStatement", + "src": "6553:28:85" + }, + { + "assignments": [ + 59295 + ], + "declarations": [ + { + "constant": false, + "id": 59295, + "mutability": "mutable", + "name": "length", + "nameLocation": "6595:6:85", + "nodeType": "VariableDeclaration", + "scope": 59425, + "src": "6587:14:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59294, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6587:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 59298, + "initialValue": { + "expression": { + "id": 59296, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59274, + "src": "6604:3:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 59297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6608:6:85", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "6604:10:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6587:27:85" + }, + { + "expression": { + "id": 59305, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59299, + "name": "claimedAts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59278, + "src": "6620:10:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 59303, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59295, + "src": "6647:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 59302, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "6633:13:85", + "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": 59300, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6637:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59301, + "nodeType": "ArrayTypeName", + "src": "6637:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + } + }, + "id": 59304, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6633:21:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "src": "6620:34:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 59306, + "nodeType": "ExpressionStatement", + "src": "6620:34:85" + }, + { + "assignments": [ + 59309 + ], + "declarations": [ + { + "constant": false, + "id": 59309, + "mutability": "mutable", + "name": "rnsUnified", + "nameLocation": "6671:10:85", + "nodeType": "VariableDeclaration", + "scope": 59425, + "src": "6660:21:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + }, + "typeName": { + "id": 59308, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59307, + "name": "INSUnified", + "nameLocations": [ + "6660:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65048, + "src": "6660:10:85" + }, + "referencedDeclaration": 65048, + "src": "6660:10:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "visibility": "internal" + } + ], + "id": 59311, + "initialValue": { + "id": 59310, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58725, + "src": "6684:11:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6660:35:85" + }, + { + "assignments": [ + 59313 + ], + "declarations": [ + { + "constant": false, + "id": 59313, + "mutability": "mutable", + "name": "expiry", + "nameLocation": "6708:6:85", + "nodeType": "VariableDeclaration", + "scope": 59425, + "src": "6701:13:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 59312, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6701:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 59323, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 59319, + "name": "DOMAIN_EXPIRY_DURATION", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58704, + "src": "6758:22:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 59320, + "name": "MAX_EXPIRY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58696, + "src": "6782:10:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "expression": { + "id": 59316, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "6724:5:85", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 59317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6730:9:85", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "6724:15:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6740:17:85", + "memberName": "addWithUpperbound", + "nodeType": "MemberAccess", + "referencedDeclaration": 66658, + "src": "6724:33:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 59321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6724:69:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 59315, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6717:6:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 59314, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6717:6:85", + "typeDescriptions": {} + } + }, + "id": 59322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6717:77:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6701:93:85" + }, + { + "body": { + "id": 59416, + "nodeType": "Block", + "src": "6830:550:85", + "statements": [ + { + "expression": { + "id": 59334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59330, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59281, + "src": "6838:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 59331, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59274, + "src": "6843:3:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 59333, + "indexExpression": { + "id": 59332, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59325, + "src": "6847:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6843:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6838:11:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59335, + "nodeType": "ExpressionStatement", + "src": "6838:11:85" + }, + { + "expression": { + "id": 59340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59336, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59292, + "src": "6857:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 59337, + "name": "_domainAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58737, + "src": "6867:14:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_DomainAuction_$64221_storage_$", + "typeString": "mapping(uint256 => struct INSAuction.DomainAuction storage ref)" + } + }, + "id": 59339, + "indexExpression": { + "id": 59338, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59281, + "src": "6882:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6867:18:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage", + "typeString": "struct INSAuction.DomainAuction storage ref" + } + }, + "src": "6857:28:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59341, + "nodeType": "ExpressionStatement", + "src": "6857:28:85" + }, + { + "expression": { + "id": 59347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59342, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59288, + "src": "6893:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 59343, + "name": "_auctionRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58731, + "src": "6901:13:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_EventRange_$65968_storage_$", + "typeString": "mapping(bytes32 => struct EventRange storage ref)" + } + }, + "id": 59346, + "indexExpression": { + "expression": { + "id": 59344, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59292, + "src": "6915:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59345, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6923:9:85", + "memberName": "auctionId", + "nodeType": "MemberAccess", + "referencedDeclaration": 64215, + "src": "6915:17:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6901:32:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage", + "typeString": "struct EventRange storage ref" + } + }, + "src": "6893:40:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + }, + "id": 59348, + "nodeType": "ExpressionStatement", + "src": "6893:40:85" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 59349, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59292, + "src": "6946:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59350, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6954:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "6946:11:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_memory_ptr", + "typeString": "struct INSAuction.Bid memory" + } + }, + "id": 59351, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6958:9:85", + "memberName": "claimedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 64212, + "src": "6946:21:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 59352, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6971:1:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6946:26:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59411, + "nodeType": "IfStatement", + "src": "6942:392:85", + "trueBody": { + "id": 59410, + "nodeType": "Block", + "src": "6974:360:85", + "statements": [ + { + "condition": { + "id": 59357, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "6988:16:85", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 59354, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59288, + "src": "6989:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + }, + "id": 59355, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6995:7:85", + "memberName": "isEnded", + "nodeType": "MemberAccess", + "referencedDeclaration": 66016, + "src": "6989:13:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_EventRange_$65968_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_EventRange_$65968_memory_ptr_$", + "typeString": "function (struct EventRange memory) view returns (bool)" + } + }, + "id": 59356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6989:15:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59361, + "nodeType": "IfStatement", + "src": "6984:42:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59358, + "name": "NotYetEnded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64182, + "src": "7013:11:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59359, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7013:13:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59360, + "nodeType": "RevertStatement", + "src": "7006:20:85" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 59362, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59292, + "src": "7040:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59363, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7048:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "7040:11:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_memory_ptr", + "typeString": "struct INSAuction.Bid memory" + } + }, + "id": 59364, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7052:9:85", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 64210, + "src": "7040:21:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 59365, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7065:1:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7040:26:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59370, + "nodeType": "IfStatement", + "src": "7036:52:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59367, + "name": "NoOneBidded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64184, + "src": "7075:11:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7075:13:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59369, + "nodeType": "RevertStatement", + "src": "7068:20:85" + } + }, + { + "expression": { + "id": 59375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59371, + "name": "accumulatedRON", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59284, + "src": "7099:14:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "expression": { + "expression": { + "id": 59372, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59292, + "src": "7117:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59373, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7125:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "7117:11:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_memory_ptr", + "typeString": "struct INSAuction.Bid memory" + } + }, + "id": 59374, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7129:5:85", + "memberName": "price", + "nodeType": "MemberAccess", + "referencedDeclaration": 64208, + "src": "7117:17:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7099:35:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59376, + "nodeType": "ExpressionStatement", + "src": "7099:35:85" + }, + { + "expression": { + "arguments": [ + { + "id": 59380, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59281, + "src": "7165:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 59381, + "name": "expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59313, + "src": "7169:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 59377, + "name": "rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59309, + "src": "7144:10:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "id": 59379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7155:9:85", + "memberName": "setExpiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65038, + "src": "7144:20:85", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint64_$returns$__$", + "typeString": "function (uint256,uint64) external" + } + }, + "id": 59382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7144:32:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59383, + "nodeType": "ExpressionStatement", + "src": "7144:32:85" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 59389, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "7218:4:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RNSAuction_$59647", + "typeString": "contract RNSAuction" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RNSAuction_$59647", + "typeString": "contract RNSAuction" + } + ], + "id": 59388, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7210:7:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 59387, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7210:7:85", + "typeDescriptions": {} + } + }, + "id": 59390, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7210:13:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "expression": { + "id": 59391, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59292, + "src": "7225:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59392, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7233:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "7225:11:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_memory_ptr", + "typeString": "struct INSAuction.Bid memory" + } + }, + "id": 59393, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7237:6:85", + "memberName": "bidder", + "nodeType": "MemberAccess", + "referencedDeclaration": 64206, + "src": "7225:18:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 59394, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59281, + "src": "7245:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 59384, + "name": "rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59309, + "src": "7186:10:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "id": 59386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7197:12:85", + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 51045, + "src": "7186:23:85", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256) external" + } + }, + "id": 59395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7186:62:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59396, + "nodeType": "ExpressionStatement", + "src": "7186:62:85" + }, + { + "expression": { + "id": 59408, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "baseExpression": { + "id": 59397, + "name": "_domainAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58737, + "src": "7259:14:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_DomainAuction_$64221_storage_$", + "typeString": "mapping(uint256 => struct INSAuction.DomainAuction storage ref)" + } + }, + "id": 59399, + "indexExpression": { + "id": 59398, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59281, + "src": "7274:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7259:18:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage", + "typeString": "struct INSAuction.DomainAuction storage ref" + } + }, + "id": 59400, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7278:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "7259:22:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_storage", + "typeString": "struct INSAuction.Bid storage ref" + } + }, + "id": 59401, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "7282:9:85", + "memberName": "claimedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 64212, + "src": "7259:32:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 59407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 59402, + "name": "claimedAts", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59278, + "src": "7294:10:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 59404, + "indexExpression": { + "id": 59403, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59325, + "src": "7305:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "7294:13:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 59405, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "7310:5:85", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 59406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7316:9:85", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "7310:15:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7294:31:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7259:66:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59409, + "nodeType": "ExpressionStatement", + "src": "7259:66:85" + } + ] + } + }, + { + "id": 59415, + "nodeType": "UncheckedBlock", + "src": "7342:32:85", + "statements": [ + { + "expression": { + "id": 59413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "7362:3:85", + "subExpression": { + "id": 59412, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59325, + "src": "7364:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59414, + "nodeType": "ExpressionStatement", + "src": "7362:3:85" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59329, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59327, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59325, + "src": "6817:1:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 59328, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59295, + "src": "6821:6:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6817:10:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59417, + "initializationExpression": { + "assignments": [ + 59325 + ], + "declarations": [ + { + "constant": false, + "id": 59325, + "mutability": "mutable", + "name": "i", + "nameLocation": "6814:1:85", + "nodeType": "VariableDeclaration", + "scope": 59417, + "src": "6806:9:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59324, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6806:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 59326, + "nodeType": "VariableDeclarationStatement", + "src": "6806:9:85" + }, + "nodeType": "ForStatement", + "src": "6801:579:85" + }, + { + "expression": { + "arguments": [ + { + "id": 59421, + "name": "_treasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58740, + "src": "7417:9:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 59422, + "name": "accumulatedRON", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59284, + "src": "7428:14:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 59418, + "name": "RONTransferHelper", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67517, + "src": "7386:17:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_RONTransferHelper_$67517_$", + "typeString": "type(library RONTransferHelper)" + } + }, + "id": 59420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7404:12:85", + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 67492, + "src": "7386:30:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$", + "typeString": "function (address payable,uint256)" + } + }, + "id": 59423, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7386:57:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59424, + "nodeType": "ExpressionStatement", + "src": "7386:57:85" + } + ] + }, + "baseFunctions": [ + 64379 + ], + "documentation": { + "id": 59271, + "nodeType": "StructuredDocumentation", + "src": "6336:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "6e7d60f2", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "bulkClaimBidNames", + "nameLocation": "6385:17:85", + "parameters": { + "id": 59275, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59274, + "mutability": "mutable", + "name": "ids", + "nameLocation": "6422:3:85", + "nodeType": "VariableDeclaration", + "scope": 59426, + "src": "6403:22:85", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 59272, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6403:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59273, + "nodeType": "ArrayTypeName", + "src": "6403:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "6402:24:85" + }, + "returnParameters": { + "id": 59279, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59278, + "mutability": "mutable", + "name": "claimedAts", + "nameLocation": "6462:10:85", + "nodeType": "VariableDeclaration", + "scope": 59426, + "src": "6445:27:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 59276, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6445:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59277, + "nodeType": "ArrayTypeName", + "src": "6445:9:85", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "6444:29:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 59436, + "nodeType": "FunctionDefinition", + "src": "7492:89:85", + "nodes": [], + "body": { + "id": 59435, + "nodeType": "Block", + "src": "7552:29:85", + "nodes": [], + "statements": [ + { + "expression": { + "id": 59433, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58725, + "src": "7565:11:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "functionReturnParameters": 59432, + "id": 59434, + "nodeType": "Return", + "src": "7558:18:85" + } + ] + }, + "baseFunctions": [ + 64410 + ], + "documentation": { + "id": 59427, + "nodeType": "StructuredDocumentation", + "src": "7452:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "8c843314", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRNSUnified", + "nameLocation": "7501:13:85", + "parameters": { + "id": 59428, + "nodeType": "ParameterList", + "parameters": [], + "src": "7514:2:85" + }, + "returnParameters": { + "id": 59432, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59431, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 59436, + "src": "7540:10:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + }, + "typeName": { + "id": 59430, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59429, + "name": "INSUnified", + "nameLocations": [ + "7540:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65048, + "src": "7540:10:85" + }, + "referencedDeclaration": 65048, + "src": "7540:10:85", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65048", + "typeString": "contract INSUnified" + } + }, + "visibility": "internal" + } + ], + "src": "7539:12:85" + }, + "scope": 59647, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 59445, + "nodeType": "FunctionDefinition", + "src": "7625:82:85", + "nodes": [], + "body": { + "id": 59444, + "nodeType": "Block", + "src": "7680:27:85", + "nodes": [], + "statements": [ + { + "expression": { + "id": 59442, + "name": "_treasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58740, + "src": "7693:9:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "functionReturnParameters": 59441, + "id": 59443, + "nodeType": "Return", + "src": "7686:16:85" + } + ] + }, + "baseFunctions": [ + 64385 + ], + "documentation": { + "id": 59437, + "nodeType": "StructuredDocumentation", + "src": "7585:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "3b19e84a", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTreasury", + "nameLocation": "7634:11:85", + "parameters": { + "id": 59438, + "nodeType": "ParameterList", + "parameters": [], + "src": "7645:2:85" + }, + "returnParameters": { + "id": 59441, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59440, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 59445, + "src": "7671:7:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 59439, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7671:7:85", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "7670:9:85" + }, + "scope": 59647, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 59454, + "nodeType": "FunctionDefinition", + "src": "7751:88:85", + "nodes": [], + "body": { + "id": 59453, + "nodeType": "Block", + "src": "7809:30:85", + "nodes": [], + "statements": [ + { + "expression": { + "id": 59451, + "name": "_bidGapRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58743, + "src": "7822:12:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 59450, + "id": 59452, + "nodeType": "Return", + "src": "7815:19:85" + } + ] + }, + "baseFunctions": [ + 64391 + ], + "documentation": { + "id": 59446, + "nodeType": "StructuredDocumentation", + "src": "7711:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "a282d4ae", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getBidGapRatio", + "nameLocation": "7760:14:85", + "parameters": { + "id": 59447, + "nodeType": "ParameterList", + "parameters": [], + "src": "7774:2:85" + }, + "returnParameters": { + "id": 59450, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59449, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 59454, + "src": "7800:7:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59448, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7800:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7799:9:85" + }, + "scope": 59647, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 59468, + "nodeType": "FunctionDefinition", + "src": "7883:110:85", + "nodes": [], + "body": { + "id": 59467, + "nodeType": "Block", + "src": "7964:29:85", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 59464, + "name": "addr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59457, + "src": "7983:4:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 59463, + "name": "_setTreasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59540, + "src": "7970:12:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$returns$__$", + "typeString": "function (address payable)" + } + }, + "id": 59465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7970:18:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59466, + "nodeType": "ExpressionStatement", + "src": "7970:18:85" + } + ] + }, + "baseFunctions": [ + 64397 + ], + "documentation": { + "id": 59455, + "nodeType": "StructuredDocumentation", + "src": "7843:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "f0f44260", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 59460, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "7944:18:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 59461, + "kind": "modifierInvocation", + "modifierName": { + "id": 59459, + "name": "onlyRole", + "nameLocations": [ + "7935:8:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "7935:8:85" + }, + "nodeType": "ModifierInvocation", + "src": "7935:28:85" + } + ], + "name": "setTreasury", + "nameLocation": "7892:11:85", + "parameters": { + "id": 59458, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59457, + "mutability": "mutable", + "name": "addr", + "nameLocation": "7920:4:85", + "nodeType": "VariableDeclaration", + "scope": 59468, + "src": "7904:20:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 59456, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7904:15:85", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "src": "7903:22:85" + }, + "returnParameters": { + "id": 59462, + "nodeType": "ParameterList", + "parameters": [], + "src": "7964:0:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 59482, + "nodeType": "FunctionDefinition", + "src": "8038:110:85", + "nodes": [], + "body": { + "id": 59481, + "nodeType": "Block", + "src": "8115:33:85", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 59478, + "name": "ratio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59471, + "src": "8137:5:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 59477, + "name": "_setBidGapRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59562, + "src": "8121:15:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 59479, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8121:22:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59480, + "nodeType": "ExpressionStatement", + "src": "8121:22:85" + } + ] + }, + "baseFunctions": [ + 64403 + ], + "documentation": { + "id": 59469, + "nodeType": "StructuredDocumentation", + "src": "7997:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "60223b44", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 59474, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "8095:18:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 59475, + "kind": "modifierInvocation", + "modifierName": { + "id": 59473, + "name": "onlyRole", + "nameLocations": [ + "8086:8:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "8086:8:85" + }, + "nodeType": "ModifierInvocation", + "src": "8086:28:85" + } + ], + "name": "setBidGapRatio", + "nameLocation": "8047:14:85", + "parameters": { + "id": 59472, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59471, + "mutability": "mutable", + "name": "ratio", + "nameLocation": "8070:5:85", + "nodeType": "VariableDeclaration", + "scope": 59482, + "src": "8062:13:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59470, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8062:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8061:15:85" + }, + "returnParameters": { + "id": 59476, + "nodeType": "ParameterList", + "parameters": [], + "src": "8115:0:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 59515, + "nodeType": "FunctionDefinition", + "src": "8192:254:85", + "nodes": [], + "body": { + "id": 59514, + "nodeType": "Block", + "src": "8294:152:85", + "nodes": [], + "statements": [ + { + "expression": { + "id": 59497, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59493, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59489, + "src": "8300:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 59494, + "name": "_domainAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58737, + "src": "8310:14:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_DomainAuction_$64221_storage_$", + "typeString": "mapping(uint256 => struct INSAuction.DomainAuction storage ref)" + } + }, + "id": 59496, + "indexExpression": { + "id": 59495, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59485, + "src": "8325:2:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8310:18:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage", + "typeString": "struct INSAuction.DomainAuction storage ref" + } + }, + "src": "8300:28:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59498, + "nodeType": "ExpressionStatement", + "src": "8300:28:85" + }, + { + "assignments": [ + 59501 + ], + "declarations": [ + { + "constant": false, + "id": 59501, + "mutability": "mutable", + "name": "range", + "nameLocation": "8352:5:85", + "nodeType": "VariableDeclaration", + "scope": 59514, + "src": "8334:23:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange" + }, + "typeName": { + "id": 59500, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59499, + "name": "EventRange", + "nameLocations": [ + "8334:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "8334:10:85" + }, + "referencedDeclaration": 65968, + "src": "8334:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + }, + "visibility": "internal" + } + ], + "id": 59506, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 59503, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59489, + "src": "8376:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59504, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8384:9:85", + "memberName": "auctionId", + "nodeType": "MemberAccess", + "referencedDeclaration": 64215, + "src": "8376:17:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 59502, + "name": "getAuctionEvent", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59024, + "src": "8360:15:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_struct$_EventRange_$65968_memory_ptr_$", + "typeString": "function (bytes32) view returns (struct EventRange memory)" + } + }, + "id": 59505, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8360:34:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8334:60:85" + }, + { + "expression": { + "id": 59512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59507, + "name": "beatPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59491, + "src": "8400:9:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 59509, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59489, + "src": "8426:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + { + "id": 59510, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59501, + "src": "8435:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + }, + { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + ], + "id": 59508, + "name": "_getBeatPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59608, + "src": "8412:13:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_DomainAuction_$64221_memory_ptr_$_t_struct$_EventRange_$65968_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct INSAuction.DomainAuction memory,struct EventRange memory) view returns (uint256)" + } + }, + "id": 59511, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8412:29:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8400:41:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59513, + "nodeType": "ExpressionStatement", + "src": "8400:41:85" + } + ] + }, + "baseFunctions": [ + 64369 + ], + "documentation": { + "id": 59483, + "nodeType": "StructuredDocumentation", + "src": "8152:37:85", + "text": " @inheritdoc INSAuction" + }, + "functionSelector": "78bd7935", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAuction", + "nameLocation": "8201:10:85", + "parameters": { + "id": 59486, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59485, + "mutability": "mutable", + "name": "id", + "nameLocation": "8220:2:85", + "nodeType": "VariableDeclaration", + "scope": 59515, + "src": "8212:10:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59484, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8212:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8211:12:85" + }, + "returnParameters": { + "id": 59492, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59489, + "mutability": "mutable", + "name": "auction", + "nameLocation": "8266:7:85", + "nodeType": "VariableDeclaration", + "scope": 59515, + "src": "8245:28:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction" + }, + "typeName": { + "id": 59488, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59487, + "name": "DomainAuction", + "nameLocations": [ + "8245:13:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64221, + "src": "8245:13:85" + }, + "referencedDeclaration": 64221, + "src": "8245:13:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 59491, + "mutability": "mutable", + "name": "beatPrice", + "nameLocation": "8283:9:85", + "nodeType": "VariableDeclaration", + "scope": 59515, + "src": "8275:17:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59490, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8275:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8244:49:85" + }, + "scope": 59647, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 59540, + "nodeType": "FunctionDefinition", + "src": "8547:165:85", + "nodes": [], + "body": { + "id": 59539, + "nodeType": "Block", + "src": "8600:112:85", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 59526, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59521, + "name": "addr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59518, + "src": "8610:4:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 59524, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8626:1:85", + "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": 59523, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8618:7:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 59522, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8618:7:85", + "typeDescriptions": {} + } + }, + "id": 59525, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8618:10:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "8610:18:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59530, + "nodeType": "IfStatement", + "src": "8606:47:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59527, + "name": "NullAssignment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64186, + "src": "8637:14:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59528, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8637:16:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59529, + "nodeType": "RevertStatement", + "src": "8630:23:85" + } + }, + { + "expression": { + "id": 59533, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59531, + "name": "_treasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58740, + "src": "8659:9:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 59532, + "name": "addr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59518, + "src": "8671:4:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "8659:16:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 59534, + "nodeType": "ExpressionStatement", + "src": "8659:16:85" + }, + { + "eventCall": { + "arguments": [ + { + "id": 59536, + "name": "addr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59518, + "src": "8702:4:85", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 59535, + "name": "TreasuryUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64260, + "src": "8686:15:85", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 59537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8686:21:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59538, + "nodeType": "EmitStatement", + "src": "8681:26:85" + } + ] + }, + "documentation": { + "id": 59516, + "nodeType": "StructuredDocumentation", + "src": "8450:94:85", + "text": " @dev Helper method to set treasury.\n Emits an event {TreasuryUpdated}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setTreasury", + "nameLocation": "8556:12:85", + "parameters": { + "id": 59519, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59518, + "mutability": "mutable", + "name": "addr", + "nameLocation": "8585:4:85", + "nodeType": "VariableDeclaration", + "scope": 59540, + "src": "8569:20:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 59517, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8569:15:85", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "src": "8568:22:85" + }, + "returnParameters": { + "id": 59520, + "nodeType": "ParameterList", + "parameters": [], + "src": "8600:0:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 59562, + "nodeType": "FunctionDefinition", + "src": "8821:174:85", + "nodes": [], + "body": { + "id": 59561, + "nodeType": "Block", + "src": "8870:125:85", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59548, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 59546, + "name": "ratio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59543, + "src": "8880:5:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "id": 59547, + "name": "MAX_PERCENTAGE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58700, + "src": "8888:14:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8880:22:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59552, + "nodeType": "IfStatement", + "src": "8876:52:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59549, + "name": "RatioIsTooLarge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64190, + "src": "8911:15:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8911:17:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59551, + "nodeType": "RevertStatement", + "src": "8904:24:85" + } + }, + { + "expression": { + "id": 59555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59553, + "name": "_bidGapRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58743, + "src": "8934:12:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 59554, + "name": "ratio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59543, + "src": "8949:5:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8934:20:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59556, + "nodeType": "ExpressionStatement", + "src": "8934:20:85" + }, + { + "eventCall": { + "arguments": [ + { + "id": 59558, + "name": "ratio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59543, + "src": "8984:5:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 59557, + "name": "BidGapRatioUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64265, + "src": "8965:18:85", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 59559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8965:25:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59560, + "nodeType": "EmitStatement", + "src": "8960:30:85" + } + ] + }, + "documentation": { + "id": 59541, + "nodeType": "StructuredDocumentation", + "src": "8716:102:85", + "text": " @dev Helper method to set bid gap ratio.\n Emits an event {BidGapRatioUpdated}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setBidGapRatio", + "nameLocation": "8830:15:85", + "parameters": { + "id": 59544, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59543, + "mutability": "mutable", + "name": "ratio", + "nameLocation": "8854:5:85", + "nodeType": "VariableDeclaration", + "scope": 59562, + "src": "8846:13:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59542, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8846:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8845:15:85" + }, + "returnParameters": { + "id": 59545, + "nodeType": "ParameterList", + "parameters": [], + "src": "8870:0:85" + }, + "scope": 59647, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 59608, + "nodeType": "FunctionDefinition", + "src": "9054:440:85", + "nodes": [], + "body": { + "id": 59607, + "nodeType": "Block", + "src": "9188:306:85", + "nodes": [], + "statements": [ + { + "expression": { + "id": 59583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59574, + "name": "beatPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59572, + "src": "9194:9:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 59577, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59566, + "src": "9215:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59578, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9223:13:85", + "memberName": "startingPrice", + "nodeType": "MemberAccess", + "referencedDeclaration": 64217, + "src": "9215:21:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 59579, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59566, + "src": "9238:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59580, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9246:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "9238:11:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_memory_ptr", + "typeString": "struct INSAuction.Bid memory" + } + }, + "id": 59581, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9250:5:85", + "memberName": "price", + "nodeType": "MemberAccess", + "referencedDeclaration": 64208, + "src": "9238:17:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 59575, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53173, + "src": "9206:4:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$53173_$", + "typeString": "type(library Math)" + } + }, + "id": 59576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9211:3:85", + "memberName": "max", + "nodeType": "MemberAccess", + "referencedDeclaration": 52332, + "src": "9206:8:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 59582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9206:50:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9194:62:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59584, + "nodeType": "ExpressionStatement", + "src": "9194:62:85" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 59594, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 59589, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 59585, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59566, + "src": "9354:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59586, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9362:3:85", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64220, + "src": "9354:11:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64213_memory_ptr", + "typeString": "struct INSAuction.Bid memory" + } + }, + "id": 59587, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9366:5:85", + "memberName": "price", + "nodeType": "MemberAccess", + "referencedDeclaration": 64208, + "src": "9354:17:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 59588, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9375:1:85", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "9354:22:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 59593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9380:16:85", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 59590, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59569, + "src": "9381:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange memory" + } + }, + "id": 59591, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9387:7:85", + "memberName": "isEnded", + "nodeType": "MemberAccess", + "referencedDeclaration": 66016, + "src": "9381:13:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_EventRange_$65968_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_EventRange_$65968_memory_ptr_$", + "typeString": "function (struct EventRange memory) view returns (bool)" + } + }, + "id": 59592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9381:15:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9354:42:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59606, + "nodeType": "IfStatement", + "src": "9350:140:85", + "trueBody": { + "id": 59605, + "nodeType": "Block", + "src": "9398:92:85", + "statements": [ + { + "expression": { + "id": 59603, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 59595, + "name": "beatPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59572, + "src": "9406:9:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "+=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 59598, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59566, + "src": "9431:7:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 59599, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9439:13:85", + "memberName": "startingPrice", + "nodeType": "MemberAccess", + "referencedDeclaration": 64217, + "src": "9431:21:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 59600, + "name": "_bidGapRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58743, + "src": "9454:12:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 59601, + "name": "MAX_PERCENTAGE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58700, + "src": "9468:14:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 59596, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53173, + "src": "9419:4:85", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$53173_$", + "typeString": "type(library Math)" + } + }, + "id": 59597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9424:6:85", + "memberName": "mulDiv", + "nodeType": "MemberAccess", + "referencedDeclaration": 52521, + "src": "9419:11:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 59602, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9419:64:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9406:77:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 59604, + "nodeType": "ExpressionStatement", + "src": "9406:77:85" + } + ] + } + } + ] + }, + "documentation": { + "id": 59563, + "nodeType": "StructuredDocumentation", + "src": "8999:52:85", + "text": " @dev Helper method to get beat price." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getBeatPrice", + "nameLocation": "9063:13:85", + "parameters": { + "id": 59570, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59566, + "mutability": "mutable", + "name": "auction", + "nameLocation": "9098:7:85", + "nodeType": "VariableDeclaration", + "scope": 59608, + "src": "9077:28:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_memory_ptr", + "typeString": "struct INSAuction.DomainAuction" + }, + "typeName": { + "id": 59565, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59564, + "name": "DomainAuction", + "nameLocations": [ + "9077:13:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64221, + "src": "9077:13:85" + }, + "referencedDeclaration": 64221, + "src": "9077:13:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64221_storage_ptr", + "typeString": "struct INSAuction.DomainAuction" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 59569, + "mutability": "mutable", + "name": "range", + "nameLocation": "9125:5:85", + "nodeType": "VariableDeclaration", + "scope": 59608, + "src": "9107:23:85", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_memory_ptr", + "typeString": "struct EventRange" + }, + "typeName": { + "id": 59568, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59567, + "name": "EventRange", + "nameLocations": [ + "9107:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "9107:10:85" + }, + "referencedDeclaration": 65968, + "src": "9107:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + }, + "visibility": "internal" + } + ], + "src": "9076:55:85" + }, + "returnParameters": { + "id": 59573, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59572, + "mutability": "mutable", + "name": "beatPrice", + "nameLocation": "9175:9:85", + "nodeType": "VariableDeclaration", + "scope": 59608, + "src": "9167:17:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 59571, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9167:7:85", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9166:19:85" + }, + "scope": 59647, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 59629, + "nodeType": "FunctionDefinition", + "src": "9566:160:85", + "nodes": [], + "body": { + "id": 59628, + "nodeType": "Block", + "src": "9640:86:85", + "nodes": [], + "statements": [ + { + "condition": { + "id": 59623, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9650:43:85", + "subExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 59621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 59615, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59612, + "src": "9652:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + }, + "id": 59616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9658:5:85", + "memberName": "valid", + "nodeType": "MemberAccess", + "referencedDeclaration": 65984, + "src": "9652:11:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_EventRange_$65968_calldata_ptr_$returns$_t_bool_$attached_to$_t_struct$_EventRange_$65968_calldata_ptr_$", + "typeString": "function (struct EventRange calldata) pure returns (bool)" + } + }, + "id": 59617, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9652:13:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 59618, + "name": "range", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59612, + "src": "9669:5:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange calldata" + } + }, + "id": 59619, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9675:15:85", + "memberName": "isNotYetStarted", + "nodeType": "MemberAccess", + "referencedDeclaration": 66000, + "src": "9669:21:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_EventRange_$65968_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_EventRange_$65968_memory_ptr_$", + "typeString": "function (struct EventRange memory) view returns (bool)" + } + }, + "id": 59620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9669:23:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9652:40:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 59622, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "9651:42:85", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59627, + "nodeType": "IfStatement", + "src": "9646:75:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59624, + "name": "InvalidEventRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64194, + "src": "9702:17:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59625, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9702:19:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59626, + "nodeType": "RevertStatement", + "src": "9695:26:85" + } + } + ] + }, + "documentation": { + "id": 59609, + "nodeType": "StructuredDocumentation", + "src": "9498:65:85", + "text": " @dev Helper method to ensure event range is valid." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_requireValidEventRange", + "nameLocation": "9575:23:85", + "parameters": { + "id": 59613, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59612, + "mutability": "mutable", + "name": "range", + "nameLocation": "9619:5:85", + "nodeType": "VariableDeclaration", + "scope": 59629, + "src": "9599:25:85", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_calldata_ptr", + "typeString": "struct EventRange" + }, + "typeName": { + "id": 59611, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 59610, + "name": "EventRange", + "nameLocations": [ + "9599:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65968, + "src": "9599:10:85" + }, + "referencedDeclaration": 65968, + "src": "9599:10:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage_ptr", + "typeString": "struct EventRange" + } + }, + "visibility": "internal" + } + ], + "src": "9598:27:85" + }, + "returnParameters": { + "id": 59614, + "nodeType": "ParameterList", + "parameters": [], + "src": "9640:0:85" + }, + "scope": 59647, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 59646, + "nodeType": "FunctionDefinition", + "src": "9823:163:85", + "nodes": [], + "body": { + "id": 59645, + "nodeType": "Block", + "src": "9884:102:85", + "nodes": [], + "statements": [ + { + "condition": { + "id": 59640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9894:43:85", + "subExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "baseExpression": { + "id": 59635, + "name": "_auctionRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 58731, + "src": "9895:13:85", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_EventRange_$65968_storage_$", + "typeString": "mapping(bytes32 => struct EventRange storage ref)" + } + }, + "id": 59637, + "indexExpression": { + "id": 59636, + "name": "auctionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 59632, + "src": "9909:9:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9895:24:85", + "typeDescriptions": { + "typeIdentifier": "t_struct$_EventRange_$65968_storage", + "typeString": "struct EventRange storage ref" + } + }, + "id": 59638, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9920:15:85", + "memberName": "isNotYetStarted", + "nodeType": "MemberAccess", + "referencedDeclaration": 66000, + "src": "9895:40:85", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_struct$_EventRange_$65968_memory_ptr_$returns$_t_bool_$attached_to$_t_struct$_EventRange_$65968_memory_ptr_$", + "typeString": "function (struct EventRange memory) view returns (bool)" + } + }, + "id": 59639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9895:42:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 59644, + "nodeType": "IfStatement", + "src": "9890:91:85", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 59641, + "name": "EventIsNotCreatedOrAlreadyStarted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64204, + "src": "9946:33:85", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 59642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9946:35:85", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 59643, + "nodeType": "RevertStatement", + "src": "9939:42:85" + } + } + ] + }, + "documentation": { + "id": 59630, + "nodeType": "StructuredDocumentation", + "src": "9730:90:85", + "text": " @dev Helper method to ensure the auction is not yet started or not created." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_requireNotStarted", + "nameLocation": "9832:18:85", + "parameters": { + "id": 59633, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 59632, + "mutability": "mutable", + "name": "auctionId", + "nameLocation": "9859:9:85", + "nodeType": "VariableDeclaration", + "scope": 59646, + "src": "9851:17:85", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 59631, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9851:7:85", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "9850:19:85" + }, + "returnParameters": { + "id": 59634, + "nodeType": "ParameterList", + "parameters": [], + "src": "9884:0:85" + }, + "scope": 59647, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 58672, + "name": "Initializable", + "nameLocations": [ + "769:13:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49864, + "src": "769:13:85" + }, + "id": 58673, + "nodeType": "InheritanceSpecifier", + "src": "769:13:85" + }, + { + "baseName": { + "id": 58674, + "name": "AccessControlEnumerable", + "nameLocations": [ + "784:23:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48591, + "src": "784:23:85" + }, + "id": 58675, + "nodeType": "InheritanceSpecifier", + "src": "784:23:85" + }, + { + "baseName": { + "id": 58676, + "name": "INSAuction", + "nameLocations": [ + "809:10:85" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64411, + "src": "809:10:85" + }, + "id": 58677, + "nodeType": "InheritanceSpecifier", + "src": "809:10:85" + } + ], + "canonicalName": "RNSAuction", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 59647, + 64411, + 48591, + 48466, + 52295, + 52307, + 48689, + 48664, + 51932, + 49864 + ], + "name": "RNSAuction", + "nameLocation": "755:10:85", + "scope": 59648, + "usedErrors": [ + 64182, + 64184, + 64186, + 64188, + 64190, + 64192, + 64194, + 64196, + 64198, + 64200, + 64202, + 64204 + ], + "usedEvents": [ + 48603, + 48612, + 48621, + 49710, + 64229, + 64240, + 64255, + 64260, + 64265 + ] + } + ], + "license": "MIT" + }, + "blockNumber": 21474288, + "bytecode": "0x608060405261000c610011565b6100d0565b600054610100900460ff161561007d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100ce576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612443806100df6000396000f3fe6080604052600436106101c25760003560e01c8063791a26b4116100f7578063a282d4ae11610095578063db5e1ec611610064578063db5e1ec6146105b4578063ec14cf37146105d4578063f0f44260146105f4578063f5b541a61461061457600080fd5b8063a282d4ae14610544578063b967169014610559578063ca15c87314610574578063d547741f1461059457600080fd5b80639010d07c116100d15780639010d07c146104dc57806391d14854146104fc5780639979ef451461051c578063a217fddf1461052f57600080fd5b8063791a26b41461047e57806381bec1b31461049e5780638c843314146104be57600080fd5b80633b19e84a1161016457806360223b441161013e57806360223b44146103a15780636e7d60f2146103c1578063777b0a18146103ee57806378bd79351461040e57600080fd5b80633b19e84a146103395780634c255c971461036b57806353f9195e1461038157600080fd5b806319a3ee40116101a057806319a3ee40146102a0578063248a9ca3146102b85780632f2ff15d146102f757806336568abe1461031957600080fd5b806301ffc9a7146101c75780630afe1bb3146101fc57806315a291621461022c575b600080fd5b3480156101d357600080fd5b506101e76101e2366004611cf6565b610636565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b506102146305a39a8081565b6040516001600160401b0390911681526020016101f3565b34801561023857600080fd5b50610285610247366004611d20565b604080518082019091526000808252602082015250600090815260366020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101f3565b3480156102ac57600080fd5b506102146301e1338081565b3480156102c457600080fd5b506102e96102d3366004611d20565b6000908152600160208190526040909120015490565b6040519081526020016101f3565b34801561030357600080fd5b50610317610312366004611d4e565b610661565b005b34801561032557600080fd5b50610317610334366004611d4e565b61068c565b34801561034557600080fd5b506038546001600160a01b03165b6040516001600160a01b0390911681526020016101f3565b34801561037757600080fd5b506102e961271081565b34801561038d57600080fd5b506101e761039c366004611d20565b61070f565b3480156103ad57600080fd5b506103176103bc366004611d20565b610732565b3480156103cd57600080fd5b506103e16103dc366004611dc9565b610746565b6040516101f39190611e0a565b3480156103fa57600080fd5b50610317610409366004611e4e565b610a35565b34801561041a57600080fd5b5061042e610429366004611d20565b610b98565b6040805183518152602080850151818301529382015180516001600160a01b0316828401529384015160608083019190915291840151608082015292015160a083015260c082015260e0016101f3565b34801561048a57600080fd5b506103e1610499366004611dc9565b610c4d565b3480156104aa57600080fd5b506103176104b9366004611edf565b610e08565b3480156104ca57600080fd5b506035546001600160a01b0316610353565b3480156104e857600080fd5b506103536104f7366004611f0c565b610e85565b34801561050857600080fd5b506101e7610517366004611d4e565b610ea4565b61031761052a366004611d20565b610ecf565b34801561053b57600080fd5b506102e9600081565b34801561055057600080fd5b506039546102e9565b34801561056557600080fd5b506102146001600160401b0381565b34801561058057600080fd5b506102e961058f366004611d20565b611081565b3480156105a057600080fd5b506103176105af366004611d4e565b611098565b3480156105c057600080fd5b506102e96105cf366004611f2e565b6110be565b3480156105e057600080fd5b506103176105ef366004611f4a565b61115b565b34801561060057600080fd5b5061031761060f366004611fce565b6112f8565b34801561062057600080fd5b506102e96000805160206123ee83398151915281565b60006001600160e01b03198216635a05180f60e01b148061065b575061065b8261130c565b92915050565b6000828152600160208190526040909120015461067d81611341565b610687838361134e565b505050565b6001600160a01b03811633146107015760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61070b8282611370565b5050565b600881901c6000908152603a6020526040812054600160ff84161b16151561065b565b600061073d81611341565b61070b82611392565b6060600080610768604051806040016040528060008152602001600081525090565b610770611ca1565b85806001600160401b0381111561078957610789611feb565b6040519080825280602002602001820160405280156107b2578160200160208202803683370190505b506035549096506001600160a01b031660006107da426301e133806001600160401b036113f0565b905060005b83811015610a11578a8a828181106107f9576107f9612001565b60209081029290920135600081815260378452604080822081516060808201845282548252600180840154838a0152845160808101865260028501546001600160a01b031681526003850154818b0152600485015481870152600590940154848301528285019384528251865260368952848620855180870190965280548652015497840197909752905190950151929c5099509297509091039050610a095760208601514210156108be576040516372d1250d60e01b815260040160405180910390fd5b8460400151604001516000036108e7576040516323bbcc0160e01b815260040160405180910390fd5b6040850151602001516108fa908861202d565b60405163fc284d1160e01b8152600481018a90526001600160401b03841660248201529097506001600160a01b0384169063fc284d1190604401600060405180830381600087803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b505050506040858101515190516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018a9052908416906323b872dd90606401600060405180830381600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b50505050428982815181106109e8576109e8612001565b602090810291909101810182905260008a8152603790915260409020600501555b6001016107df565b50603854610a28906001600160a01b031687611426565b5050505050505092915050565b6000805160206123ee833981519152610a4d81611341565b85610a578161148b565b84801580610a655750808414155b15610a8357604051634ec4810560e11b815260040160405180910390fd5b6000806000805b84811015610b4c578a8a82818110610aa457610aa4612001565b905060200201359350610ab68461070f565b610ad357604051637d6fe8d760e11b815260040160405180910390fd5b6000848152603760205260409020805493509150821580610af357508b83145b80610b0057506004820154155b610b1d57604051631dc8374160e01b815260040160405180910390fd5b8b8255888882818110610b3257610b32612001565b905060200201358260010181905550806001019050610a8a565b508a7f9a845a1c4235343a450f5e39d4179b7e2a6c9586c02bff45d956717f4a19dd948b8b8b8b604051610b839493929190612072565b60405180910390a25050505050505050505050565b610ba0611ca1565b5060008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b03168152600385015481880152600485015481870152600590940154918401919091528184019290925280518351808501855286815285018690528552603684528285208351808501909452805484529091015492820192909252909190610c4583826114d8565b915050915091565b60606000805160206123ee833981519152610c6781611341565b826000819003610c8a57604051634ec4810560e11b815260040160405180910390fd5b806001600160401b03811115610ca257610ca2611feb565b604051908082528060200260200182016040528015610ccb578160200160208202803683370190505b506035549093506001600160a01b03167fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6886301e1338060005b84811015610dfc57836001600160a01b0316630570891f848b8b85818110610d2e57610d2e612001565b9050602002810190610d4091906120a4565b600030886040518763ffffffff1660e01b8152600401610d65969594939291906120ea565b60408051808303816000875af1158015610d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190612146565b9050878281518110610dbb57610dbb612001565b602002602001018181525050610df4878281518110610ddc57610ddc612001565b6020026020010151603a61153090919063ffffffff16565b600101610d04565b50505050505092915050565b6000610e1381611341565b81610e1d81611559565b83610e278161148b565b60008581526036602090815260409091208535815590850135600182015550847fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b85604051610e769190612180565b60405180910390a25050505050565b6000828152600260205260408120610e9d908361159e565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b031681526003850154818801526004850154818701526005909401549184019190915281840192909252805185526036845282852083518085019094528054845290910154928201929092529091610f6383836114d8565b9050610f6e826115aa565b610f8b576040516348c6117b60e11b815260040160405180910390fd5b80341015610fac57604051632ca2f52b60e11b815260040160405180910390fd5b33328114610fcc576040516259ca3d60e61b815260040160405180910390fd5b604084810151805160209182015160008981526037845284902034600382018190556002820180546001600160a01b0319166001600160a01b038981169182178355426004909501949094558b5188519384529683015295810183905290831660608201529193909290918991907f5934294f4724ea4bb71fee8511b9ccb8dd6d2249ac4d120a81ccfcbbd0ad905f9060800160405180910390a38115611077576110778383611426565b5050505050505050565b600081815260026020526040812061065b906115c5565b600082815260016020819052604090912001546110b481611341565b6106878383611370565b6000806110ca81611341565b826110d481611559565b33846040516020016110e7929190612197565b60408051808303601f1901815291815281516020928301206000818152603684529190912086358155918601356001830155935050827fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b8560405161114c9190612180565b60405180910390a25050919050565b600054610100900460ff161580801561117b5750600054600160ff909116105b806111955750303b158015611195575060005460ff166001145b6111f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106f8565b6000805460ff19166001179055801561121b576000805461ff0019166101001790555b611224836115cf565b61122d82611392565b611238600088611640565b846000805160206123ee83398151915260005b8281101561128b57611283828a8a8481811061126957611269612001565b905060200201602081019061127e9190611fce565b611640565b60010161124b565b5050603580546001600160a01b0319166001600160a01b0387161790555080156112ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b600061130381611341565b61070b826115cf565b60006001600160e01b03198216637965db0b60e01b148061065b57506301ffc9a760e01b6001600160e01b031983161461065b565b61134b813361164a565b50565b611358828261167d565b600082815260026020526040902061068790826116e8565b61137a82826116fd565b60008281526002602052604090206106879082611764565b6127108111156113b55760405163220f1a1560e01b815260040160405180910390fd5b60398190556040518181527f846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab70671823429060200160405180910390a150565b6000818411806113ff57508183115b1561140b575080610e9d565b6114158484611779565b905081811115610e9d575092915050565b6000611432838361178d565b9050806106875761144b836001600160a01b0316611803565b61145483611819565b6040516020016114659291906121e2565b60408051601f198184030181529082905262461bcd60e51b82526106f891600401612260565b60008181526036602090815260409182902082518084019093528054835260010154908201526114bb9051421090565b61134b5760405163028e4e9760e51b815260040160405180910390fd5b60006114f08360200151846040015160200151611830565b905082604001516020015160001415801561150e5750602082015142105b1561065b576115268360200151603954612710611846565b610e9d908261202d565b600881901c600090815260209290925260409091208054600160ff9093169290921b9091179055565b6020810135813511158015611581575061158161157b36839003830183612293565b51421090565b61134b576040516302ef0c7360e21b815260040160405180910390fd5b6000610e9d8383611930565b60004282600001511115801561065b57505060200151421090565b600061065b825490565b6001600160a01b0381166115f6576040516362daafb160e11b815260040160405180910390fd5b603880546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b61070b828261134e565b6116548282610ea4565b61070b5761166181611803565b61166c83602061195a565b6040516020016114659291906122ef565b6116878282610ea4565b61070b5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610e9d836001600160a01b038416611af5565b6117078282610ea4565b1561070b5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e9d836001600160a01b038416611b44565b8181018281101561065b575060001961065b565b604080516000808252602082019092526001600160a01b0384169083906040516117b79190612364565b60006040518083038185875af1925050503d80600081146117f4576040519150601f19603f3d011682016040523d82523d6000602084013e6117f9565b606091505b5090949350505050565b606061065b6001600160a01b038316601461195a565b606061065b8261182884611c37565b60010161195a565b600081831161183f5781610e9d565b5090919050565b60008080600019858709858702925082811083820303915050806000036118805783828161187657611876612380565b0492505050610e9d565b8084116118c75760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106f8565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082600001828154811061194757611947612001565b9060005260206000200154905092915050565b60606000611969836002612396565b61197490600261202d565b6001600160401b0381111561198b5761198b611feb565b6040519080825280601f01601f1916602001820160405280156119b5576020820181803683370190505b509050600360fc1b816000815181106119d0576119d0612001565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119ff576119ff612001565b60200101906001600160f81b031916908160001a9053506000611a23846002612396565b611a2e90600161202d565b90505b6001811115611aa6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a6257611a62612001565b1a60f81b828281518110611a7857611a78612001565b60200101906001600160f81b031916908160001a90535060049490941c93611a9f816123ad565b9050611a31565b508315610e9d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106f8565b6000818152600183016020526040812054611b3c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561065b565b50600061065b565b60008181526001830160205260408120548015611c2d576000611b686001836123c4565b8554909150600090611b7c906001906123c4565b9050818114611be1576000866000018281548110611b9c57611b9c612001565b9060005260206000200154905080876000018481548110611bbf57611bbf612001565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611bf257611bf26123d7565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061065b565b600091505061065b565b600080608083901c15611c4f5760809290921c916010015b604083901c15611c645760409290921c916008015b602083901c15611c795760209290921c916004015b601083901c15611c8e5760109290921c916002015b600883901c1561065b5760010192915050565b60405180606001604052806000801916815260200160008152602001611cf1604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b905290565b600060208284031215611d0857600080fd5b81356001600160e01b031981168114610e9d57600080fd5b600060208284031215611d3257600080fd5b5035919050565b6001600160a01b038116811461134b57600080fd5b60008060408385031215611d6157600080fd5b823591506020830135611d7381611d39565b809150509250929050565b60008083601f840112611d9057600080fd5b5081356001600160401b03811115611da757600080fd5b6020830191508360208260051b8501011115611dc257600080fd5b9250929050565b60008060208385031215611ddc57600080fd5b82356001600160401b03811115611df257600080fd5b611dfe85828601611d7e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015611e4257835183529284019291840191600101611e26565b50909695505050505050565b600080600080600060608688031215611e6657600080fd5b8535945060208601356001600160401b0380821115611e8457600080fd5b611e9089838a01611d7e565b90965094506040880135915080821115611ea957600080fd5b50611eb688828901611d7e565b969995985093965092949392505050565b600060408284031215611ed957600080fd5b50919050565b60008060608385031215611ef257600080fd5b82359150611f038460208501611ec7565b90509250929050565b60008060408385031215611f1f57600080fd5b50508035926020909101359150565b600060408284031215611f4057600080fd5b610e9d8383611ec7565b60008060008060008060a08789031215611f6357600080fd5b8635611f6e81611d39565b955060208701356001600160401b03811115611f8957600080fd5b611f9589828a01611d7e565b9096509450506040870135611fa981611d39565b92506060870135611fb981611d39565b80925050608087013590509295509295509295565b600060208284031215611fe057600080fd5b8135610e9d81611d39565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561065b5761065b612017565b81835260006001600160fb1b0383111561205957600080fd5b8260051b80836020870137939093016020019392505050565b604081526000612086604083018688612040565b8281036020840152612099818587612040565b979650505050505050565b6000808335601e198436030181126120bb57600080fd5b8301803591506001600160401b038211156120d557600080fd5b602001915036819003821315611dc257600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b6000806040838503121561215957600080fd5b82516001600160401b038116811461217057600080fd5b6020939093015192949293505050565b81358152602080830135908201526040810161065b565b6001600160a01b038316815260608101610e9d602083018480358252602090810135910152565b60005b838110156121d95781810151838201526020016121c1565b50506000910152565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b60208201526000835161222d81602a8501602088016121be565b660103b30b63ab2960cd1b602a9184019182015283516122548160318401602088016121be565b01603101949350505050565b602081526000825180602084015261227f8160408501602087016121be565b601f01601f19169190910160400192915050565b6000604082840312156122a557600080fd5b604051604081018181106001600160401b03821117156122d557634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123278160178501602088016121be565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123588160288401602088016121be565b01602801949350505050565b600082516123768184602087016121be565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b808202811582820484141761065b5761065b612017565b6000816123bc576123bc612017565b506000190190565b8181038181111561065b5761065b612017565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220af269df2a00739b1d11f4b9dfe6c9748aae7893d5be6658d7c88083e147efb3764736f6c63430008150033", + "chainId": 2021, + "contractName": "RNSAuction", + "deployedBytecode": "0x6080604052600436106101c25760003560e01c8063791a26b4116100f7578063a282d4ae11610095578063db5e1ec611610064578063db5e1ec6146105b4578063ec14cf37146105d4578063f0f44260146105f4578063f5b541a61461061457600080fd5b8063a282d4ae14610544578063b967169014610559578063ca15c87314610574578063d547741f1461059457600080fd5b80639010d07c116100d15780639010d07c146104dc57806391d14854146104fc5780639979ef451461051c578063a217fddf1461052f57600080fd5b8063791a26b41461047e57806381bec1b31461049e5780638c843314146104be57600080fd5b80633b19e84a1161016457806360223b441161013e57806360223b44146103a15780636e7d60f2146103c1578063777b0a18146103ee57806378bd79351461040e57600080fd5b80633b19e84a146103395780634c255c971461036b57806353f9195e1461038157600080fd5b806319a3ee40116101a057806319a3ee40146102a0578063248a9ca3146102b85780632f2ff15d146102f757806336568abe1461031957600080fd5b806301ffc9a7146101c75780630afe1bb3146101fc57806315a291621461022c575b600080fd5b3480156101d357600080fd5b506101e76101e2366004611cf6565b610636565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b506102146305a39a8081565b6040516001600160401b0390911681526020016101f3565b34801561023857600080fd5b50610285610247366004611d20565b604080518082019091526000808252602082015250600090815260366020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101f3565b3480156102ac57600080fd5b506102146301e1338081565b3480156102c457600080fd5b506102e96102d3366004611d20565b6000908152600160208190526040909120015490565b6040519081526020016101f3565b34801561030357600080fd5b50610317610312366004611d4e565b610661565b005b34801561032557600080fd5b50610317610334366004611d4e565b61068c565b34801561034557600080fd5b506038546001600160a01b03165b6040516001600160a01b0390911681526020016101f3565b34801561037757600080fd5b506102e961271081565b34801561038d57600080fd5b506101e761039c366004611d20565b61070f565b3480156103ad57600080fd5b506103176103bc366004611d20565b610732565b3480156103cd57600080fd5b506103e16103dc366004611dc9565b610746565b6040516101f39190611e0a565b3480156103fa57600080fd5b50610317610409366004611e4e565b610a35565b34801561041a57600080fd5b5061042e610429366004611d20565b610b98565b6040805183518152602080850151818301529382015180516001600160a01b0316828401529384015160608083019190915291840151608082015292015160a083015260c082015260e0016101f3565b34801561048a57600080fd5b506103e1610499366004611dc9565b610c4d565b3480156104aa57600080fd5b506103176104b9366004611edf565b610e08565b3480156104ca57600080fd5b506035546001600160a01b0316610353565b3480156104e857600080fd5b506103536104f7366004611f0c565b610e85565b34801561050857600080fd5b506101e7610517366004611d4e565b610ea4565b61031761052a366004611d20565b610ecf565b34801561053b57600080fd5b506102e9600081565b34801561055057600080fd5b506039546102e9565b34801561056557600080fd5b506102146001600160401b0381565b34801561058057600080fd5b506102e961058f366004611d20565b611081565b3480156105a057600080fd5b506103176105af366004611d4e565b611098565b3480156105c057600080fd5b506102e96105cf366004611f2e565b6110be565b3480156105e057600080fd5b506103176105ef366004611f4a565b61115b565b34801561060057600080fd5b5061031761060f366004611fce565b6112f8565b34801561062057600080fd5b506102e96000805160206123ee83398151915281565b60006001600160e01b03198216635a05180f60e01b148061065b575061065b8261130c565b92915050565b6000828152600160208190526040909120015461067d81611341565b610687838361134e565b505050565b6001600160a01b03811633146107015760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61070b8282611370565b5050565b600881901c6000908152603a6020526040812054600160ff84161b16151561065b565b600061073d81611341565b61070b82611392565b6060600080610768604051806040016040528060008152602001600081525090565b610770611ca1565b85806001600160401b0381111561078957610789611feb565b6040519080825280602002602001820160405280156107b2578160200160208202803683370190505b506035549096506001600160a01b031660006107da426301e133806001600160401b036113f0565b905060005b83811015610a11578a8a828181106107f9576107f9612001565b60209081029290920135600081815260378452604080822081516060808201845282548252600180840154838a0152845160808101865260028501546001600160a01b031681526003850154818b0152600485015481870152600590940154848301528285019384528251865260368952848620855180870190965280548652015497840197909752905190950151929c5099509297509091039050610a095760208601514210156108be576040516372d1250d60e01b815260040160405180910390fd5b8460400151604001516000036108e7576040516323bbcc0160e01b815260040160405180910390fd5b6040850151602001516108fa908861202d565b60405163fc284d1160e01b8152600481018a90526001600160401b03841660248201529097506001600160a01b0384169063fc284d1190604401600060405180830381600087803b15801561094e57600080fd5b505af1158015610962573d6000803e3d6000fd5b505050506040858101515190516323b872dd60e01b81523060048201526001600160a01b039182166024820152604481018a9052908416906323b872dd90606401600060405180830381600087803b1580156109bd57600080fd5b505af11580156109d1573d6000803e3d6000fd5b50505050428982815181106109e8576109e8612001565b602090810291909101810182905260008a8152603790915260409020600501555b6001016107df565b50603854610a28906001600160a01b031687611426565b5050505050505092915050565b6000805160206123ee833981519152610a4d81611341565b85610a578161148b565b84801580610a655750808414155b15610a8357604051634ec4810560e11b815260040160405180910390fd5b6000806000805b84811015610b4c578a8a82818110610aa457610aa4612001565b905060200201359350610ab68461070f565b610ad357604051637d6fe8d760e11b815260040160405180910390fd5b6000848152603760205260409020805493509150821580610af357508b83145b80610b0057506004820154155b610b1d57604051631dc8374160e01b815260040160405180910390fd5b8b8255888882818110610b3257610b32612001565b905060200201358260010181905550806001019050610a8a565b508a7f9a845a1c4235343a450f5e39d4179b7e2a6c9586c02bff45d956717f4a19dd948b8b8b8b604051610b839493929190612072565b60405180910390a25050505050505050505050565b610ba0611ca1565b5060008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b03168152600385015481880152600485015481870152600590940154918401919091528184019290925280518351808501855286815285018690528552603684528285208351808501909452805484529091015492820192909252909190610c4583826114d8565b915050915091565b60606000805160206123ee833981519152610c6781611341565b826000819003610c8a57604051634ec4810560e11b815260040160405180910390fd5b806001600160401b03811115610ca257610ca2611feb565b604051908082528060200260200182016040528015610ccb578160200160208202803683370190505b506035549093506001600160a01b03167fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6886301e1338060005b84811015610dfc57836001600160a01b0316630570891f848b8b85818110610d2e57610d2e612001565b9050602002810190610d4091906120a4565b600030886040518763ffffffff1660e01b8152600401610d65969594939291906120ea565b60408051808303816000875af1158015610d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190612146565b9050878281518110610dbb57610dbb612001565b602002602001018181525050610df4878281518110610ddc57610ddc612001565b6020026020010151603a61153090919063ffffffff16565b600101610d04565b50505050505092915050565b6000610e1381611341565b81610e1d81611559565b83610e278161148b565b60008581526036602090815260409091208535815590850135600182015550847fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b85604051610e769190612180565b60405180910390a25050505050565b6000828152600260205260408120610e9d908361159e565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008181526037602090815260408083208151606080820184528254825260018084015483870152845160808101865260028501546001600160a01b031681526003850154818801526004850154818701526005909401549184019190915281840192909252805185526036845282852083518085019094528054845290910154928201929092529091610f6383836114d8565b9050610f6e826115aa565b610f8b576040516348c6117b60e11b815260040160405180910390fd5b80341015610fac57604051632ca2f52b60e11b815260040160405180910390fd5b33328114610fcc576040516259ca3d60e61b815260040160405180910390fd5b604084810151805160209182015160008981526037845284902034600382018190556002820180546001600160a01b0319166001600160a01b038981169182178355426004909501949094558b5188519384529683015295810183905290831660608201529193909290918991907f5934294f4724ea4bb71fee8511b9ccb8dd6d2249ac4d120a81ccfcbbd0ad905f9060800160405180910390a38115611077576110778383611426565b5050505050505050565b600081815260026020526040812061065b906115c5565b600082815260016020819052604090912001546110b481611341565b6106878383611370565b6000806110ca81611341565b826110d481611559565b33846040516020016110e7929190612197565b60408051808303601f1901815291815281516020928301206000818152603684529190912086358155918601356001830155935050827fd8960c7efc6464cdd8dd07f4dc149b0a33bf7f60bf357838722d5b80f988fb1b8560405161114c9190612180565b60405180910390a25050919050565b600054610100900460ff161580801561117b5750600054600160ff909116105b806111955750303b158015611195575060005460ff166001145b6111f85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106f8565b6000805460ff19166001179055801561121b576000805461ff0019166101001790555b611224836115cf565b61122d82611392565b611238600088611640565b846000805160206123ee83398151915260005b8281101561128b57611283828a8a8481811061126957611269612001565b905060200201602081019061127e9190611fce565b611640565b60010161124b565b5050603580546001600160a01b0319166001600160a01b0387161790555080156112ef576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b600061130381611341565b61070b826115cf565b60006001600160e01b03198216637965db0b60e01b148061065b57506301ffc9a760e01b6001600160e01b031983161461065b565b61134b813361164a565b50565b611358828261167d565b600082815260026020526040902061068790826116e8565b61137a82826116fd565b60008281526002602052604090206106879082611764565b6127108111156113b55760405163220f1a1560e01b815260040160405180910390fd5b60398190556040518181527f846b33625d74f443855144a5f2aef4dda303cda3dfb1c704cb58ab70671823429060200160405180910390a150565b6000818411806113ff57508183115b1561140b575080610e9d565b6114158484611779565b905081811115610e9d575092915050565b6000611432838361178d565b9050806106875761144b836001600160a01b0316611803565b61145483611819565b6040516020016114659291906121e2565b60408051601f198184030181529082905262461bcd60e51b82526106f891600401612260565b60008181526036602090815260409182902082518084019093528054835260010154908201526114bb9051421090565b61134b5760405163028e4e9760e51b815260040160405180910390fd5b60006114f08360200151846040015160200151611830565b905082604001516020015160001415801561150e5750602082015142105b1561065b576115268360200151603954612710611846565b610e9d908261202d565b600881901c600090815260209290925260409091208054600160ff9093169290921b9091179055565b6020810135813511158015611581575061158161157b36839003830183612293565b51421090565b61134b576040516302ef0c7360e21b815260040160405180910390fd5b6000610e9d8383611930565b60004282600001511115801561065b57505060200151421090565b600061065b825490565b6001600160a01b0381166115f6576040516362daafb160e11b815260040160405180910390fd5b603880546001600160a01b0319166001600160a01b0383169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d190600090a250565b61070b828261134e565b6116548282610ea4565b61070b5761166181611803565b61166c83602061195a565b6040516020016114659291906122ef565b6116878282610ea4565b61070b5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610e9d836001600160a01b038416611af5565b6117078282610ea4565b1561070b5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e9d836001600160a01b038416611b44565b8181018281101561065b575060001961065b565b604080516000808252602082019092526001600160a01b0384169083906040516117b79190612364565b60006040518083038185875af1925050503d80600081146117f4576040519150601f19603f3d011682016040523d82523d6000602084013e6117f9565b606091505b5090949350505050565b606061065b6001600160a01b038316601461195a565b606061065b8261182884611c37565b60010161195a565b600081831161183f5781610e9d565b5090919050565b60008080600019858709858702925082811083820303915050806000036118805783828161187657611876612380565b0492505050610e9d565b8084116118c75760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016106f8565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082600001828154811061194757611947612001565b9060005260206000200154905092915050565b60606000611969836002612396565b61197490600261202d565b6001600160401b0381111561198b5761198b611feb565b6040519080825280601f01601f1916602001820160405280156119b5576020820181803683370190505b509050600360fc1b816000815181106119d0576119d0612001565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106119ff576119ff612001565b60200101906001600160f81b031916908160001a9053506000611a23846002612396565b611a2e90600161202d565b90505b6001811115611aa6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a6257611a62612001565b1a60f81b828281518110611a7857611a78612001565b60200101906001600160f81b031916908160001a90535060049490941c93611a9f816123ad565b9050611a31565b508315610e9d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106f8565b6000818152600183016020526040812054611b3c5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561065b565b50600061065b565b60008181526001830160205260408120548015611c2d576000611b686001836123c4565b8554909150600090611b7c906001906123c4565b9050818114611be1576000866000018281548110611b9c57611b9c612001565b9060005260206000200154905080876000018481548110611bbf57611bbf612001565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611bf257611bf26123d7565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061065b565b600091505061065b565b600080608083901c15611c4f5760809290921c916010015b604083901c15611c645760409290921c916008015b602083901c15611c795760209290921c916004015b601083901c15611c8e5760109290921c916002015b600883901c1561065b5760010192915050565b60405180606001604052806000801916815260200160008152602001611cf1604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b905290565b600060208284031215611d0857600080fd5b81356001600160e01b031981168114610e9d57600080fd5b600060208284031215611d3257600080fd5b5035919050565b6001600160a01b038116811461134b57600080fd5b60008060408385031215611d6157600080fd5b823591506020830135611d7381611d39565b809150509250929050565b60008083601f840112611d9057600080fd5b5081356001600160401b03811115611da757600080fd5b6020830191508360208260051b8501011115611dc257600080fd5b9250929050565b60008060208385031215611ddc57600080fd5b82356001600160401b03811115611df257600080fd5b611dfe85828601611d7e565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015611e4257835183529284019291840191600101611e26565b50909695505050505050565b600080600080600060608688031215611e6657600080fd5b8535945060208601356001600160401b0380821115611e8457600080fd5b611e9089838a01611d7e565b90965094506040880135915080821115611ea957600080fd5b50611eb688828901611d7e565b969995985093965092949392505050565b600060408284031215611ed957600080fd5b50919050565b60008060608385031215611ef257600080fd5b82359150611f038460208501611ec7565b90509250929050565b60008060408385031215611f1f57600080fd5b50508035926020909101359150565b600060408284031215611f4057600080fd5b610e9d8383611ec7565b60008060008060008060a08789031215611f6357600080fd5b8635611f6e81611d39565b955060208701356001600160401b03811115611f8957600080fd5b611f9589828a01611d7e565b9096509450506040870135611fa981611d39565b92506060870135611fb981611d39565b80925050608087013590509295509295509295565b600060208284031215611fe057600080fd5b8135610e9d81611d39565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561065b5761065b612017565b81835260006001600160fb1b0383111561205957600080fd5b8260051b80836020870137939093016020019392505050565b604081526000612086604083018688612040565b8281036020840152612099818587612040565b979650505050505050565b6000808335601e198436030181126120bb57600080fd5b8301803591506001600160401b038211156120d557600080fd5b602001915036819003821315611dc257600080fd5b86815260a060208201528460a0820152848660c0830137600060c08683018101919091526001600160a01b0394851660408301529290931660608401526001600160401b03166080830152601f909201601f1916010192915050565b6000806040838503121561215957600080fd5b82516001600160401b038116811461217057600080fd5b6020939093015192949293505050565b81358152602080830135908201526040810161065b565b6001600160a01b038316815260608101610e9d602083018480358252602090810135910152565b60005b838110156121d95781810151838201526020016121c1565b50506000910152565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b60208201526000835161222d81602a8501602088016121be565b660103b30b63ab2960cd1b602a9184019182015283516122548160318401602088016121be565b01603101949350505050565b602081526000825180602084015261227f8160408501602087016121be565b601f01601f19169190910160400192915050565b6000604082840312156122a557600080fd5b604051604081018181106001600160401b03821117156122d557634e487b7160e01b600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516123278160178501602088016121be565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516123588160288401602088016121be565b01602801949350505050565b600082516123768184602087016121be565b9190910192915050565b634e487b7160e01b600052601260045260246000fd5b808202811582820484141761065b5761065b612017565b6000816123bc576123bc612017565b506000190190565b8181038181111561065b5761065b612017565b634e487b7160e01b600052603160045260246000fdfe97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220af269df2a00739b1d11f4b9dfe6c9748aae7893d5be6658d7c88083e147efb3764736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "bulkClaimBidNames(uint256[])": { + "details": "Bulk claims the bid name. Requirements: - Must be called after ended time. - The method caller can be anyone.", + "params": { + "ids": "The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'" + } + }, + "bulkRegister(string[])": { + "details": "Claims domain names for auction. Requirements: - The method caller must be contract operator.", + "params": { + "labels": "The domain names. Eg, ['foo'] for 'foo.ron'" + }, + "returns": { + "ids": "The id corresponding for namehash of domain names." + } + }, + "createAuctionEvent((uint256,uint256))": { + "details": "Creates a new auction to sale with a specific time period. Requirements: - The method caller must be admin. Emits an event {AuctionEventSet}.", + "returns": { + "auctionId": "The auction id" + } + }, + "getAuction(uint256)": { + "details": "Returns the highest bid and address of the bidder.", + "params": { + "id": "The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'" + } + }, + "getAuctionEvent(bytes32)": { + "details": "Returns the event range of an auction." + }, + "getBidGapRatio()": { + "details": "Returns the gap ratio between 2 bids with the starting price. Value in range [0;100_00] is 0%-100%." + }, + "getRNSUnified()": { + "details": "Returns RNSUnified contract." + }, + "getRoleAdmin(bytes32)": { + "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + }, + "getRoleMember(bytes32,uint256)": { + "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information." + }, + "getRoleMemberCount(bytes32)": { + "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role." + }, + "getTreasury()": { + "details": "Returns the treasury." + }, + "grantRole(bytes32,address)": { + "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + }, + "hasRole(bytes32,address)": { + "details": "Returns `true` if `account` has been granted `role`." + }, + "listNamesForAuction(bytes32,uint256[],uint256[])": { + "details": "Lists reserved names to sale in a specified auction. Requirements: - The method caller must be contract operator. - Array length are matched and larger than 0. - Only allow to set when the domain is: + Not in any auction. + Or, in the current auction. + Or, this name is not bided. Emits an event {LabelsListed}. Note: If the name is already listed, this method replaces with a new input value.", + "params": { + "ids": "The namehashes id of domain names. Eg, namehash('foo.ron') for 'foo.ron'" + } + }, + "placeBid(uint256)": { + "details": "Places a bid for a domain name. Requirements: - The name is listed, or the auction is happening. - The msg.value is larger than the current bid price or the auction starting price. Emits an event {BidPlaced}.", + "params": { + "id": "The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'" + } + }, + "renounceRole(bytes32,address)": { + "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + }, + "reserved(uint256)": { + "details": "Checks whether a domain name is currently reserved for auction or not.", + "params": { + "id": "The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'" + } + }, + "revokeRole(bytes32,address)": { + "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + }, + "setAuctionEvent(bytes32,(uint256,uint256))": { + "details": "Updates the auction details. Requirements: - The method caller must be admin. Emits an event {AuctionEventSet}." + }, + "setBidGapRatio(uint256)": { + "details": "Sets commission ratio. Value in range [0;100_00] is 0%-100%. Requirements: - The method caller must be admin Emits an event {BidGapRatioUpdated}." + }, + "setTreasury(address)": { + "details": "Sets the treasury. Requirements: - The method caller must be admin Emits an event {TreasuryUpdated}." + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + } + }, + "events": { + "AuctionEventSet(bytes32,(uint256,uint256))": { + "details": "Emitted when an auction is set." + }, + "BidGapRatioUpdated(uint256)": { + "details": "Emitted when bid gap ratio is updated." + }, + "BidPlaced(bytes32,uint256,uint256,address,uint256,address)": { + "details": "Emitted when a bid is placed for a name." + }, + "Initialized(uint8)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "LabelsListed(bytes32,uint256[],uint256[])": { + "details": "Emitted when the labels are listed for auction." + }, + "RoleAdminChanged(bytes32,bytes32,bytes32)": { + "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + }, + "RoleGranted(bytes32,address,address)": { + "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + }, + "RoleRevoked(bytes32,address,address)": { + "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + }, + "TreasuryUpdated(address)": { + "details": "Emitted when the treasury is updated." + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyBidding\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ContractBidderIsForbidden\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EventIsNotCreatedOrAlreadyStarted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEventRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NameNotReserved\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoOneBidded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotYetEnded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NullAssignment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueryIsNotInPeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RatioIsTooLarge\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"auctionId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endedAt\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct EventRange\",\"name\":\"range\",\"type\":\"tuple\"}],\"name\":\"AuctionEventSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"BidGapRatioUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"auctionId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"bidder\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousBidder\",\"type\":\"address\"}],\"name\":\"BidPlaced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"auctionId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"startingPrices\",\"type\":\"uint256[]\"}],\"name\":\"LabelsListed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"TreasuryUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_EXPIRY_DURATION\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_AUCTION_DOMAIN_EXPIRY\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXPIRY\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"bulkClaimBidNames\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"claimedAts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"labels\",\"type\":\"string[]\"}],\"name\":\"bulkRegister\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endedAt\",\"type\":\"uint256\"}],\"internalType\":\"struct EventRange\",\"name\":\"range\",\"type\":\"tuple\"}],\"name\":\"createAuctionEvent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"auctionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getAuction\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"auctionId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"startingPrice\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"bidder\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedAt\",\"type\":\"uint256\"}],\"internalType\":\"struct INSAuction.Bid\",\"name\":\"bid\",\"type\":\"tuple\"}],\"internalType\":\"struct INSAuction.DomainAuction\",\"name\":\"auction\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"beatPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"auctionId\",\"type\":\"bytes32\"}],\"name\":\"getAuctionEvent\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endedAt\",\"type\":\"uint256\"}],\"internalType\":\"struct EventRange\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBidGapRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRNSUnified\",\"outputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"contract INSUnified\",\"name\":\"rnsUnified\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidGapRatio\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"auctionId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"startingPrices\",\"type\":\"uint256[]\"}],\"name\":\"listNamesForAuction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"placeBid\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"reserved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"auctionId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endedAt\",\"type\":\"uint256\"}],\"internalType\":\"struct EventRange\",\"name\":\"range\",\"type\":\"tuple\"}],\"name\":\"setAuctionEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"setBidGapRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"AuctionEventSet(bytes32,(uint256,uint256))\":{\"details\":\"Emitted when an auction is set.\"},\"BidGapRatioUpdated(uint256)\":{\"details\":\"Emitted when bid gap ratio is updated.\"},\"BidPlaced(bytes32,uint256,uint256,address,uint256,address)\":{\"details\":\"Emitted when a bid is placed for a name.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"LabelsListed(bytes32,uint256[],uint256[])\":{\"details\":\"Emitted when the labels are listed for auction.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"TreasuryUpdated(address)\":{\"details\":\"Emitted when the treasury is updated.\"}},\"kind\":\"dev\",\"methods\":{\"bulkClaimBidNames(uint256[])\":{\"details\":\"Bulk claims the bid name. Requirements: - Must be called after ended time. - The method caller can be anyone.\",\"params\":{\"ids\":\"The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\"}},\"bulkRegister(string[])\":{\"details\":\"Claims domain names for auction. Requirements: - The method caller must be contract operator.\",\"params\":{\"labels\":\"The domain names. Eg, ['foo'] for 'foo.ron'\"},\"returns\":{\"ids\":\"The id corresponding for namehash of domain names.\"}},\"createAuctionEvent((uint256,uint256))\":{\"details\":\"Creates a new auction to sale with a specific time period. Requirements: - The method caller must be admin. Emits an event {AuctionEventSet}.\",\"returns\":{\"auctionId\":\"The auction id\"}},\"getAuction(uint256)\":{\"details\":\"Returns the highest bid and address of the bidder.\",\"params\":{\"id\":\"The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\"}},\"getAuctionEvent(bytes32)\":{\"details\":\"Returns the event range of an auction.\"},\"getBidGapRatio()\":{\"details\":\"Returns the gap ratio between 2 bids with the starting price. Value in range [0;100_00] is 0%-100%.\"},\"getRNSUnified()\":{\"details\":\"Returns RNSUnified contract.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"getTreasury()\":{\"details\":\"Returns the treasury.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"listNamesForAuction(bytes32,uint256[],uint256[])\":{\"details\":\"Lists reserved names to sale in a specified auction. Requirements: - The method caller must be contract operator. - Array length are matched and larger than 0. - Only allow to set when the domain is: + Not in any auction. + Or, in the current auction. + Or, this name is not bided. Emits an event {LabelsListed}. Note: If the name is already listed, this method replaces with a new input value.\",\"params\":{\"ids\":\"The namehashes id of domain names. Eg, namehash('foo.ron') for 'foo.ron'\"}},\"placeBid(uint256)\":{\"details\":\"Places a bid for a domain name. Requirements: - The name is listed, or the auction is happening. - The msg.value is larger than the current bid price or the auction starting price. Emits an event {BidPlaced}.\",\"params\":{\"id\":\"The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"reserved(uint256)\":{\"details\":\"Checks whether a domain name is currently reserved for auction or not.\",\"params\":{\"id\":\"The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\"}},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAuctionEvent(bytes32,(uint256,uint256))\":{\"details\":\"Updates the auction details. Requirements: - The method caller must be admin. Emits an event {AuctionEventSet}.\"},\"setBidGapRatio(uint256)\":{\"details\":\"Sets commission ratio. Value in range [0;100_00] is 0%-100%. Requirements: - The method caller must be admin Emits an event {BidGapRatioUpdated}.\"},\"setTreasury(address)\":{\"details\":\"Sets the treasury. Requirements: - The method caller must be admin Emits an event {TreasuryUpdated}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"stateVariables\":{\"DOMAIN_EXPIRY_DURATION\":{\"details\":\"The expiry duration of a domain after transferring to bidder.\"},\"MAX_AUCTION_DOMAIN_EXPIRY\":{\"details\":\"The maximum expiry duration of a domain after transferring to bidder.\"},\"MAX_EXPIRY\":{\"details\":\"The maximum expiry duration\"},\"MAX_PERCENTAGE\":{\"details\":\"Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\"},\"OPERATOR_ROLE\":{\"details\":\"Returns the operator role.\"},\"____gap\":{\"details\":\"Gap for upgradeability.\"},\"_auctionRange\":{\"details\":\"Mapping from auction Id => event range\"},\"_bidGapRatio\":{\"details\":\"The gap ratio between 2 bids with the starting price.\"},\"_domainAuction\":{\"details\":\"Mapping from id of domain names => auction detail.\"},\"_reserved\":{\"details\":\"Mapping from id => bool reserved status\"},\"_rnsUnified\":{\"details\":\"The RNSUnified contract.\"},\"_treasury\":{\"details\":\"The treasury.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createAuctionEvent((uint256,uint256))\":{\"notice\":\"Please use the method `setAuctionNames` to list all the reserved names.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RNSAuction.sol\":\"RNSAuction\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```solidity\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```solidity\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\\n * to enforce additional security measures for this role.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0dd6e52cb394d7f5abe5dca2d4908a6be40417914720932de757de34a99ab87f\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlEnumerable.sol\\\";\\nimport \\\"./AccessControl.sol\\\";\\nimport \\\"../utils/structs/EnumerableSet.sol\\\";\\n\\n/**\\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\\n */\\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\\n using EnumerableSet for EnumerableSet.AddressSet;\\n\\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {\\n return _roleMembers[role].at(index);\\n }\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) public view virtual override returns (uint256) {\\n return _roleMembers[role].length();\\n }\\n\\n /**\\n * @dev Overload {_grantRole} to track enumerable memberships\\n */\\n function _grantRole(bytes32 role, address account) internal virtual override {\\n super._grantRole(role, account);\\n _roleMembers[role].add(account);\\n }\\n\\n /**\\n * @dev Overload {_revokeRole} to track enumerable memberships\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual override {\\n super._revokeRole(role, account);\\n _roleMembers[role].remove(account);\\n }\\n}\\n\",\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toString(int256 value) internal pure returns (string memory) {\\n return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/structs/BitMaps.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/BitMaps.sol)\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing uint256 to bool mapping in a compact and efficient way, providing the keys are sequential.\\n * Largely inspired by Uniswap's https://github.com/Uniswap/merkle-distributor/blob/master/contracts/MerkleDistributor.sol[merkle-distributor].\\n */\\nlibrary BitMaps {\\n struct BitMap {\\n mapping(uint256 => uint256) _data;\\n }\\n\\n /**\\n * @dev Returns whether the bit at `index` is set.\\n */\\n function get(BitMap storage bitmap, uint256 index) internal view returns (bool) {\\n uint256 bucket = index >> 8;\\n uint256 mask = 1 << (index & 0xff);\\n return bitmap._data[bucket] & mask != 0;\\n }\\n\\n /**\\n * @dev Sets the bit at `index` to the boolean `value`.\\n */\\n function setTo(BitMap storage bitmap, uint256 index, bool value) internal {\\n if (value) {\\n set(bitmap, index);\\n } else {\\n unset(bitmap, index);\\n }\\n }\\n\\n /**\\n * @dev Sets the bit at `index`.\\n */\\n function set(BitMap storage bitmap, uint256 index) internal {\\n uint256 bucket = index >> 8;\\n uint256 mask = 1 << (index & 0xff);\\n bitmap._data[bucket] |= mask;\\n }\\n\\n /**\\n * @dev Unsets the bit at `index`.\\n */\\n function unset(BitMap storage bitmap, uint256 index) internal {\\n uint256 bucket = index >> 8;\\n uint256 mask = 1 << (index & 0xff);\\n bitmap._data[bucket] &= ~mask;\\n }\\n}\\n\",\"keccak256\":\"0xac946730f979a447732a5bed58aa30c995ae666c3e1663b312ab5fd11dbe3eb6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)\\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```solidity\\n * contract Example {\\n * // Add the library methods\\n * using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n * // Declare a set state variable\\n * EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n *\\n * [WARNING]\\n * ====\\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\\n * unusable.\\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\\n *\\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\\n * array of EnumerableSet.\\n * ====\\n */\\nlibrary EnumerableSet {\\n // To implement this library for multiple types with as little code\\n // repetition as possible, we write it in terms of a generic Set type with\\n // bytes32 values.\\n // The Set implementation uses private functions, and user-facing\\n // implementations (such as AddressSet) are just wrappers around the\\n // underlying Set.\\n // This means that we can only create new EnumerableSets for types that fit\\n // in bytes32.\\n\\n struct Set {\\n // Storage of set values\\n bytes32[] _values;\\n // Position of the value in the `values` array, plus 1 because index 0\\n // means a value is not in the set.\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n // The value is stored at length-1, but we add 1 to all indexes\\n // and use 0 as a sentinel value\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n // We read and store the value's index to prevent multiple reads from the same storage slot\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n // Equivalent to contains(set, value)\\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n // the array, and then remove the last element (sometimes called as 'swap and pop').\\n // This modifies the order of the array, as noted in {at}.\\n\\n uint256 toDeleteIndex = valueIndex - 1;\\n uint256 lastIndex = set._values.length - 1;\\n\\n if (lastIndex != toDeleteIndex) {\\n bytes32 lastValue = set._values[lastIndex];\\n\\n // Move the last value to the index where the value to delete is\\n set._values[toDeleteIndex] = lastValue;\\n // Update the index for the moved value\\n set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex\\n }\\n\\n // Delete the slot where the moved value was stored\\n set._values.pop();\\n\\n // Delete the index for the deleted slot\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n return set._indexes[value] != 0;\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n return set._values[index];\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function _values(Set storage set) private view returns (bytes32[] memory) {\\n return set._values;\\n }\\n\\n // Bytes32Set\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _add(set._inner, value);\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _remove(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n return _contains(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n return _at(set._inner, index);\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n bytes32[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // AddressSet\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(AddressSet storage set, address value) internal returns (bool) {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(AddressSet storage set, address value) internal returns (bool) {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(AddressSet storage set, address value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(AddressSet storage set) internal view returns (address[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n address[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // UintSet\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n return uint256(_at(set._inner, index));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(UintSet storage set) internal view returns (uint256[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n uint256[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\"},\"src/RNSAuction.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { AccessControlEnumerable } from \\\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\\\";\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\nimport { BitMaps } from \\\"@openzeppelin/contracts/utils/structs/BitMaps.sol\\\";\\nimport { INSUnified, INSAuction } from \\\"./interfaces/INSAuction.sol\\\";\\nimport { LibSafeRange } from \\\"./libraries/math/LibSafeRange.sol\\\";\\nimport { LibRNSDomain } from \\\"./libraries/LibRNSDomain.sol\\\";\\nimport { LibEventRange, EventRange } from \\\"./libraries/LibEventRange.sol\\\";\\nimport { RONTransferHelper } from \\\"./libraries/transfers/RONTransferHelper.sol\\\";\\n\\ncontract RNSAuction is Initializable, AccessControlEnumerable, INSAuction {\\n using LibSafeRange for uint256;\\n using BitMaps for BitMaps.BitMap;\\n using LibEventRange for EventRange;\\n\\n /// @inheritdoc INSAuction\\n uint64 public constant MAX_EXPIRY = type(uint64).max;\\n /// @inheritdoc INSAuction\\n uint256 public constant MAX_PERCENTAGE = 100_00;\\n /// @inheritdoc INSAuction\\n uint64 public constant DOMAIN_EXPIRY_DURATION = 365 days;\\n /// @inheritdoc INSAuction\\n uint64 public constant MAX_AUCTION_DOMAIN_EXPIRY = 365 days * 3;\\n /// @inheritdoc INSAuction\\n bytes32 public constant OPERATOR_ROLE = keccak256(\\\"OPERATOR_ROLE\\\");\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n /// @dev The RNSUnified contract.\\n INSUnified internal _rnsUnified;\\n /// @dev Mapping from auction Id => event range\\n mapping(bytes32 auctionId => EventRange) internal _auctionRange;\\n /// @dev Mapping from id of domain names => auction detail.\\n mapping(uint256 id => DomainAuction) internal _domainAuction;\\n\\n /// @dev The treasury.\\n address payable internal _treasury;\\n /// @dev The gap ratio between 2 bids with the starting price.\\n uint256 internal _bidGapRatio;\\n /// @dev Mapping from id => bool reserved status\\n BitMaps.BitMap internal _reserved;\\n\\n modifier whenNotStarted(bytes32 auctionId) {\\n _requireNotStarted(auctionId);\\n _;\\n }\\n\\n modifier onlyValidEventRange(EventRange calldata range) {\\n _requireValidEventRange(range);\\n _;\\n }\\n\\n constructor() payable {\\n _disableInitializers();\\n }\\n\\n function initialize(\\n address admin,\\n address[] calldata operators,\\n INSUnified rnsUnified,\\n address payable treasury,\\n uint256 bidGapRatio\\n ) external initializer {\\n _setTreasury(treasury);\\n _setBidGapRatio(bidGapRatio);\\n _setupRole(DEFAULT_ADMIN_ROLE, admin);\\n\\n uint256 length = operators.length;\\n bytes32 operatorRole = OPERATOR_ROLE;\\n\\n for (uint256 i; i < length;) {\\n _setupRole(operatorRole, operators[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n _rnsUnified = rnsUnified;\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function bulkRegister(string[] calldata labels) external onlyRole(OPERATOR_ROLE) returns (uint256[] memory ids) {\\n uint256 length = labels.length;\\n if (length == 0) revert InvalidArrayLength();\\n ids = new uint256[](length);\\n INSUnified rnsUnified = _rnsUnified;\\n uint256 parentId = LibRNSDomain.RON_ID;\\n uint64 domainExpiryDuration = DOMAIN_EXPIRY_DURATION;\\n\\n for (uint256 i; i < length;) {\\n (, ids[i]) = rnsUnified.mint(parentId, labels[i], address(0x0), address(this), domainExpiryDuration);\\n _reserved.set(ids[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function reserved(uint256 id) public view returns (bool) {\\n return _reserved.get(id);\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function createAuctionEvent(EventRange calldata range)\\n external\\n onlyRole(DEFAULT_ADMIN_ROLE)\\n onlyValidEventRange(range)\\n returns (bytes32 auctionId)\\n {\\n auctionId = keccak256(abi.encode(_msgSender(), range));\\n _auctionRange[auctionId] = range;\\n emit AuctionEventSet(auctionId, range);\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function setAuctionEvent(bytes32 auctionId, EventRange calldata range)\\n external\\n onlyRole(DEFAULT_ADMIN_ROLE)\\n onlyValidEventRange(range)\\n whenNotStarted(auctionId)\\n {\\n _auctionRange[auctionId] = range;\\n emit AuctionEventSet(auctionId, range);\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function getAuctionEvent(bytes32 auctionId) public view returns (EventRange memory) {\\n return _auctionRange[auctionId];\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function listNamesForAuction(bytes32 auctionId, uint256[] calldata ids, uint256[] calldata startingPrices)\\n external\\n onlyRole(OPERATOR_ROLE)\\n whenNotStarted(auctionId)\\n {\\n uint256 length = ids.length;\\n if (length == 0 || length != startingPrices.length) revert InvalidArrayLength();\\n uint256 id;\\n bytes32 mAuctionId;\\n DomainAuction storage sAuction;\\n\\n for (uint256 i; i < length;) {\\n id = ids[i];\\n if (!reserved(id)) revert NameNotReserved();\\n\\n sAuction = _domainAuction[id];\\n mAuctionId = sAuction.auctionId;\\n if (!(mAuctionId == 0 || mAuctionId == auctionId || sAuction.bid.timestamp == 0)) {\\n revert AlreadyBidding();\\n }\\n\\n sAuction.auctionId = auctionId;\\n sAuction.startingPrice = startingPrices[i];\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit LabelsListed(auctionId, ids, startingPrices);\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function placeBid(uint256 id) external payable {\\n DomainAuction memory auction = _domainAuction[id];\\n EventRange memory range = _auctionRange[auction.auctionId];\\n uint256 beatPrice = _getBeatPrice(auction, range);\\n\\n if (!range.isInPeriod()) revert QueryIsNotInPeriod();\\n if (msg.value < beatPrice) revert InsufficientAmount();\\n address payable bidder = payable(_msgSender());\\n // check whether the bidder can receive RON\\n if (bidder != tx.origin) revert ContractBidderIsForbidden();\\n address payable prvBidder = auction.bid.bidder;\\n uint256 prvPrice = auction.bid.price;\\n\\n Bid storage sBid = _domainAuction[id].bid;\\n sBid.price = msg.value;\\n sBid.bidder = bidder;\\n sBid.timestamp = block.timestamp;\\n emit BidPlaced(auction.auctionId, id, msg.value, bidder, prvPrice, prvBidder);\\n\\n // refund for previous bidder\\n if (prvPrice != 0) RONTransferHelper.safeTransfer(prvBidder, prvPrice);\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function bulkClaimBidNames(uint256[] calldata ids) external returns (uint256[] memory claimedAts) {\\n uint256 id;\\n uint256 accumulatedRON;\\n EventRange memory range;\\n DomainAuction memory auction;\\n uint256 length = ids.length;\\n claimedAts = new uint256[](length);\\n INSUnified rnsUnified = _rnsUnified;\\n uint64 expiry = uint64(block.timestamp.addWithUpperbound(DOMAIN_EXPIRY_DURATION, MAX_EXPIRY));\\n\\n for (uint256 i; i < length;) {\\n id = ids[i];\\n auction = _domainAuction[id];\\n range = _auctionRange[auction.auctionId];\\n\\n if (auction.bid.claimedAt == 0) {\\n if (!range.isEnded()) revert NotYetEnded();\\n if (auction.bid.timestamp == 0) revert NoOneBidded();\\n\\n accumulatedRON += auction.bid.price;\\n rnsUnified.setExpiry(id, expiry);\\n rnsUnified.transferFrom(address(this), auction.bid.bidder, id);\\n\\n _domainAuction[id].bid.claimedAt = claimedAts[i] = block.timestamp;\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n RONTransferHelper.safeTransfer(_treasury, accumulatedRON);\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function getRNSUnified() external view returns (INSUnified) {\\n return _rnsUnified;\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function getTreasury() external view returns (address) {\\n return _treasury;\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function getBidGapRatio() external view returns (uint256) {\\n return _bidGapRatio;\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function setTreasury(address payable addr) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setTreasury(addr);\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n\\n function setBidGapRatio(uint256 ratio) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setBidGapRatio(ratio);\\n }\\n\\n /**\\n * @inheritdoc INSAuction\\n */\\n function getAuction(uint256 id) public view returns (DomainAuction memory auction, uint256 beatPrice) {\\n auction = _domainAuction[id];\\n EventRange memory range = getAuctionEvent(auction.auctionId);\\n beatPrice = _getBeatPrice(auction, range);\\n }\\n\\n /**\\n * @dev Helper method to set treasury.\\n *\\n * Emits an event {TreasuryUpdated}.\\n */\\n function _setTreasury(address payable addr) internal {\\n if (addr == address(0)) revert NullAssignment();\\n _treasury = addr;\\n emit TreasuryUpdated(addr);\\n }\\n\\n /**\\n * @dev Helper method to set bid gap ratio.\\n *\\n * Emits an event {BidGapRatioUpdated}.\\n */\\n function _setBidGapRatio(uint256 ratio) internal {\\n if (ratio > MAX_PERCENTAGE) revert RatioIsTooLarge();\\n _bidGapRatio = ratio;\\n emit BidGapRatioUpdated(ratio);\\n }\\n\\n /**\\n * @dev Helper method to get beat price.\\n */\\n function _getBeatPrice(DomainAuction memory auction, EventRange memory range)\\n internal\\n view\\n returns (uint256 beatPrice)\\n {\\n beatPrice = Math.max(auction.startingPrice, auction.bid.price);\\n // Beats price increases if domain is already bided and the event is not yet ended.\\n if (auction.bid.price != 0 && !range.isEnded()) {\\n beatPrice += Math.mulDiv(auction.startingPrice, _bidGapRatio, MAX_PERCENTAGE);\\n }\\n }\\n\\n /**\\n * @dev Helper method to ensure event range is valid.\\n */\\n function _requireValidEventRange(EventRange calldata range) internal view {\\n if (!(range.valid() && range.isNotYetStarted())) revert InvalidEventRange();\\n }\\n\\n /**\\n * @dev Helper method to ensure the auction is not yet started or not created.\\n */\\n function _requireNotStarted(bytes32 auctionId) internal view {\\n if (!_auctionRange[auctionId].isNotYetStarted()) revert EventIsNotCreatedOrAlreadyStarted();\\n }\\n}\\n\",\"keccak256\":\"0x965d6b3e075fa6a7398c343195416f551fca830c7e4b731554dc73aa8bafa427\",\"license\":\"MIT\"},\"src/interfaces/INSAuction.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\nimport { EventRange } from \\\"../libraries/LibEventRange.sol\\\";\\n\\ninterface INSAuction {\\n error NotYetEnded();\\n error NoOneBidded();\\n error NullAssignment();\\n error AlreadyBidding();\\n error RatioIsTooLarge();\\n error NameNotReserved();\\n error InvalidEventRange();\\n error QueryIsNotInPeriod();\\n error InsufficientAmount();\\n error InvalidArrayLength();\\n error ContractBidderIsForbidden();\\n error EventIsNotCreatedOrAlreadyStarted();\\n\\n struct Bid {\\n address payable bidder;\\n uint256 price;\\n uint256 timestamp;\\n uint256 claimedAt;\\n }\\n\\n struct DomainAuction {\\n bytes32 auctionId;\\n uint256 startingPrice;\\n Bid bid;\\n }\\n\\n /// @dev Emitted when an auction is set.\\n event AuctionEventSet(bytes32 indexed auctionId, EventRange range);\\n /// @dev Emitted when the labels are listed for auction.\\n event LabelsListed(bytes32 indexed auctionId, uint256[] ids, uint256[] startingPrices);\\n /// @dev Emitted when a bid is placed for a name.\\n event BidPlaced(\\n bytes32 indexed auctionId,\\n uint256 indexed id,\\n uint256 price,\\n address payable bidder,\\n uint256 previousPrice,\\n address previousBidder\\n );\\n /// @dev Emitted when the treasury is updated.\\n event TreasuryUpdated(address indexed addr);\\n /// @dev Emitted when bid gap ratio is updated.\\n event BidGapRatioUpdated(uint256 ratio);\\n\\n /**\\n * @dev The maximum expiry duration\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev The maximum expiry duration of a domain after transferring to bidder.\\n */\\n function MAX_AUCTION_DOMAIN_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the operator role.\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\\n */\\n function MAX_PERCENTAGE() external pure returns (uint256);\\n\\n /**\\n * @dev The expiry duration of a domain after transferring to bidder.\\n */\\n function DOMAIN_EXPIRY_DURATION() external pure returns (uint64);\\n\\n /**\\n * @dev Claims domain names for auction.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n *\\n * @param labels The domain names. Eg, ['foo'] for 'foo.ron'\\n * @return ids The id corresponding for namehash of domain names.\\n */\\n function bulkRegister(string[] calldata labels) external returns (uint256[] memory ids);\\n\\n /**\\n * @dev Checks whether a domain name is currently reserved for auction or not.\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function reserved(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Creates a new auction to sale with a specific time period.\\n *\\n * Requirements:\\n * - The method caller must be admin.\\n *\\n * Emits an event {AuctionEventSet}.\\n *\\n * @return auctionId The auction id\\n * @notice Please use the method `setAuctionNames` to list all the reserved names.\\n */\\n function createAuctionEvent(EventRange calldata range) external returns (bytes32 auctionId);\\n\\n /**\\n * @dev Updates the auction details.\\n *\\n * Requirements:\\n * - The method caller must be admin.\\n *\\n * Emits an event {AuctionEventSet}.\\n */\\n function setAuctionEvent(bytes32 auctionId, EventRange calldata range) external;\\n\\n /**\\n * @dev Returns the event range of an auction.\\n */\\n function getAuctionEvent(bytes32 auctionId) external view returns (EventRange memory);\\n\\n /**\\n * @dev Lists reserved names to sale in a specified auction.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n * - Array length are matched and larger than 0.\\n * - Only allow to set when the domain is:\\n * + Not in any auction.\\n * + Or, in the current auction.\\n * + Or, this name is not bided.\\n *\\n * Emits an event {LabelsListed}.\\n *\\n * Note: If the name is already listed, this method replaces with a new input value.\\n *\\n * @param ids The namehashes id of domain names. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function listNamesForAuction(bytes32 auctionId, uint256[] calldata ids, uint256[] calldata startingPrices) external;\\n\\n /**\\n * @dev Places a bid for a domain name.\\n *\\n * Requirements:\\n * - The name is listed, or the auction is happening.\\n * - The msg.value is larger than the current bid price or the auction starting price.\\n *\\n * Emits an event {BidPlaced}.\\n *\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function placeBid(uint256 id) external payable;\\n\\n /**\\n * @dev Returns the highest bid and address of the bidder.\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function getAuction(uint256 id) external view returns (DomainAuction memory, uint256 beatPrice);\\n\\n /**\\n * @dev Bulk claims the bid name.\\n *\\n * Requirements:\\n * - Must be called after ended time.\\n * - The method caller can be anyone.\\n *\\n * @param ids The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function bulkClaimBidNames(uint256[] calldata ids) external returns (uint256[] memory claimedAts);\\n\\n /**\\n * @dev Returns the treasury.\\n */\\n function getTreasury() external view returns (address);\\n\\n /**\\n * @dev Returns the gap ratio between 2 bids with the starting price. Value in range [0;100_00] is 0%-100%.\\n */\\n function getBidGapRatio() external view returns (uint256);\\n\\n /**\\n * @dev Sets the treasury.\\n *\\n * Requirements:\\n * - The method caller must be admin\\n *\\n * Emits an event {TreasuryUpdated}.\\n */\\n function setTreasury(address payable) external;\\n\\n /**\\n * @dev Sets commission ratio. Value in range [0;100_00] is 0%-100%.\\n *\\n * Requirements:\\n * - The method caller must be admin\\n *\\n * Emits an event {BidGapRatioUpdated}.\\n */\\n function setBidGapRatio(uint256) external;\\n\\n /**\\n * @dev Returns RNSUnified contract.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n}\\n\",\"keccak256\":\"0x451e7a2f2e5c1c62e1b14ed011a879639a748e24fde0c1fcf27f691bb7946660\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0xaef1c58bb7c8688d6677a1c2739c0dc9e645ca5c64dd875be2f2b7a318a11406\",\"license\":\"MIT\"},\"src/libraries/LibEventRange.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct EventRange {\\n uint256 startedAt;\\n uint256 endedAt;\\n}\\n\\nlibrary LibEventRange {\\n /**\\n * @dev Checks whether the event range is valid.\\n */\\n function valid(EventRange calldata range) internal pure returns (bool) {\\n return range.startedAt <= range.endedAt;\\n }\\n\\n /**\\n * @dev Returns whether the current range is not yet started.\\n */\\n function isNotYetStarted(EventRange memory range) internal view returns (bool) {\\n return block.timestamp < range.startedAt;\\n }\\n\\n /**\\n * @dev Returns whether the current range is ended or not.\\n */\\n function isEnded(EventRange memory range) internal view returns (bool) {\\n return range.endedAt <= block.timestamp;\\n }\\n\\n /**\\n * @dev Returns whether the current block is in period.\\n */\\n function isInPeriod(EventRange memory range) internal view returns (bool) {\\n return range.startedAt <= block.timestamp && block.timestamp < range.endedAt;\\n }\\n}\\n\",\"keccak256\":\"0x95bf015c4245919cbcbcd810dd597fdb23eb4e58b62df8ef74b1c8c60a969bea\",\"license\":\"MIT\"},\"src/libraries/LibRNSDomain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nlibrary LibRNSDomain {\\n /// @dev Value equals to namehash('ron')\\n uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688;\\n /// @dev Value equals to namehash('addr.reverse')\\n uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n /**\\n * @dev Calculate the corresponding id given parentId and label.\\n */\\n function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, parentId)\\n mstore(0x20, keccak256(add(label, 32), mload(label)))\\n id := keccak256(0x0, 64)\\n }\\n }\\n\\n /**\\n * @dev Calculates the hash of the label.\\n */\\n function hashLabel(string memory label) internal pure returns (bytes32 hashed) {\\n assembly (\\\"memory-safe\\\") {\\n hashed := keccak256(add(label, 32), mload(label))\\n }\\n }\\n\\n /**\\n * @dev Calculate the RNS namehash of a str.\\n */\\n function namehash(string memory str) internal pure returns (bytes32 hashed) {\\n // notice: this method is case-sensitive, ensure the string is lowercased before calling this method\\n assembly (\\\"memory-safe\\\") {\\n // load str length\\n let len := mload(str)\\n // returns bytes32(0x0) if length is zero\\n if iszero(iszero(len)) {\\n let hashedLen\\n // compute pointer to str[0]\\n let head := add(str, 32)\\n // compute pointer to str[length - 1]\\n let tail := add(head, sub(len, 1))\\n // cleanup dirty bytes if contains any\\n mstore(0x0, 0)\\n // loop backwards from `tail` to `head`\\n for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } {\\n // check if `i` is `head`\\n let isHead := eq(i, head)\\n // check if `str[i-1]` is \\\".\\\"\\n // `0x2e` == bytes1(\\\".\\\")\\n let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e)\\n if or(isHead, isDotNext) {\\n // size = distance(length, i) - hashedLength + 1\\n let size := add(sub(sub(tail, i), hashedLen), 1)\\n mstore(0x20, keccak256(i, size))\\n mstore(0x0, keccak256(0x0, 64))\\n // skip \\\".\\\" thereby + 1\\n hashedLen := add(hashedLen, add(size, 1))\\n }\\n }\\n }\\n hashed := mload(0x0)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x715029b2b420c6ec00bc1f939b837acf45d247fde8426089575b0e7b5e84518b\",\"license\":\"MIT\"},\"src/libraries/math/LibSafeRange.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nlibrary LibSafeRange {\\n function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n unchecked {\\n c = a + b;\\n if (c < a) return type(uint256).max;\\n }\\n }\\n\\n /**\\n * @dev Returns value of a + b; in case result is larger than upperbound, upperbound is returned.\\n */\\n function addWithUpperbound(uint256 a, uint256 b, uint256 ceil) internal pure returns (uint256 c) {\\n if (a > ceil || b > ceil) return ceil;\\n c = add(a, b);\\n if (c > ceil) return ceil;\\n }\\n}\\n\",\"keccak256\":\"0x12cf5f592a2d80b9c1b0ea11b8fe2b3ed42fc6d62303ba667edc56464baa8810\",\"license\":\"MIT\"},\"src/libraries/transfers/RONTransferHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\n/**\\n * @title RONTransferHelper\\n */\\nlibrary RONTransferHelper {\\n using Strings for *;\\n\\n /**\\n * @dev Transfers RON and wraps result for the method caller to a recipient.\\n */\\n function safeTransfer(address payable _to, uint256 _value) internal {\\n bool _success = send(_to, _value);\\n if (!_success) {\\n revert(\\n string.concat(\\\"TransferHelper: could not transfer RON to \\\", _to.toHexString(), \\\" value \\\", _value.toHexString())\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns whether the call was success.\\n * Note: this function should use with the `ReentrancyGuard`.\\n */\\n function send(address payable _to, uint256 _value) internal returns (bool _success) {\\n (_success,) = _to.call{ value: _value }(new bytes(0));\\n }\\n}\\n\",\"keccak256\":\"0x733e60374ee0a33d0da2ee24976b893ca6b6d9764243b175e1ac8025240394da\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { xor as ^ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction xor(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) ^ ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0x2e42fbba358c470ff6b57268367d248f0e2fcf8d7142d762688f7aef5efae7ee\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182592, + "numDeployments": 3, + "storageLayout": { + "storage": [ + { + "astId": 49702, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 49705, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 48175, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_roles", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_struct(RoleData)48170_storage)" + }, + { + "astId": 48485, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_roleMembers", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)54054_storage)" + }, + { + "astId": 58721, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "____gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 58725, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_rnsUnified", + "offset": 0, + "slot": "53", + "type": "t_contract(INSUnified)65048" + }, + { + "astId": 58731, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_auctionRange", + "offset": 0, + "slot": "54", + "type": "t_mapping(t_bytes32,t_struct(EventRange)65968_storage)" + }, + { + "astId": 58737, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_domainAuction", + "offset": 0, + "slot": "55", + "type": "t_mapping(t_uint256,t_struct(DomainAuction)64221_storage)" + }, + { + "astId": 58740, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_treasury", + "offset": 0, + "slot": "56", + "type": "t_address_payable" + }, + { + "astId": 58743, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_bidGapRatio", + "offset": 0, + "slot": "57", + "type": "t_uint256" + }, + { + "astId": 58747, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_reserved", + "offset": 0, + "slot": "58", + "type": "t_struct(BitMap)53598_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(INSUnified)65048": { + "encoding": "inplace", + "label": "contract INSUnified", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)54054_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct EnumerableSet.AddressSet)", + "numberOfBytes": "32", + "value": "t_struct(AddressSet)54054_storage" + }, + "t_mapping(t_bytes32,t_struct(EventRange)65968_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct EventRange)", + "numberOfBytes": "32", + "value": "t_struct(EventRange)65968_storage" + }, + "t_mapping(t_bytes32,t_struct(RoleData)48170_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct AccessControl.RoleData)", + "numberOfBytes": "32", + "value": "t_struct(RoleData)48170_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_struct(DomainAuction)64221_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct INSAuction.DomainAuction)", + "numberOfBytes": "32", + "value": "t_struct(DomainAuction)64221_storage" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(AddressSet)54054_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.AddressSet", + "numberOfBytes": "64", + "members": [ + { + "astId": 54053, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_inner", + "offset": 0, + "slot": "0", + "type": "t_struct(Set)53739_storage" + } + ] + }, + "t_struct(Bid)64213_storage": { + "encoding": "inplace", + "label": "struct INSAuction.Bid", + "numberOfBytes": "128", + "members": [ + { + "astId": 64206, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "bidder", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 64208, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "price", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 64210, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "timestamp", + "offset": 0, + "slot": "2", + "type": "t_uint256" + }, + { + "astId": 64212, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "claimedAt", + "offset": 0, + "slot": "3", + "type": "t_uint256" + } + ] + }, + "t_struct(BitMap)53598_storage": { + "encoding": "inplace", + "label": "struct BitMaps.BitMap", + "numberOfBytes": "32", + "members": [ + { + "astId": 53597, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_data", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_uint256,t_uint256)" + } + ] + }, + "t_struct(DomainAuction)64221_storage": { + "encoding": "inplace", + "label": "struct INSAuction.DomainAuction", + "numberOfBytes": "192", + "members": [ + { + "astId": 64215, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "auctionId", + "offset": 0, + "slot": "0", + "type": "t_bytes32" + }, + { + "astId": 64217, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "startingPrice", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 64220, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "bid", + "offset": 0, + "slot": "2", + "type": "t_struct(Bid)64213_storage" + } + ] + }, + "t_struct(EventRange)65968_storage": { + "encoding": "inplace", + "label": "struct EventRange", + "numberOfBytes": "64", + "members": [ + { + "astId": 65965, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "startedAt", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 65967, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "endedAt", + "offset": 0, + "slot": "1", + "type": "t_uint256" + } + ] + }, + "t_struct(RoleData)48170_storage": { + "encoding": "inplace", + "label": "struct AccessControl.RoleData", + "numberOfBytes": "64", + "members": [ + { + "astId": 48167, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "members", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 48169, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "adminRole", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ] + }, + "t_struct(Set)53739_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.Set", + "numberOfBytes": "64", + "members": [ + { + "astId": 53734, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_values", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "astId": 53738, + "contract": "src/RNSAuction.sol:RNSAuction", + "label": "_indexes", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "timestamp": 1698122937, + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "createAuctionEvent((uint256,uint256))": { + "notice": "Please use the method `setAuctionNames` to list all the reserved names." + } + } + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RNSAuctionProxy.json b/deployments/ronin-testnet/RNSAuctionProxy.json new file mode 100644 index 00000000..965ecb3c --- /dev/null +++ b/deployments/ronin-testnet/RNSAuctionProxy.json @@ -0,0 +1,120 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "address": "0xb962eddeD164f55D136E491a3022246815e1B5A8", + "args": "0xec14cf37000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c0700000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07", + "blockNumber": 21224275, + "bytecode": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "chainId": 2021, + "contractName": "TransparentUpgradeableProxy", + "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.", + "methods": { + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + } + }, + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is changed." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Emitted when the beacon is changed.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\\n * does not implement this interface directly, and some of its functions are implemented by an internal dispatch\\n * mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\\n * include them in the ABI so this interface must be used to interact with it.\\n */\\ninterface ITransparentUpgradeableProxy is IERC1967 {\\n function admin() external view returns (address);\\n\\n function implementation() external view returns (address);\\n\\n function changeAdmin(address) external;\\n\\n function upgradeTo(address) external;\\n\\n function upgradeToAndCall(address, bytes memory) external payable;\\n}\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n *\\n * NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\\n * inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch\\n * mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\\n * fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\\n * implementation.\\n *\\n * WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler\\n * will not check that there are no selector conflicts, due to the note above. A selector clash between any new function\\n * and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could\\n * render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n *\\n * CAUTION: This modifier is deprecated, as it could cause issues if the modified function has arguments, and the\\n * implementation provides a function with the same selector.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior\\n */\\n function _fallback() internal virtual override {\\n if (msg.sender == _getAdmin()) {\\n bytes memory ret;\\n bytes4 selector = msg.sig;\\n if (selector == ITransparentUpgradeableProxy.upgradeTo.selector) {\\n ret = _dispatchUpgradeTo();\\n } else if (selector == ITransparentUpgradeableProxy.upgradeToAndCall.selector) {\\n ret = _dispatchUpgradeToAndCall();\\n } else if (selector == ITransparentUpgradeableProxy.changeAdmin.selector) {\\n ret = _dispatchChangeAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.admin.selector) {\\n ret = _dispatchAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.implementation.selector) {\\n ret = _dispatchImplementation();\\n } else {\\n revert(\\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n }\\n assembly {\\n return(add(ret, 0x20), mload(ret))\\n }\\n } else {\\n super._fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function _dispatchAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address admin = _getAdmin();\\n return abi.encode(admin);\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function _dispatchImplementation() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address implementation = _implementation();\\n return abi.encode(implementation);\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _dispatchChangeAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newAdmin = abi.decode(msg.data[4:], (address));\\n _changeAdmin(newAdmin);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n */\\n function _dispatchUpgradeTo() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newImplementation = abi.decode(msg.data[4:], (address));\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n */\\n function _dispatchUpgradeToAndCall() private returns (bytes memory) {\\n (address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));\\n _upgradeToAndCall(newImplementation, data, true);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * CAUTION: This function is deprecated. Use {ERC1967Upgrade-_getAdmin} instead.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev To keep this contract fully transparent, all `ifAdmin` functions must be payable. This helper is here to\\n * emulate some proxy functions being non-payable while still allowing value to pass through.\\n */\\n function _requireZeroValue() private {\\n require(msg.value == 0);\\n }\\n}\\n\",\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n struct StringSlot {\\n string value;\\n }\\n\\n struct BytesSlot {\\n bytes value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n */\\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n */\\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n */\\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n */\\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182498, + "numDeployments": 1, + "storageLayout": { + "storage": [], + "types": {} + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RNSDomainPriceLogic.json b/deployments/ronin-testnet/RNSDomainPriceLogic.json new file mode 100644 index 00000000..0e718779 --- /dev/null +++ b/deployments/ronin-testnet/RNSDomainPriceLogic.json @@ -0,0 +1,16155 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "int32", + "name": "expo1", + "type": "int32" + }, + { + "internalType": "int32", + "name": "expo2", + "type": "int32" + }, + { + "internalType": "int64", + "name": "price1", + "type": "int64" + } + ], + "name": "ErrComputedPriceTooLarge", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "int32", + "name": "expo", + "type": "int32" + } + ], + "name": "ErrExponentTooLarge", + "type": "error" + }, + { + "inputs": [], + "name": "ExceedAuctionDomainExpiry", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidArrayLength", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "n", + "type": "uint256" + } + ], + "name": "PeriodNumOverflowedUint16", + "type": "error" + }, + { + "inputs": [], + "name": "RenewalFeeIsNotOverriden", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint192", + "name": "ratio", + "type": "uint192" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "period", + "type": "uint64" + } + ], + "name": "DomainPriceScaleRuleUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "labelHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "proofHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "setType", + "type": "uint256" + } + ], + "name": "DomainPriceUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "maxLength", + "type": "uint256" + } + ], + "name": "MaxRenewalFeeLengthUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "contract IPyth", + "name": "pyth", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "maxAcceptableAge", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "pythIdForRONUSD", + "type": "bytes32" + } + ], + "name": "PythOracleConfigUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "labelLength", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "renewalFee", + "type": "uint256" + } + ], + "name": "RenewalFeeByLengthUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "labelHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "inverseRenewalFee", + "type": "uint256" + } + ], + "name": "RenewalFeeOverridingUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "TaxRatioUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_PERCENTAGE", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OPERATOR_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OVERRIDER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "USD_DECIMALS", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "lbHashes", + "type": "bytes32[]" + }, + { + "internalType": "uint256[]", + "name": "usdPrices", + "type": "uint256[]" + } + ], + "name": "bulkOverrideRenewalFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "lbHashes", + "type": "bytes32[]" + }, + { + "internalType": "uint256[]", + "name": "ronPrices", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "proofHashes", + "type": "bytes32[]" + }, + { + "internalType": "uint256[]", + "name": "setTypes", + "type": "uint256[]" + } + ], + "name": "bulkSetDomainPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "lbHashes", + "type": "bytes32[]" + }, + { + "internalType": "uint256[]", + "name": "ronPrices", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "proofHashes", + "type": "bytes32[]" + }, + { + "internalType": "uint256[]", + "name": "setTypes", + "type": "uint256[]" + } + ], + "name": "bulkTrySetDomainPrice", + "outputs": [ + { + "internalType": "bool[]", + "name": "updated", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "ronWei", + "type": "uint256" + } + ], + "name": "convertRONToUSD", + "outputs": [ + { + "internalType": "uint256", + "name": "usdWei", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "usdWei", + "type": "uint256" + } + ], + "name": "convertUSDToRON", + "outputs": [ + { + "internalType": "uint256", + "name": "ronWei", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "label", + "type": "string" + } + ], + "name": "getDomainPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "usdPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ronPrice", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "label", + "type": "string" + } + ], + "name": "getOverriddenRenewalFee", + "outputs": [ + { + "internalType": "uint256", + "name": "usdFee", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPythOracleConfig", + "outputs": [ + { + "internalType": "contract IPyth", + "name": "pyth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAcceptableAge", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "pythIdForRONUSD", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "label", + "type": "string" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "getRenewalFee", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "usd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ron", + "type": "uint256" + } + ], + "internalType": "struct INSDomainPrice.UnitPrice", + "name": "basePrice", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "usd", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ron", + "type": "uint256" + } + ], + "internalType": "struct INSDomainPrice.UnitPrice", + "name": "tax", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRenewalFeeByLengths", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "labelLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "internalType": "struct INSDomainPrice.RenewalFee[]", + "name": "renewalFees", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getScaleDownRuleForDomainPrice", + "outputs": [ + { + "components": [ + { + "internalType": "uint192", + "name": "ratio", + "type": "uint192" + }, + { + "internalType": "uint64", + "name": "period", + "type": "uint64" + } + ], + "internalType": "struct PeriodScaler", + "name": "scaleRule", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTaxRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "labelLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "internalType": "struct INSDomainPrice.RenewalFee[]", + "name": "renewalFees", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "taxRatio", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint192", + "name": "ratio", + "type": "uint192" + }, + { + "internalType": "uint64", + "name": "period", + "type": "uint64" + } + ], + "internalType": "struct PeriodScaler", + "name": "domainPriceScaleRule", + "type": "tuple" + }, + { + "internalType": "contract IPyth", + "name": "pyth", + "type": "address" + }, + { + "internalType": "contract INSAuction", + "name": "auction", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAcceptableAge", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "pythIdForRONUSD", + "type": "bytes32" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IPyth", + "name": "pyth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAcceptableAge", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "pythIdForRONUSD", + "type": "bytes32" + } + ], + "name": "setPythOracleConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "labelLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "internalType": "struct INSDomainPrice.RenewalFee[]", + "name": "renewalFees", + "type": "tuple[]" + } + ], + "name": "setRenewalFeeByLengths", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint192", + "name": "ratio", + "type": "uint192" + }, + { + "internalType": "uint64", + "name": "period", + "type": "uint64" + } + ], + "internalType": "struct PeriodScaler", + "name": "scaleRule", + "type": "tuple" + } + ], + "name": "setScaleDownRuleForDomainPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "setTaxRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "address": "0x79Abf4410D7c76d2b38F75eaE7bD6Fc6099797Ac", + "args": "0x", + "ast": { + "absolutePath": "src/RNSDomainPrice.sol", + "id": 61317, + "exportedSymbols": { + "AccessControlEnumerable": [ + 48967 + ], + "INSAuction": [ + 64912 + ], + "INSDomainPrice": [ + 65182 + ], + "INSUnified": [ + 65555 + ], + "IPyth": [ + 54836 + ], + "Initializable": [ + 50240 + ], + "LibPeriodScaler": [ + 67268 + ], + "LibRNSDomain": [ + 66622 + ], + "LibSafeRange": [ + 67166 + ], + "LibString": [ + 66904 + ], + "Math": [ + 53549 + ], + "PeriodScaler": [ + 67177 + ], + "PythConverter": [ + 67957 + ], + "PythStructs": [ + 54879 + ], + "RNSDomainPrice": [ + 61316 + ], + "TimestampWrapper": [ + 67100 + ] + }, + "nodeType": "SourceUnit", + "src": "32:13153:90", + "nodes": [ + { + "id": 60144, + "nodeType": "PragmaDirective", + "src": "32:24:90", + "nodes": [], + "literals": [ + "solidity", + "^", + "0.8", + ".19" + ] + }, + { + "id": 60146, + "nodeType": "ImportDirective", + "src": "58:86:90", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 50241, + "symbolAliases": [ + { + "foreign": { + "id": 60145, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50240, + "src": "67:13:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60148, + "nodeType": "ImportDirective", + "src": "145:101:90", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol", + "file": "@openzeppelin/contracts/access/AccessControlEnumerable.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 48968, + "symbolAliases": [ + { + "foreign": { + "id": 60147, + "name": "AccessControlEnumerable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48967, + "src": "154:23:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60150, + "nodeType": "ImportDirective", + "src": "247:67:90", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/utils/math/Math.sol", + "file": "@openzeppelin/contracts/utils/math/Math.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 53550, + "symbolAliases": [ + { + "foreign": { + "id": 60149, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53549, + "src": "256:4:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60153, + "nodeType": "ImportDirective", + "src": "315:60:90", + "nodes": [], + "absolutePath": "lib/pyth-sdk-solidity/IPyth.sol", + "file": "@pythnetwork/IPyth.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 54837, + "symbolAliases": [ + { + "foreign": { + "id": 60151, + "name": "IPyth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 54836, + "src": "324:5:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 60152, + "name": "PythStructs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 54879, + "src": "331:11:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60155, + "nodeType": "ImportDirective", + "src": "376:57:90", + "nodes": [], + "absolutePath": "src/interfaces/INSUnified.sol", + "file": "./interfaces/INSUnified.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 65556, + "symbolAliases": [ + { + "foreign": { + "id": 60154, + "name": "INSUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65555, + "src": "385:10:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60157, + "nodeType": "ImportDirective", + "src": "434:57:90", + "nodes": [], + "absolutePath": "src/interfaces/INSAuction.sol", + "file": "./interfaces/INSAuction.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 64913, + "symbolAliases": [ + { + "foreign": { + "id": 60156, + "name": "INSAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64912, + "src": "443:10:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60159, + "nodeType": "ImportDirective", + "src": "492:65:90", + "nodes": [], + "absolutePath": "src/interfaces/INSDomainPrice.sol", + "file": "./interfaces/INSDomainPrice.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 65183, + "symbolAliases": [ + { + "foreign": { + "id": 60158, + "name": "INSDomainPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65182, + "src": "501:14:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60163, + "nodeType": "ImportDirective", + "src": "558:94:90", + "nodes": [], + "absolutePath": "src/libraries/math/PeriodScalingUtils.sol", + "file": "./libraries/math/PeriodScalingUtils.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 67269, + "symbolAliases": [ + { + "foreign": { + "id": 60160, + "name": "PeriodScaler", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67177, + "src": "567:12:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 60161, + "name": "LibPeriodScaler", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67268, + "src": "581:15:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 60162, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53549, + "src": "598:4:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60165, + "nodeType": "ImportDirective", + "src": "653:73:90", + "nodes": [], + "absolutePath": "src/libraries/TimestampWrapperUtils.sol", + "file": "./libraries/TimestampWrapperUtils.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 67101, + "symbolAliases": [ + { + "foreign": { + "id": 60164, + "name": "TimestampWrapper", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67100, + "src": "662:16:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60167, + "nodeType": "ImportDirective", + "src": "727:65:90", + "nodes": [], + "absolutePath": "src/libraries/math/LibSafeRange.sol", + "file": "./libraries/math/LibSafeRange.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 67167, + "symbolAliases": [ + { + "foreign": { + "id": 60166, + "name": "LibSafeRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67166, + "src": "736:12:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60169, + "nodeType": "ImportDirective", + "src": "793:54:90", + "nodes": [], + "absolutePath": "src/libraries/LibString.sol", + "file": "./libraries/LibString.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 66905, + "symbolAliases": [ + { + "foreign": { + "id": 60168, + "name": "LibString", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66904, + "src": "802:9:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60171, + "nodeType": "ImportDirective", + "src": "848:60:90", + "nodes": [], + "absolutePath": "src/libraries/LibRNSDomain.sol", + "file": "./libraries/LibRNSDomain.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 66623, + "symbolAliases": [ + { + "foreign": { + "id": 60170, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66622, + "src": "857:12:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 60173, + "nodeType": "ImportDirective", + "src": "909:67:90", + "nodes": [], + "absolutePath": "src/libraries/pyth/PythConverter.sol", + "file": "./libraries/pyth/PythConverter.sol", + "nameLocation": "-1:-1:-1", + "scope": 61317, + "sourceUnit": 67958, + "symbolAliases": [ + { + "foreign": { + "id": 60172, + "name": "PythConverter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67957, + "src": "918:13:90", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 61316, + "nodeType": "ContractDefinition", + "src": "978:12206:90", + "nodes": [ + { + "id": 60181, + "nodeType": "UsingForDirective", + "src": "1064:22:90", + "nodes": [], + "global": false, + "libraryName": { + "id": 60180, + "name": "LibString", + "nameLocations": [ + "1070:9:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66904, + "src": "1070:9:90" + } + }, + { + "id": 60184, + "nodeType": "UsingForDirective", + "src": "1089:30:90", + "nodes": [], + "global": false, + "libraryName": { + "id": 60182, + "name": "LibRNSDomain", + "nameLocations": [ + "1095:12:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66622, + "src": "1095:12:90" + }, + "typeName": { + "id": 60183, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1112:6:90", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + { + "id": 60188, + "nodeType": "UsingForDirective", + "src": "1122:39:90", + "nodes": [], + "global": false, + "libraryName": { + "id": 60185, + "name": "LibPeriodScaler", + "nameLocations": [ + "1128:15:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67268, + "src": "1128:15:90" + }, + "typeName": { + "id": 60187, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60186, + "name": "PeriodScaler", + "nameLocations": [ + "1148:12:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67177, + "src": "1148:12:90" + }, + "referencedDeclaration": 67177, + "src": "1148:12:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage_ptr", + "typeString": "struct PeriodScaler" + } + } + }, + { + "id": 60192, + "nodeType": "UsingForDirective", + "src": "1164:42:90", + "nodes": [], + "global": false, + "libraryName": { + "id": 60189, + "name": "PythConverter", + "nameLocations": [ + "1170:13:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67957, + "src": "1170:13:90" + }, + "typeName": { + "id": 60191, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60190, + "name": "PythStructs.Price", + "nameLocations": [ + "1188:11:90", + "1200:5:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 54869, + "src": "1188:17:90" + }, + "referencedDeclaration": 54869, + "src": "1188:17:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Price_$54869_storage_ptr", + "typeString": "struct PythStructs.Price" + } + } + }, + { + "id": 60196, + "nodeType": "VariableDeclaration", + "src": "1243:39:90", + "nodes": [], + "baseFunctions": [ + 65181 + ], + "constant": true, + "documentation": { + "id": 60193, + "nodeType": "StructuredDocumentation", + "src": "1210:30:90", + "text": "@inheritdoc INSDomainPrice" + }, + "functionSelector": "2f6ee695", + "mutability": "constant", + "name": "USD_DECIMALS", + "nameLocation": "1265:12:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 60194, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1243:5:90", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": { + "hexValue": "3138", + "id": 60195, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1280:2:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "visibility": "public" + }, + { + "id": 60200, + "nodeType": "VariableDeclaration", + "src": "1319:46:90", + "nodes": [], + "baseFunctions": [ + 65175 + ], + "constant": true, + "documentation": { + "id": 60197, + "nodeType": "StructuredDocumentation", + "src": "1286:30:90", + "text": "@inheritdoc INSDomainPrice" + }, + "functionSelector": "4c255c97", + "mutability": "constant", + "name": "MAX_PERCENTAGE", + "nameLocation": "1342:14:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 60198, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1319:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": { + "hexValue": "3130305f3030", + "id": 60199, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1359:6:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000_by_1", + "typeString": "int_const 10000" + }, + "value": "100_00" + }, + "visibility": "public" + }, + { + "id": 60206, + "nodeType": "VariableDeclaration", + "src": "1402:66:90", + "nodes": [], + "baseFunctions": [ + 65163 + ], + "constant": true, + "documentation": { + "id": 60201, + "nodeType": "StructuredDocumentation", + "src": "1369:30:90", + "text": "@inheritdoc INSDomainPrice" + }, + "functionSelector": "f5b541a6", + "mutability": "constant", + "name": "OPERATOR_ROLE", + "nameLocation": "1426:13:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60202, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1402:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "4f50455241544f525f524f4c45", + "id": 60204, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1452:15:90", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "typeString": "literal_string \"OPERATOR_ROLE\"" + }, + "value": "OPERATOR_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "typeString": "literal_string \"OPERATOR_ROLE\"" + } + ], + "id": 60203, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1442:9:90", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 60205, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1442:26:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 60212, + "nodeType": "VariableDeclaration", + "src": "1505:68:90", + "nodes": [], + "baseFunctions": [ + 65169 + ], + "constant": true, + "documentation": { + "id": 60207, + "nodeType": "StructuredDocumentation", + "src": "1472:30:90", + "text": "@inheritdoc INSDomainPrice" + }, + "functionSelector": "700213c8", + "mutability": "constant", + "name": "OVERRIDER_ROLE", + "nameLocation": "1529:14:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60208, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1505:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "4f56455252494445525f524f4c45", + "id": 60210, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1556:16:90", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad", + "typeString": "literal_string \"OVERRIDER_ROLE\"" + }, + "value": "OVERRIDER_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad", + "typeString": "literal_string \"OVERRIDER_ROLE\"" + } + ], + "id": 60209, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1546:9:90", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 60211, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1546:27:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 60217, + "nodeType": "VariableDeclaration", + "src": "1613:27:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60213, + "nodeType": "StructuredDocumentation", + "src": "1578:32:90", + "text": "@dev Gap for upgradeability." + }, + "mutability": "mutable", + "name": "____gap", + "nameLocation": "1633:7:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 60214, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1613:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60216, + "length": { + "hexValue": "3530", + "id": 60215, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1621:2:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "1613:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + }, + { + "id": 60221, + "nodeType": "VariableDeclaration", + "src": "1677:20:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60218, + "nodeType": "StructuredDocumentation", + "src": "1645:29:90", + "text": "@dev Pyth oracle contract" + }, + "mutability": "mutable", + "name": "_pyth", + "nameLocation": "1692:5:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + }, + "typeName": { + "id": 60220, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60219, + "name": "IPyth", + "nameLocations": [ + "1677:5:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 54836, + "src": "1677:5:90" + }, + "referencedDeclaration": 54836, + "src": "1677:5:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "visibility": "internal" + }, + { + "id": 60225, + "nodeType": "VariableDeclaration", + "src": "1732:28:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60222, + "nodeType": "StructuredDocumentation", + "src": "1701:28:90", + "text": "@dev RNSAuction contract" + }, + "mutability": "mutable", + "name": "_auction", + "nameLocation": "1752:8:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + }, + "typeName": { + "id": 60224, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60223, + "name": "INSAuction", + "nameLocations": [ + "1732:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64912, + "src": "1732:10:90" + }, + "referencedDeclaration": 64912, + "src": "1732:10:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "visibility": "internal" + }, + { + "id": 60228, + "nodeType": "VariableDeclaration", + "src": "1833:26:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60226, + "nodeType": "StructuredDocumentation", + "src": "1764:66:90", + "text": "@dev Extra fee for renewals based on the current domain price." + }, + "mutability": "mutable", + "name": "_taxRatio", + "nameLocation": "1850:9:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60227, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1833:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "id": 60231, + "nodeType": "VariableDeclaration", + "src": "1904:30:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60229, + "nodeType": "StructuredDocumentation", + "src": "1863:38:90", + "text": "@dev Max length of the renewal fee" + }, + "mutability": "mutable", + "name": "_rnfMaxLength", + "nameLocation": "1921:13:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60230, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1904:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "id": 60234, + "nodeType": "VariableDeclaration", + "src": "1996:34:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60232, + "nodeType": "StructuredDocumentation", + "src": "1938:55:90", + "text": "@dev Max acceptable age of the price oracle request" + }, + "mutability": "mutable", + "name": "_maxAcceptableAge", + "nameLocation": "2013:17:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60233, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1996:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "id": 60237, + "nodeType": "VariableDeclaration", + "src": "2079:33:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60235, + "nodeType": "StructuredDocumentation", + "src": "2034:42:90", + "text": "@dev Price feed ID on Pyth for RON/USD" + }, + "mutability": "mutable", + "name": "_pythIdForRONUSD", + "nameLocation": "2096:16:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60236, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2079:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "id": 60241, + "nodeType": "VariableDeclaration", + "src": "2178:35:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60238, + "nodeType": "StructuredDocumentation", + "src": "2116:59:90", + "text": "@dev The percentage scale from domain price each period" + }, + "mutability": "mutable", + "name": "_dpDownScaler", + "nameLocation": "2200:13:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage", + "typeString": "struct PeriodScaler" + }, + "typeName": { + "id": 60240, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60239, + "name": "PeriodScaler", + "nameLocations": [ + "2178:12:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67177, + "src": "2178:12:90" + }, + "referencedDeclaration": 67177, + "src": "2178:12:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage_ptr", + "typeString": "struct PeriodScaler" + } + }, + "visibility": "internal" + }, + { + "id": 60246, + "nodeType": "VariableDeclaration", + "src": "2278:59:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60242, + "nodeType": "StructuredDocumentation", + "src": "2218:57:90", + "text": "@dev Mapping from domain length => renewal fee in USD" + }, + "mutability": "mutable", + "name": "_rnFee", + "nameLocation": "2331:6:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "typeName": { + "id": 60245, + "keyName": "length", + "keyNameLocation": "2294:6:90", + "keyType": { + "id": 60243, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2286:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "2278:43:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + }, + "valueName": "usdPrice", + "valueNameLocation": "2312:8:90", + "valueType": { + "id": 60244, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2304:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + }, + { + "id": 60252, + "nodeType": "VariableDeclaration", + "src": "2393:65:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60247, + "nodeType": "StructuredDocumentation", + "src": "2341:49:90", + "text": "@dev Mapping from name => domain price in USD" + }, + "mutability": "mutable", + "name": "_dp", + "nameLocation": "2455:3:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TimestampWrapper_$67100_storage_$", + "typeString": "mapping(bytes32 => struct TimestampWrapper)" + }, + "typeName": { + "id": 60251, + "keyName": "lbHash", + "keyNameLocation": "2409:6:90", + "keyType": { + "id": 60248, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2401:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2393:52:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TimestampWrapper_$67100_storage_$", + "typeString": "mapping(bytes32 => struct TimestampWrapper)" + }, + "valueName": "usdPrice", + "valueNameLocation": "2436:8:90", + "valueType": { + "id": 60250, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60249, + "name": "TimestampWrapper", + "nameLocations": [ + "2419:16:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67100, + "src": "2419:16:90" + }, + "referencedDeclaration": 67100, + "src": "2419:16:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper" + } + } + }, + "visibility": "internal" + }, + { + "id": 60257, + "nodeType": "VariableDeclaration", + "src": "2537:69:90", + "nodes": [], + "constant": false, + "documentation": { + "id": 60253, + "nodeType": "StructuredDocumentation", + "src": "2462:72:90", + "text": "@dev Mapping from name => inverse bitwise of renewal fee overriding." + }, + "mutability": "mutable", + "name": "_rnFeeOverriding", + "nameLocation": "2590:16:90", + "scope": 61316, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 60256, + "keyName": "lbHash", + "keyNameLocation": "2553:6:90", + "keyType": { + "id": 60254, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2545:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2537:43:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueName": "usdPrice", + "valueNameLocation": "2571:8:90", + "valueType": { + "id": 60255, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2563:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + }, + { + "id": 60264, + "nodeType": "FunctionDefinition", + "src": "2611:55:90", + "nodes": [], + "body": { + "id": 60263, + "nodeType": "Block", + "src": "2633:33:90", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 60260, + "name": "_disableInitializers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50221, + "src": "2639:20:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 60261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2639:22:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60262, + "nodeType": "ExpressionStatement", + "src": "2639:22:90" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 60258, + "nodeType": "ParameterList", + "parameters": [], + "src": "2622:2:90" + }, + "returnParameters": { + "id": 60259, + "nodeType": "ParameterList", + "parameters": [], + "src": "2633:0:90" + }, + "scope": 61316, + "stateMutability": "payable", + "virtual": false, + "visibility": "public" + }, + { + "id": 60349, + "nodeType": "FunctionDefinition", + "src": "2670:776:90", + "nodes": [], + "body": { + "id": 60348, + "nodeType": "Block", + "src": "2976:470:90", + "nodes": [], + "statements": [ + { + "assignments": [ + 60294 + ], + "declarations": [ + { + "constant": false, + "id": 60294, + "mutability": "mutable", + "name": "length", + "nameLocation": "2990:6:90", + "nodeType": "VariableDeclaration", + "scope": 60348, + "src": "2982:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60293, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2982:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60297, + "initialValue": { + "expression": { + "id": 60295, + "name": "operators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60269, + "src": "2999:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 60296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3009:6:90", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2999:16:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2982:33:90" + }, + { + "assignments": [ + 60299 + ], + "declarations": [ + { + "constant": false, + "id": 60299, + "mutability": "mutable", + "name": "operatorRole", + "nameLocation": "3029:12:90", + "nodeType": "VariableDeclaration", + "scope": 60348, + "src": "3021:20:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60298, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3021:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 60301, + "initialValue": { + "id": 60300, + "name": "OPERATOR_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60206, + "src": "3044:13:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3021:36:90" + }, + { + "body": { + "id": 60319, + "nodeType": "Block", + "src": "3093:93:90", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60309, + "name": "operatorRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60299, + "src": "3112:12:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "baseExpression": { + "id": 60310, + "name": "operators", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60269, + "src": "3126:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 60312, + "indexExpression": { + "id": 60311, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60303, + "src": "3136:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3126:12:90", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 60308, + "name": "_setupRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48750, + "src": "3101:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 60313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3101:38:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60314, + "nodeType": "ExpressionStatement", + "src": "3101:38:90" + }, + { + "id": 60318, + "nodeType": "UncheckedBlock", + "src": "3148:32:90", + "statements": [ + { + "expression": { + "id": 60316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "3168:3:90", + "subExpression": { + "id": 60315, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60303, + "src": "3170:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60317, + "nodeType": "ExpressionStatement", + "src": "3168:3:90" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60307, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60305, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60303, + "src": "3080:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 60306, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60294, + "src": "3084:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3080:10:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60320, + "initializationExpression": { + "assignments": [ + 60303 + ], + "declarations": [ + { + "constant": false, + "id": 60303, + "mutability": "mutable", + "name": "i", + "nameLocation": "3077:1:90", + "nodeType": "VariableDeclaration", + "scope": 60320, + "src": "3069:9:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60302, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3069:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60304, + "nodeType": "VariableDeclarationStatement", + "src": "3069:9:90" + }, + "nodeType": "ForStatement", + "src": "3064:122:90" + }, + { + "expression": { + "id": 60323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60321, + "name": "_auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60225, + "src": "3191:8:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 60322, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60284, + "src": "3202:7:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "src": "3191:18:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "id": 60324, + "nodeType": "ExpressionStatement", + "src": "3191:18:90" + }, + { + "expression": { + "arguments": [ + { + "id": 60326, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48554, + "src": "3226:18:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 60327, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60266, + "src": "3246:5:90", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 60325, + "name": "_setupRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48750, + "src": "3215:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 60328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3215:37:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60329, + "nodeType": "ExpressionStatement", + "src": "3215:37:90" + }, + { + "expression": { + "arguments": [ + { + "id": 60331, + "name": "renewalFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60273, + "src": "3282:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee calldata[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee calldata[] calldata" + } + ], + "id": 60330, + "name": "_setRenewalFeeByLengths", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61241, + "src": "3258:23:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr_$returns$__$", + "typeString": "function (struct INSDomainPrice.RenewalFee calldata[] calldata)" + } + }, + "id": 60332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3258:36:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60333, + "nodeType": "ExpressionStatement", + "src": "3258:36:90" + }, + { + "expression": { + "arguments": [ + { + "id": 60335, + "name": "taxRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60275, + "src": "3313:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60334, + "name": "_setTaxRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61136, + "src": "3300:12:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 60336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3300:22:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60337, + "nodeType": "ExpressionStatement", + "src": "3300:22:90" + }, + { + "expression": { + "arguments": [ + { + "id": 60339, + "name": "domainPriceScaleRule", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60278, + "src": "3353:20:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler calldata" + } + ], + "id": 60338, + "name": "_setDomainPriceScaleRule", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61157, + "src": "3328:24:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PeriodScaler_$67177_calldata_ptr_$returns$__$", + "typeString": "function (struct PeriodScaler calldata)" + } + }, + "id": 60340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3328:46:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60341, + "nodeType": "ExpressionStatement", + "src": "3328:46:90" + }, + { + "expression": { + "arguments": [ + { + "id": 60343, + "name": "pyth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60281, + "src": "3401:4:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + { + "id": 60344, + "name": "maxAcceptableAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60286, + "src": "3407:16:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 60345, + "name": "pythIdForRONUSD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60288, + "src": "3425:15:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 60342, + "name": "_setPythOracleConfig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61273, + "src": "3380:20:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IPyth_$54836_$_t_uint256_$_t_bytes32_$returns$__$", + "typeString": "function (contract IPyth,uint256,bytes32)" + } + }, + "id": 60346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3380:61:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60347, + "nodeType": "ExpressionStatement", + "src": "3380:61:90" + } + ] + }, + "functionSelector": "d40ed58c", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 60291, + "kind": "modifierInvocation", + "modifierName": { + "id": 60290, + "name": "initializer", + "nameLocations": [ + "2964:11:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50142, + "src": "2964:11:90" + }, + "nodeType": "ModifierInvocation", + "src": "2964:11:90" + } + ], + "name": "initialize", + "nameLocation": "2679:10:90", + "parameters": { + "id": 60289, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60266, + "mutability": "mutable", + "name": "admin", + "nameLocation": "2703:5:90", + "nodeType": "VariableDeclaration", + "scope": 60349, + "src": "2695:13:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60265, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2695:7:90", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60269, + "mutability": "mutable", + "name": "operators", + "nameLocation": "2733:9:90", + "nodeType": "VariableDeclaration", + "scope": 60349, + "src": "2714:28:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 60267, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2714:7:90", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 60268, + "nodeType": "ArrayTypeName", + "src": "2714:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60273, + "mutability": "mutable", + "name": "renewalFees", + "nameLocation": "2770:11:90", + "nodeType": "VariableDeclaration", + "scope": 60349, + "src": "2748:33:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee[]" + }, + "typeName": { + "baseType": { + "id": 60271, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60270, + "name": "RenewalFee", + "nameLocations": [ + "2748:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64929, + "src": "2748:10:90" + }, + "referencedDeclaration": 64929, + "src": "2748:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee" + } + }, + "id": 60272, + "nodeType": "ArrayTypeName", + "src": "2748:12:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_storage_$dyn_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60275, + "mutability": "mutable", + "name": "taxRatio", + "nameLocation": "2795:8:90", + "nodeType": "VariableDeclaration", + "scope": 60349, + "src": "2787:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60274, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2787:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60278, + "mutability": "mutable", + "name": "domainPriceScaleRule", + "nameLocation": "2831:20:90", + "nodeType": "VariableDeclaration", + "scope": 60349, + "src": "2809:42:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler" + }, + "typeName": { + "id": 60277, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60276, + "name": "PeriodScaler", + "nameLocations": [ + "2809:12:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67177, + "src": "2809:12:90" + }, + "referencedDeclaration": 67177, + "src": "2809:12:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage_ptr", + "typeString": "struct PeriodScaler" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60281, + "mutability": "mutable", + "name": "pyth", + "nameLocation": "2863:4:90", + "nodeType": "VariableDeclaration", + "scope": 60349, + "src": "2857:10:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + }, + "typeName": { + "id": 60280, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60279, + "name": "IPyth", + "nameLocations": [ + "2857:5:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 54836, + "src": "2857:5:90" + }, + "referencedDeclaration": 54836, + "src": "2857:5:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60284, + "mutability": "mutable", + "name": "auction", + "nameLocation": "2884:7:90", + "nodeType": "VariableDeclaration", + "scope": 60349, + "src": "2873:18:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + }, + "typeName": { + "id": 60283, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60282, + "name": "INSAuction", + "nameLocations": [ + "2873:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64912, + "src": "2873:10:90" + }, + "referencedDeclaration": 64912, + "src": "2873:10:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60286, + "mutability": "mutable", + "name": "maxAcceptableAge", + "nameLocation": "2905:16:90", + "nodeType": "VariableDeclaration", + "scope": 60349, + "src": "2897:24:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60285, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2897:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60288, + "mutability": "mutable", + "name": "pythIdForRONUSD", + "nameLocation": "2935:15:90", + "nodeType": "VariableDeclaration", + "scope": 60349, + "src": "2927:23:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60287, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2927:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2689:265:90" + }, + "returnParameters": { + "id": 60292, + "nodeType": "ParameterList", + "parameters": [], + "src": "2976:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60366, + "nodeType": "FunctionDefinition", + "src": "3494:179:90", + "nodes": [], + "body": { + "id": 60365, + "nodeType": "Block", + "src": "3611:62:90", + "nodes": [], + "statements": [ + { + "expression": { + "components": [ + { + "id": 60360, + "name": "_pyth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60221, + "src": "3625:5:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + { + "id": 60361, + "name": "_maxAcceptableAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60234, + "src": "3632:17:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 60362, + "name": "_pythIdForRONUSD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60237, + "src": "3651:16:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 60363, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3624:44:90", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_contract$_IPyth_$54836_$_t_uint256_$_t_bytes32_$", + "typeString": "tuple(contract IPyth,uint256,bytes32)" + } + }, + "functionReturnParameters": 60359, + "id": 60364, + "nodeType": "Return", + "src": "3617:51:90" + } + ] + }, + "baseFunctions": [ + 65011 + ], + "documentation": { + "id": 60350, + "nodeType": "StructuredDocumentation", + "src": "3450:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "2be09ecc", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPythOracleConfig", + "nameLocation": "3503:19:90", + "parameters": { + "id": 60351, + "nodeType": "ParameterList", + "parameters": [], + "src": "3522:2:90" + }, + "returnParameters": { + "id": 60359, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60354, + "mutability": "mutable", + "name": "pyth", + "nameLocation": "3554:4:90", + "nodeType": "VariableDeclaration", + "scope": 60366, + "src": "3548:10:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + }, + "typeName": { + "id": 60353, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60352, + "name": "IPyth", + "nameLocations": [ + "3548:5:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 54836, + "src": "3548:5:90" + }, + "referencedDeclaration": 54836, + "src": "3548:5:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60356, + "mutability": "mutable", + "name": "maxAcceptableAge", + "nameLocation": "3568:16:90", + "nodeType": "VariableDeclaration", + "scope": 60366, + "src": "3560:24:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60355, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3560:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60358, + "mutability": "mutable", + "name": "pythIdForRONUSD", + "nameLocation": "3594:15:90", + "nodeType": "VariableDeclaration", + "scope": 60366, + "src": "3586:23:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60357, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3586:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3547:63:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 60387, + "nodeType": "FunctionDefinition", + "src": "3721:212:90", + "nodes": [], + "body": { + "id": 60386, + "nodeType": "Block", + "src": "3861:72:90", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60381, + "name": "pyth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60370, + "src": "3888:4:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + { + "id": 60382, + "name": "maxAcceptableAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60372, + "src": "3894:16:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 60383, + "name": "pythIdForRONUSD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60374, + "src": "3912:15:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 60380, + "name": "_setPythOracleConfig", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61273, + "src": "3867:20:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IPyth_$54836_$_t_uint256_$_t_bytes32_$returns$__$", + "typeString": "function (contract IPyth,uint256,bytes32)" + } + }, + "id": 60384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3867:61:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60385, + "nodeType": "ExpressionStatement", + "src": "3867:61:90" + } + ] + }, + "baseFunctions": [ + 65022 + ], + "documentation": { + "id": 60367, + "nodeType": "StructuredDocumentation", + "src": "3677:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "28dd3065", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 60377, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48554, + "src": "3839:18:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 60378, + "kind": "modifierInvocation", + "modifierName": { + "id": 60376, + "name": "onlyRole", + "nameLocations": [ + "3830:8:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "3830:8:90" + }, + "nodeType": "ModifierInvocation", + "src": "3830:28:90" + } + ], + "name": "setPythOracleConfig", + "nameLocation": "3730:19:90", + "parameters": { + "id": 60375, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60370, + "mutability": "mutable", + "name": "pyth", + "nameLocation": "3756:4:90", + "nodeType": "VariableDeclaration", + "scope": 60387, + "src": "3750:10:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + }, + "typeName": { + "id": 60369, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60368, + "name": "IPyth", + "nameLocations": [ + "3750:5:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 54836, + "src": "3750:5:90" + }, + "referencedDeclaration": 54836, + "src": "3750:5:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60372, + "mutability": "mutable", + "name": "maxAcceptableAge", + "nameLocation": "3770:16:90", + "nodeType": "VariableDeclaration", + "scope": 60387, + "src": "3762:24:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60371, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3762:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60374, + "mutability": "mutable", + "name": "pythIdForRONUSD", + "nameLocation": "3796:15:90", + "nodeType": "VariableDeclaration", + "scope": 60387, + "src": "3788:23:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60373, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3788:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3749:63:90" + }, + "returnParameters": { + "id": 60379, + "nodeType": "ParameterList", + "parameters": [], + "src": "3861:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60446, + "nodeType": "FunctionDefinition", + "src": "3981:396:90", + "nodes": [], + "body": { + "id": 60445, + "nodeType": "Block", + "src": "4071:306:90", + "nodes": [], + "statements": [ + { + "assignments": [ + 60396 + ], + "declarations": [ + { + "constant": false, + "id": 60396, + "mutability": "mutable", + "name": "rnfMaxLength", + "nameLocation": "4085:12:90", + "nodeType": "VariableDeclaration", + "scope": 60445, + "src": "4077:20:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60395, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4077:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60398, + "initialValue": { + "id": 60397, + "name": "_rnfMaxLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60231, + "src": "4100:13:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4077:36:90" + }, + { + "expression": { + "id": 60406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60399, + "name": "renewalFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60393, + "src": "4119:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_memory_ptr_$dyn_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 60404, + "name": "rnfMaxLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60396, + "src": "4150:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60403, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "4133:16:90", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_RenewalFee_$64929_memory_ptr_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (struct INSDomainPrice.RenewalFee memory[] memory)" + }, + "typeName": { + "baseType": { + "id": 60401, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60400, + "name": "RenewalFee", + "nameLocations": [ + "4137:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64929, + "src": "4137:10:90" + }, + "referencedDeclaration": 64929, + "src": "4137:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee" + } + }, + "id": 60402, + "nodeType": "ArrayTypeName", + "src": "4137:12:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_storage_$dyn_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee[]" + } + } + }, + "id": 60405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4133:30:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_memory_ptr_$dyn_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory[] memory" + } + }, + "src": "4119:44:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_memory_ptr_$dyn_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory[] memory" + } + }, + "id": 60407, + "nodeType": "ExpressionStatement", + "src": "4119:44:90" + }, + { + "assignments": [ + 60409 + ], + "declarations": [ + { + "constant": false, + "id": 60409, + "mutability": "mutable", + "name": "len", + "nameLocation": "4177:3:90", + "nodeType": "VariableDeclaration", + "scope": 60445, + "src": "4169:11:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60408, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4169:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60410, + "nodeType": "VariableDeclarationStatement", + "src": "4169:11:90" + }, + { + "body": { + "id": 60443, + "nodeType": "Block", + "src": "4222:151:90", + "statements": [ + { + "id": 60442, + "nodeType": "UncheckedBlock", + "src": "4230:137:90", + "statements": [ + { + "expression": { + "id": 60421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60417, + "name": "len", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60409, + "src": "4250:3:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60418, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60412, + "src": "4256:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 60419, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4260:1:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "4256:5:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4250:11:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60422, + "nodeType": "ExpressionStatement", + "src": "4250:11:90" + }, + { + "expression": { + "id": 60428, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 60423, + "name": "renewalFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60393, + "src": "4271:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_memory_ptr_$dyn_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory[] memory" + } + }, + "id": 60425, + "indexExpression": { + "id": 60424, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60412, + "src": "4283:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4271:14:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory" + } + }, + "id": 60426, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4286:11:90", + "memberName": "labelLength", + "nodeType": "MemberAccess", + "referencedDeclaration": 64926, + "src": "4271:26:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 60427, + "name": "len", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60409, + "src": "4300:3:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4271:32:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60429, + "nodeType": "ExpressionStatement", + "src": "4271:32:90" + }, + { + "expression": { + "id": 60437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "baseExpression": { + "id": 60430, + "name": "renewalFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60393, + "src": "4313:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_memory_ptr_$dyn_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory[] memory" + } + }, + "id": 60432, + "indexExpression": { + "id": 60431, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60412, + "src": "4325:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4313:14:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory" + } + }, + "id": 60433, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4328:3:90", + "memberName": "fee", + "nodeType": "MemberAccess", + "referencedDeclaration": 64928, + "src": "4313:18:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 60434, + "name": "_rnFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60246, + "src": "4334:6:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 60436, + "indexExpression": { + "id": 60435, + "name": "len", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60409, + "src": "4341:3:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4334:11:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4313:32:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60438, + "nodeType": "ExpressionStatement", + "src": "4313:32:90" + }, + { + "expression": { + "id": 60440, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "4355:3:90", + "subExpression": { + "id": 60439, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60412, + "src": "4357:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60441, + "nodeType": "ExpressionStatement", + "src": "4355:3:90" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60414, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60412, + "src": "4203:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 60415, + "name": "rnfMaxLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60396, + "src": "4207:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4203:16:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60444, + "initializationExpression": { + "assignments": [ + 60412 + ], + "declarations": [ + { + "constant": false, + "id": 60412, + "mutability": "mutable", + "name": "i", + "nameLocation": "4200:1:90", + "nodeType": "VariableDeclaration", + "scope": 60444, + "src": "4192:9:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60411, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4192:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60413, + "nodeType": "VariableDeclarationStatement", + "src": "4192:9:90" + }, + "nodeType": "ForStatement", + "src": "4187:186:90" + } + ] + }, + "baseFunctions": [ + 65044 + ], + "documentation": { + "id": 60388, + "nodeType": "StructuredDocumentation", + "src": "3937:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "0a44f51f", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRenewalFeeByLengths", + "nameLocation": "3990:22:90", + "parameters": { + "id": 60389, + "nodeType": "ParameterList", + "parameters": [], + "src": "4012:2:90" + }, + "returnParameters": { + "id": 60394, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60393, + "mutability": "mutable", + "name": "renewalFees", + "nameLocation": "4058:11:90", + "nodeType": "VariableDeclaration", + "scope": 60446, + "src": "4038:31:90", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_memory_ptr_$dyn_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee[]" + }, + "typeName": { + "baseType": { + "id": 60391, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60390, + "name": "RenewalFee", + "nameLocations": [ + "4038:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64929, + "src": "4038:10:90" + }, + "referencedDeclaration": 64929, + "src": "4038:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee" + } + }, + "id": 60392, + "nodeType": "ArrayTypeName", + "src": "4038:12:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_storage_$dyn_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee[]" + } + }, + "visibility": "internal" + } + ], + "src": "4037:33:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 60462, + "nodeType": "FunctionDefinition", + "src": "4425:152:90", + "nodes": [], + "body": { + "id": 60461, + "nodeType": "Block", + "src": "4530:47:90", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60458, + "name": "renewalFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60451, + "src": "4560:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee calldata[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee calldata[] calldata" + } + ], + "id": 60457, + "name": "_setRenewalFeeByLengths", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61241, + "src": "4536:23:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr_$returns$__$", + "typeString": "function (struct INSDomainPrice.RenewalFee calldata[] calldata)" + } + }, + "id": 60459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4536:36:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60460, + "nodeType": "ExpressionStatement", + "src": "4536:36:90" + } + ] + }, + "baseFunctions": [ + 65052 + ], + "documentation": { + "id": 60447, + "nodeType": "StructuredDocumentation", + "src": "4381:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "35feb741", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 60454, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48554, + "src": "4510:18:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 60455, + "kind": "modifierInvocation", + "modifierName": { + "id": 60453, + "name": "onlyRole", + "nameLocations": [ + "4501:8:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "4501:8:90" + }, + "nodeType": "ModifierInvocation", + "src": "4501:28:90" + } + ], + "name": "setRenewalFeeByLengths", + "nameLocation": "4434:22:90", + "parameters": { + "id": 60452, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60451, + "mutability": "mutable", + "name": "renewalFees", + "nameLocation": "4479:11:90", + "nodeType": "VariableDeclaration", + "scope": 60462, + "src": "4457:33:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee[]" + }, + "typeName": { + "baseType": { + "id": 60449, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60448, + "name": "RenewalFee", + "nameLocations": [ + "4457:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64929, + "src": "4457:10:90" + }, + "referencedDeclaration": 64929, + "src": "4457:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee" + } + }, + "id": 60450, + "nodeType": "ArrayTypeName", + "src": "4457:12:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_storage_$dyn_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee[]" + } + }, + "visibility": "internal" + } + ], + "src": "4456:35:90" + }, + "returnParameters": { + "id": 60456, + "nodeType": "ParameterList", + "parameters": [], + "src": "4530:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60471, + "nodeType": "FunctionDefinition", + "src": "4625:88:90", + "nodes": [], + "body": { + "id": 60470, + "nodeType": "Block", + "src": "4686:27:90", + "nodes": [], + "statements": [ + { + "expression": { + "id": 60468, + "name": "_taxRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60228, + "src": "4699:9:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 60467, + "id": 60469, + "nodeType": "Return", + "src": "4692:16:90" + } + ] + }, + "baseFunctions": [ + 65058 + ], + "documentation": { + "id": 60463, + "nodeType": "StructuredDocumentation", + "src": "4581:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "5ef32e2c", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTaxRatio", + "nameLocation": "4634:11:90", + "parameters": { + "id": 60464, + "nodeType": "ParameterList", + "parameters": [], + "src": "4645:2:90" + }, + "returnParameters": { + "id": 60467, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60466, + "mutability": "mutable", + "name": "ratio", + "nameLocation": "4679:5:90", + "nodeType": "VariableDeclaration", + "scope": 60471, + "src": "4671:13:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60465, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4671:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4670:15:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 60485, + "nodeType": "FunctionDefinition", + "src": "4761:104:90", + "nodes": [], + "body": { + "id": 60484, + "nodeType": "Block", + "src": "4835:30:90", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60481, + "name": "ratio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60474, + "src": "4854:5:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60480, + "name": "_setTaxRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61136, + "src": "4841:12:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 60482, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4841:19:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60483, + "nodeType": "ExpressionStatement", + "src": "4841:19:90" + } + ] + }, + "baseFunctions": [ + 65064 + ], + "documentation": { + "id": 60472, + "nodeType": "StructuredDocumentation", + "src": "4717:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "fe303ebf", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 60477, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48554, + "src": "4815:18:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 60478, + "kind": "modifierInvocation", + "modifierName": { + "id": 60476, + "name": "onlyRole", + "nameLocations": [ + "4806:8:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "4806:8:90" + }, + "nodeType": "ModifierInvocation", + "src": "4806:28:90" + } + ], + "name": "setTaxRatio", + "nameLocation": "4770:11:90", + "parameters": { + "id": 60475, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60474, + "mutability": "mutable", + "name": "ratio", + "nameLocation": "4790:5:90", + "nodeType": "VariableDeclaration", + "scope": 60485, + "src": "4782:13:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60473, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4782:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4781:15:90" + }, + "returnParameters": { + "id": 60479, + "nodeType": "ParameterList", + "parameters": [], + "src": "4835:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60495, + "nodeType": "FunctionDefinition", + "src": "4913:127:90", + "nodes": [], + "body": { + "id": 60494, + "nodeType": "Block", + "src": "5009:31:90", + "nodes": [], + "statements": [ + { + "expression": { + "id": 60492, + "name": "_dpDownScaler", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60241, + "src": "5022:13:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage", + "typeString": "struct PeriodScaler storage ref" + } + }, + "functionReturnParameters": 60491, + "id": 60493, + "nodeType": "Return", + "src": "5015:20:90" + } + ] + }, + "baseFunctions": [ + 65029 + ], + "documentation": { + "id": 60486, + "nodeType": "StructuredDocumentation", + "src": "4869:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "39e47da7", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getScaleDownRuleForDomainPrice", + "nameLocation": "4922:30:90", + "parameters": { + "id": 60487, + "nodeType": "ParameterList", + "parameters": [], + "src": "4952:2:90" + }, + "returnParameters": { + "id": 60491, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60490, + "mutability": "mutable", + "name": "scaleRule", + "nameLocation": "4998:9:90", + "nodeType": "VariableDeclaration", + "scope": 60495, + "src": "4978:29:90", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_memory_ptr", + "typeString": "struct PeriodScaler" + }, + "typeName": { + "id": 60489, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60488, + "name": "PeriodScaler", + "nameLocations": [ + "4978:12:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67177, + "src": "4978:12:90" + }, + "referencedDeclaration": 67177, + "src": "4978:12:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage_ptr", + "typeString": "struct PeriodScaler" + } + }, + "visibility": "internal" + } + ], + "src": "4977:31:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 60510, + "nodeType": "FunctionDefinition", + "src": "5088:157:90", + "nodes": [], + "body": { + "id": 60509, + "nodeType": "Block", + "src": "5199:46:90", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60506, + "name": "scaleRule", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60499, + "src": "5230:9:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler calldata" + } + ], + "id": 60505, + "name": "_setDomainPriceScaleRule", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61157, + "src": "5205:24:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PeriodScaler_$67177_calldata_ptr_$returns$__$", + "typeString": "function (struct PeriodScaler calldata)" + } + }, + "id": 60507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5205:35:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60508, + "nodeType": "ExpressionStatement", + "src": "5205:35:90" + } + ] + }, + "baseFunctions": [ + 65036 + ], + "documentation": { + "id": 60496, + "nodeType": "StructuredDocumentation", + "src": "5044:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "e229a670", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 60502, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48554, + "src": "5179:18:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 60503, + "kind": "modifierInvocation", + "modifierName": { + "id": 60501, + "name": "onlyRole", + "nameLocations": [ + "5170:8:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "5170:8:90" + }, + "nodeType": "ModifierInvocation", + "src": "5170:28:90" + } + ], + "name": "setScaleDownRuleForDomainPrice", + "nameLocation": "5097:30:90", + "parameters": { + "id": 60500, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60499, + "mutability": "mutable", + "name": "scaleRule", + "nameLocation": "5150:9:90", + "nodeType": "VariableDeclaration", + "scope": 60510, + "src": "5128:31:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler" + }, + "typeName": { + "id": 60498, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60497, + "name": "PeriodScaler", + "nameLocations": [ + "5128:12:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67177, + "src": "5128:12:90" + }, + "referencedDeclaration": 67177, + "src": "5128:12:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage_ptr", + "typeString": "struct PeriodScaler" + } + }, + "visibility": "internal" + } + ], + "src": "5127:33:90" + }, + "returnParameters": { + "id": 60504, + "nodeType": "ParameterList", + "parameters": [], + "src": "5199:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60537, + "nodeType": "FunctionDefinition", + "src": "5293:226:90", + "nodes": [], + "body": { + "id": 60536, + "nodeType": "Block", + "src": "5388:131:90", + "nodes": [], + "statements": [ + { + "expression": { + "id": 60524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60518, + "name": "usdFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60516, + "src": "5394:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 60519, + "name": "_rnFeeOverriding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60257, + "src": "5403:16:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 60523, + "indexExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 60520, + "name": "label", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60513, + "src": "5420:5:90", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + }, + "id": 60521, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5426:9:90", + "memberName": "hashLabel", + "nodeType": "MemberAccess", + "referencedDeclaration": 66611, + "src": "5420:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$attached_to$_t_string_memory_ptr_$", + "typeString": "function (string memory) pure returns (bytes32)" + } + }, + "id": 60522, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5420:17:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5403:35:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5394:44:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60525, + "nodeType": "ExpressionStatement", + "src": "5394:44:90" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60528, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60526, + "name": "usdFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60516, + "src": "5448:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 60527, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5458:1:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5448:11:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60532, + "nodeType": "IfStatement", + "src": "5444:50:90", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 60529, + "name": "RenewalFeeIsNotOverriden", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64922, + "src": "5468:24:90", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 60530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5468:26:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60531, + "nodeType": "RevertStatement", + "src": "5461:33:90" + } + }, + { + "expression": { + "id": 60534, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "~", + "prefix": true, + "src": "5507:7:90", + "subExpression": { + "id": 60533, + "name": "usdFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60516, + "src": "5508:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 60517, + "id": 60535, + "nodeType": "Return", + "src": "5500:14:90" + } + ] + }, + "baseFunctions": [ + 65096 + ], + "documentation": { + "id": 60511, + "nodeType": "StructuredDocumentation", + "src": "5249:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "5c68c830", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getOverriddenRenewalFee", + "nameLocation": "5302:23:90", + "parameters": { + "id": 60514, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60513, + "mutability": "mutable", + "name": "label", + "nameLocation": "5342:5:90", + "nodeType": "VariableDeclaration", + "scope": 60537, + "src": "5326:21:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string" + }, + "typeName": { + "id": 60512, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5326:6:90", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "5325:23:90" + }, + "returnParameters": { + "id": 60517, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60516, + "mutability": "mutable", + "name": "usdFee", + "nameLocation": "5380:6:90", + "nodeType": "VariableDeclaration", + "scope": 60537, + "src": "5372:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60515, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5372:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5371:16:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 60611, + "nodeType": "FunctionDefinition", + "src": "5567:577:90", + "nodes": [], + "body": { + "id": 60610, + "nodeType": "Block", + "src": "5703:441:90", + "nodes": [], + "statements": [ + { + "assignments": [ + 60551 + ], + "declarations": [ + { + "constant": false, + "id": 60551, + "mutability": "mutable", + "name": "length", + "nameLocation": "5717:6:90", + "nodeType": "VariableDeclaration", + "scope": 60610, + "src": "5709:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60550, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5709:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60554, + "initialValue": { + "expression": { + "id": 60552, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60541, + "src": "5726:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + "id": 60553, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5735:6:90", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5726:15:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5709:32:90" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 60562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60555, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60551, + "src": "5751:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 60556, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5761:1:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5751:11:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60558, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60551, + "src": "5766:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "expression": { + "id": 60559, + "name": "usdPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60544, + "src": "5776:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 60560, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5786:6:90", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5776:16:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5766:26:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5751:41:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60566, + "nodeType": "IfStatement", + "src": "5747:74:90", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 60563, + "name": "InvalidArrayLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64920, + "src": "5801:18:90", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 60564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5801:20:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60565, + "nodeType": "RevertStatement", + "src": "5794:27:90" + } + }, + { + "assignments": [ + 60568 + ], + "declarations": [ + { + "constant": false, + "id": 60568, + "mutability": "mutable", + "name": "inverseBitwise", + "nameLocation": "5835:14:90", + "nodeType": "VariableDeclaration", + "scope": 60610, + "src": "5827:22:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60567, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5827:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60569, + "nodeType": "VariableDeclarationStatement", + "src": "5827:22:90" + }, + { + "assignments": [ + 60571 + ], + "declarations": [ + { + "constant": false, + "id": 60571, + "mutability": "mutable", + "name": "operator", + "nameLocation": "5863:8:90", + "nodeType": "VariableDeclaration", + "scope": 60610, + "src": "5855:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60570, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5855:7:90", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 60574, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 60572, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "5874:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 60573, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5874:12:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5855:31:90" + }, + { + "body": { + "id": 60608, + "nodeType": "Block", + "src": "5922:218:90", + "statements": [ + { + "expression": { + "id": 60586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60581, + "name": "inverseBitwise", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60568, + "src": "5930:14:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 60585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "~", + "prefix": true, + "src": "5947:13:90", + "subExpression": { + "baseExpression": { + "id": 60582, + "name": "usdPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60544, + "src": "5948:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 60584, + "indexExpression": { + "id": 60583, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60576, + "src": "5958:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5948:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5930:30:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60587, + "nodeType": "ExpressionStatement", + "src": "5930:30:90" + }, + { + "expression": { + "id": 60594, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 60588, + "name": "_rnFeeOverriding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60257, + "src": "5968:16:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 60592, + "indexExpression": { + "baseExpression": { + "id": 60589, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60541, + "src": "5985:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + "id": 60591, + "indexExpression": { + "id": 60590, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60576, + "src": "5994:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5985:11:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5968:29:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 60593, + "name": "inverseBitwise", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60568, + "src": "6000:14:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5968:46:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60595, + "nodeType": "ExpressionStatement", + "src": "5968:46:90" + }, + { + "eventCall": { + "arguments": [ + { + "id": 60597, + "name": "operator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60571, + "src": "6055:8:90", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "baseExpression": { + "id": 60598, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60541, + "src": "6065:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + "id": 60600, + "indexExpression": { + "id": 60599, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60576, + "src": "6074:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6065:11:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 60601, + "name": "inverseBitwise", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60568, + "src": "6078:14:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60596, + "name": "RenewalFeeOverridingUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64966, + "src": "6027:27:90", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$returns$__$", + "typeString": "function (address,bytes32,uint256)" + } + }, + "id": 60602, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6027:66:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60603, + "nodeType": "EmitStatement", + "src": "6022:71:90" + }, + { + "id": 60607, + "nodeType": "UncheckedBlock", + "src": "6102:32:90", + "statements": [ + { + "expression": { + "id": 60605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "6122:3:90", + "subExpression": { + "id": 60604, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60576, + "src": "6124:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60606, + "nodeType": "ExpressionStatement", + "src": "6122:3:90" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60578, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60576, + "src": "5909:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 60579, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60551, + "src": "5913:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5909:10:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60609, + "initializationExpression": { + "assignments": [ + 60576 + ], + "declarations": [ + { + "constant": false, + "id": 60576, + "mutability": "mutable", + "name": "i", + "nameLocation": "5906:1:90", + "nodeType": "VariableDeclaration", + "scope": 60609, + "src": "5898:9:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60575, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5898:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60577, + "nodeType": "VariableDeclarationStatement", + "src": "5898:9:90" + }, + "nodeType": "ForStatement", + "src": "5893:247:90" + } + ] + }, + "baseFunctions": [ + 65106 + ], + "documentation": { + "id": 60538, + "nodeType": "StructuredDocumentation", + "src": "5523:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "dd28776d", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 60547, + "name": "OVERRIDER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60212, + "src": "5685:14:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 60548, + "kind": "modifierInvocation", + "modifierName": { + "id": 60546, + "name": "onlyRole", + "nameLocations": [ + "5676:8:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "5676:8:90" + }, + "nodeType": "ModifierInvocation", + "src": "5676:24:90" + } + ], + "name": "bulkOverrideRenewalFees", + "nameLocation": "5576:23:90", + "parameters": { + "id": 60545, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60541, + "mutability": "mutable", + "name": "lbHashes", + "nameLocation": "5619:8:90", + "nodeType": "VariableDeclaration", + "scope": 60611, + "src": "5600:27:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 60539, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5600:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 60540, + "nodeType": "ArrayTypeName", + "src": "5600:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60544, + "mutability": "mutable", + "name": "usdPrices", + "nameLocation": "5648:9:90", + "nodeType": "VariableDeclaration", + "scope": 60611, + "src": "5629:28:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 60542, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5629:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60543, + "nodeType": "ArrayTypeName", + "src": "5629:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "5599:59:90" + }, + "returnParameters": { + "id": 60549, + "nodeType": "ParameterList", + "parameters": [], + "src": "5703:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60689, + "nodeType": "FunctionDefinition", + "src": "6192:610:90", + "nodes": [], + "body": { + "id": 60688, + "nodeType": "Block", + "src": "6428:374:90", + "nodes": [], + "statements": [ + { + "assignments": [ + 60634 + ], + "declarations": [ + { + "constant": false, + "id": 60634, + "mutability": "mutable", + "name": "length", + "nameLocation": "6442:6:90", + "nodeType": "VariableDeclaration", + "scope": 60688, + "src": "6434:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60633, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6434:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60641, + "initialValue": { + "arguments": [ + { + "id": 60636, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60615, + "src": "6492:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + { + "id": 60637, + "name": "ronPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60618, + "src": "6502:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + { + "id": 60638, + "name": "proofHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60621, + "src": "6513:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + { + "id": 60639, + "name": "setTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60624, + "src": "6526:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + }, + { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + ], + "id": 60635, + "name": "_requireBulkSetDomainPriceArgumentsValid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61054, + "src": "6451:40:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$returns$_t_uint256_$", + "typeString": "function (bytes32[] calldata,uint256[] calldata,bytes32[] calldata,uint256[] calldata) pure returns (uint256)" + } + }, + "id": 60640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6451:84:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6434:101:90" + }, + { + "assignments": [ + 60643 + ], + "declarations": [ + { + "constant": false, + "id": 60643, + "mutability": "mutable", + "name": "operator", + "nameLocation": "6549:8:90", + "nodeType": "VariableDeclaration", + "scope": 60688, + "src": "6541:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60642, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6541:7:90", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 60646, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 60644, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "6560:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 60645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6560:12:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6541:31:90" + }, + { + "expression": { + "id": 60653, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60647, + "name": "updated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60631, + "src": "6578:7:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 60651, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60634, + "src": "6599:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60650, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "NewExpression", + "src": "6588:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bool_$dyn_memory_ptr_$", + "typeString": "function (uint256) pure returns (bool[] memory)" + }, + "typeName": { + "baseType": { + "id": 60648, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6592:4:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60649, + "nodeType": "ArrayTypeName", + "src": "6592:6:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + } + } + }, + "id": 60652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6588:18:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + }, + "src": "6578:28:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + }, + "id": 60654, + "nodeType": "ExpressionStatement", + "src": "6578:28:90" + }, + { + "body": { + "id": 60686, + "nodeType": "Block", + "src": "6642:156:90", + "statements": [ + { + "expression": { + "id": 60680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 60661, + "name": "updated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60631, + "src": "6650:7:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[] memory" + } + }, + "id": 60663, + "indexExpression": { + "id": 60662, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60656, + "src": "6658:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "6650:10:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 60665, + "name": "operator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60643, + "src": "6679:8:90", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "baseExpression": { + "id": 60666, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60615, + "src": "6689:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + "id": 60668, + "indexExpression": { + "id": 60667, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60656, + "src": "6698:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6689:11:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "baseExpression": { + "id": 60669, + "name": "ronPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60618, + "src": "6702:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 60671, + "indexExpression": { + "id": 60670, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60656, + "src": "6712:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6702:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 60672, + "name": "proofHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60621, + "src": "6716:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + "id": 60674, + "indexExpression": { + "id": 60673, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60656, + "src": "6728:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6716:14:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "baseExpression": { + "id": 60675, + "name": "setTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60624, + "src": "6732:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 60677, + "indexExpression": { + "id": 60676, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60656, + "src": "6741:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6732:11:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "66616c7365", + "id": 60678, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6745:5:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 60664, + "name": "_setDomainPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61119, + "src": "6663:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes32_$_t_uint256_$_t_bool_$returns$_t_bool_$", + "typeString": "function (address,bytes32,uint256,bytes32,uint256,bool) returns (bool)" + } + }, + "id": 60679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6663:88:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6650:101:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60681, + "nodeType": "ExpressionStatement", + "src": "6650:101:90" + }, + { + "id": 60685, + "nodeType": "UncheckedBlock", + "src": "6760:32:90", + "statements": [ + { + "expression": { + "id": 60683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "6780:3:90", + "subExpression": { + "id": 60682, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60656, + "src": "6782:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60684, + "nodeType": "ExpressionStatement", + "src": "6780:3:90" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60658, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60656, + "src": "6629:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 60659, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60634, + "src": "6633:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6629:10:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60687, + "initializationExpression": { + "assignments": [ + 60656 + ], + "declarations": [ + { + "constant": false, + "id": 60656, + "mutability": "mutable", + "name": "i", + "nameLocation": "6626:1:90", + "nodeType": "VariableDeclaration", + "scope": 60687, + "src": "6618:9:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60655, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6618:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60657, + "nodeType": "VariableDeclarationStatement", + "src": "6618:9:90" + }, + "nodeType": "ForStatement", + "src": "6613:185:90" + } + ] + }, + "baseFunctions": [ + 65125 + ], + "documentation": { + "id": 60612, + "nodeType": "StructuredDocumentation", + "src": "6148:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "53faf909", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 60627, + "name": "OPERATOR_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60206, + "src": "6381:13:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 60628, + "kind": "modifierInvocation", + "modifierName": { + "id": 60626, + "name": "onlyRole", + "nameLocations": [ + "6372:8:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "6372:8:90" + }, + "nodeType": "ModifierInvocation", + "src": "6372:23:90" + } + ], + "name": "bulkTrySetDomainPrice", + "nameLocation": "6201:21:90", + "parameters": { + "id": 60625, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60615, + "mutability": "mutable", + "name": "lbHashes", + "nameLocation": "6247:8:90", + "nodeType": "VariableDeclaration", + "scope": 60689, + "src": "6228:27:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 60613, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6228:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 60614, + "nodeType": "ArrayTypeName", + "src": "6228:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60618, + "mutability": "mutable", + "name": "ronPrices", + "nameLocation": "6280:9:90", + "nodeType": "VariableDeclaration", + "scope": 60689, + "src": "6261:28:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 60616, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6261:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60617, + "nodeType": "ArrayTypeName", + "src": "6261:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60621, + "mutability": "mutable", + "name": "proofHashes", + "nameLocation": "6314:11:90", + "nodeType": "VariableDeclaration", + "scope": 60689, + "src": "6295:30:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 60619, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6295:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 60620, + "nodeType": "ArrayTypeName", + "src": "6295:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60624, + "mutability": "mutable", + "name": "setTypes", + "nameLocation": "6350:8:90", + "nodeType": "VariableDeclaration", + "scope": 60689, + "src": "6331:27:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 60622, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6331:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60623, + "nodeType": "ArrayTypeName", + "src": "6331:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "6222:140:90" + }, + "returnParameters": { + "id": 60632, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60631, + "mutability": "mutable", + "name": "updated", + "nameLocation": "6419:7:90", + "nodeType": "VariableDeclaration", + "scope": 60689, + "src": "6405:21:90", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_memory_ptr", + "typeString": "bool[]" + }, + "typeName": { + "baseType": { + "id": 60629, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6405:4:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60630, + "nodeType": "ArrayTypeName", + "src": "6405:6:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr", + "typeString": "bool[]" + } + }, + "visibility": "internal" + } + ], + "src": "6404:23:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60752, + "nodeType": "FunctionDefinition", + "src": "6850:527:90", + "nodes": [], + "body": { + "id": 60751, + "nodeType": "Block", + "src": "7052:325:90", + "nodes": [], + "statements": [ + { + "assignments": [ + 60709 + ], + "declarations": [ + { + "constant": false, + "id": 60709, + "mutability": "mutable", + "name": "length", + "nameLocation": "7066:6:90", + "nodeType": "VariableDeclaration", + "scope": 60751, + "src": "7058:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60708, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7058:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60716, + "initialValue": { + "arguments": [ + { + "id": 60711, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60693, + "src": "7116:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + { + "id": 60712, + "name": "ronPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60696, + "src": "7126:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + { + "id": 60713, + "name": "proofHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60699, + "src": "7137:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + { + "id": 60714, + "name": "setTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60702, + "src": "7150:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + }, + { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + ], + "id": 60710, + "name": "_requireBulkSetDomainPriceArgumentsValid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61054, + "src": "7075:40:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_array$_t_bytes32_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$returns$_t_uint256_$", + "typeString": "function (bytes32[] calldata,uint256[] calldata,bytes32[] calldata,uint256[] calldata) pure returns (uint256)" + } + }, + "id": 60715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7075:84:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7058:101:90" + }, + { + "assignments": [ + 60718 + ], + "declarations": [ + { + "constant": false, + "id": 60718, + "mutability": "mutable", + "name": "operator", + "nameLocation": "7173:8:90", + "nodeType": "VariableDeclaration", + "scope": 60751, + "src": "7165:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 60717, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7165:7:90", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 60721, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 60719, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "7184:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 60720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7184:12:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7165:31:90" + }, + { + "body": { + "id": 60749, + "nodeType": "Block", + "src": "7232:141:90", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60729, + "name": "operator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60718, + "src": "7256:8:90", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "baseExpression": { + "id": 60730, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60693, + "src": "7266:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + "id": 60732, + "indexExpression": { + "id": 60731, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60723, + "src": "7275:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7266:11:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "baseExpression": { + "id": 60733, + "name": "ronPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60696, + "src": "7279:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 60735, + "indexExpression": { + "id": 60734, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60723, + "src": "7289:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7279:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "baseExpression": { + "id": 60736, + "name": "proofHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60699, + "src": "7293:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + "id": 60738, + "indexExpression": { + "id": 60737, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60723, + "src": "7305:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7293:14:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "baseExpression": { + "id": 60739, + "name": "setTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60702, + "src": "7309:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 60741, + "indexExpression": { + "id": 60740, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60723, + "src": "7318:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7309:11:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "74727565", + "id": 60742, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7322:4:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 60728, + "name": "_setDomainPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61119, + "src": "7240:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes32_$_t_uint256_$_t_bool_$returns$_t_bool_$", + "typeString": "function (address,bytes32,uint256,bytes32,uint256,bool) returns (bool)" + } + }, + "id": 60743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7240:87:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60744, + "nodeType": "ExpressionStatement", + "src": "7240:87:90" + }, + { + "id": 60748, + "nodeType": "UncheckedBlock", + "src": "7335:32:90", + "statements": [ + { + "expression": { + "id": 60746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "7355:3:90", + "subExpression": { + "id": 60745, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60723, + "src": "7357:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60747, + "nodeType": "ExpressionStatement", + "src": "7355:3:90" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60727, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60725, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60723, + "src": "7219:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 60726, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60709, + "src": "7223:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7219:10:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60750, + "initializationExpression": { + "assignments": [ + 60723 + ], + "declarations": [ + { + "constant": false, + "id": 60723, + "mutability": "mutable", + "name": "i", + "nameLocation": "7216:1:90", + "nodeType": "VariableDeclaration", + "scope": 60750, + "src": "7208:9:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60722, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7208:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60724, + "nodeType": "VariableDeclarationStatement", + "src": "7208:9:90" + }, + "nodeType": "ForStatement", + "src": "7203:170:90" + } + ] + }, + "baseFunctions": [ + 65141 + ], + "documentation": { + "id": 60690, + "nodeType": "StructuredDocumentation", + "src": "6806:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "599eaabf", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 60705, + "name": "OVERRIDER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60212, + "src": "7036:14:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 60706, + "kind": "modifierInvocation", + "modifierName": { + "id": 60704, + "name": "onlyRole", + "nameLocations": [ + "7027:8:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "7027:8:90" + }, + "nodeType": "ModifierInvocation", + "src": "7027:24:90" + } + ], + "name": "bulkSetDomainPrice", + "nameLocation": "6859:18:90", + "parameters": { + "id": 60703, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60693, + "mutability": "mutable", + "name": "lbHashes", + "nameLocation": "6902:8:90", + "nodeType": "VariableDeclaration", + "scope": 60752, + "src": "6883:27:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 60691, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6883:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 60692, + "nodeType": "ArrayTypeName", + "src": "6883:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60696, + "mutability": "mutable", + "name": "ronPrices", + "nameLocation": "6935:9:90", + "nodeType": "VariableDeclaration", + "scope": 60752, + "src": "6916:28:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 60694, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6916:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60695, + "nodeType": "ArrayTypeName", + "src": "6916:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60699, + "mutability": "mutable", + "name": "proofHashes", + "nameLocation": "6969:11:90", + "nodeType": "VariableDeclaration", + "scope": 60752, + "src": "6950:30:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 60697, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6950:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 60698, + "nodeType": "ArrayTypeName", + "src": "6950:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60702, + "mutability": "mutable", + "name": "setTypes", + "nameLocation": "7005:8:90", + "nodeType": "VariableDeclaration", + "scope": 60752, + "src": "6986:27:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 60700, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6986:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60701, + "nodeType": "ArrayTypeName", + "src": "6986:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "6877:140:90" + }, + "returnParameters": { + "id": 60707, + "nodeType": "ParameterList", + "parameters": [], + "src": "7052:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 60777, + "nodeType": "FunctionDefinition", + "src": "7425:200:90", + "nodes": [], + "body": { + "id": 60776, + "nodeType": "Block", + "src": "7527:98:90", + "nodes": [], + "statements": [ + { + "expression": { + "id": 60768, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60762, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60758, + "src": "7533:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 60764, + "name": "label", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60755, + "src": "7560:5:90", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "id": 60765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7566:9:90", + "memberName": "hashLabel", + "nodeType": "MemberAccess", + "referencedDeclaration": 66611, + "src": "7560:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$attached_to$_t_string_memory_ptr_$", + "typeString": "function (string memory) pure returns (bytes32)" + } + }, + "id": 60766, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7560:17:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 60763, + "name": "_getDomainPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61315, + "src": "7544:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) view returns (uint256)" + } + }, + "id": 60767, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7544:34:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7533:45:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60769, + "nodeType": "ExpressionStatement", + "src": "7533:45:90" + }, + { + "expression": { + "id": 60774, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 60770, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60760, + "src": "7584:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 60772, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60758, + "src": "7611:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60771, + "name": "convertUSDToRON", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60981, + "src": "7595:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 60773, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7595:25:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7584:36:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60775, + "nodeType": "ExpressionStatement", + "src": "7584:36:90" + } + ] + }, + "baseFunctions": [ + 65074 + ], + "documentation": { + "id": 60753, + "nodeType": "StructuredDocumentation", + "src": "7381:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "713a69a7", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDomainPrice", + "nameLocation": "7434:14:90", + "parameters": { + "id": 60756, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60755, + "mutability": "mutable", + "name": "label", + "nameLocation": "7463:5:90", + "nodeType": "VariableDeclaration", + "scope": 60777, + "src": "7449:19:90", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 60754, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "7449:6:90", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "7448:21:90" + }, + "returnParameters": { + "id": 60761, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60758, + "mutability": "mutable", + "name": "usdPrice", + "nameLocation": "7499:8:90", + "nodeType": "VariableDeclaration", + "scope": 60777, + "src": "7491:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60757, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7491:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60760, + "mutability": "mutable", + "name": "ronPrice", + "nameLocation": "7517:8:90", + "nodeType": "VariableDeclaration", + "scope": 60777, + "src": "7509:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60759, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7509:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7490:36:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 60951, + "nodeType": "FunctionDefinition", + "src": "7673:1367:90", + "nodes": [], + "body": { + "id": 60950, + "nodeType": "Block", + "src": "7820:1220:90", + "nodes": [], + "statements": [ + { + "assignments": [ + 60792 + ], + "declarations": [ + { + "constant": false, + "id": 60792, + "mutability": "mutable", + "name": "nameLen", + "nameLocation": "7834:7:90", + "nodeType": "VariableDeclaration", + "scope": 60950, + "src": "7826:15:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60791, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7826:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60796, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 60793, + "name": "label", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60780, + "src": "7844:5:90", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "id": 60794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7850:6:90", + "memberName": "strlen", + "nodeType": "MemberAccess", + "referencedDeclaration": 66729, + "src": "7844:12:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$attached_to$_t_string_memory_ptr_$", + "typeString": "function (string memory) pure returns (uint256)" + } + }, + "id": 60795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7844:14:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7826:32:90" + }, + { + "assignments": [ + 60798 + ], + "declarations": [ + { + "constant": false, + "id": 60798, + "mutability": "mutable", + "name": "lbHash", + "nameLocation": "7872:6:90", + "nodeType": "VariableDeclaration", + "scope": 60950, + "src": "7864:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 60797, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7864:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 60802, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 60799, + "name": "label", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60780, + "src": "7881:5:90", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "id": 60800, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7887:9:90", + "memberName": "hashLabel", + "nodeType": "MemberAccess", + "referencedDeclaration": 66611, + "src": "7881:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$attached_to$_t_string_memory_ptr_$", + "typeString": "function (string memory) pure returns (bytes32)" + } + }, + "id": 60801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7881:17:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7864:34:90" + }, + { + "assignments": [ + 60804 + ], + "declarations": [ + { + "constant": false, + "id": 60804, + "mutability": "mutable", + "name": "overriddenRenewalFee", + "nameLocation": "7912:20:90", + "nodeType": "VariableDeclaration", + "scope": 60950, + "src": "7904:28:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60803, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7904:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60808, + "initialValue": { + "baseExpression": { + "id": 60805, + "name": "_rnFeeOverriding", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60257, + "src": "7935:16:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 60807, + "indexExpression": { + "id": 60806, + "name": "lbHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60798, + "src": "7952:6:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7935:24:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7904:55:90" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60811, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60809, + "name": "overriddenRenewalFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60804, + "src": "7970:20:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 60810, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7994:1:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7970:25:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 60930, + "nodeType": "Block", + "src": "8066:877:90", + "statements": [ + { + "assignments": [ + 60823 + ], + "declarations": [ + { + "constant": false, + "id": 60823, + "mutability": "mutable", + "name": "renewalFeeByLength", + "nameLocation": "8082:18:90", + "nodeType": "VariableDeclaration", + "scope": 60930, + "src": "8074:26:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60822, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8074:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60831, + "initialValue": { + "baseExpression": { + "id": 60824, + "name": "_rnFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60246, + "src": "8103:6:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 60830, + "indexExpression": { + "arguments": [ + { + "id": 60827, + "name": "nameLen", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60792, + "src": "8119:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 60828, + "name": "_rnfMaxLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60231, + "src": "8128:13:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 60825, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53549, + "src": "8110:4:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$53549_$", + "typeString": "type(library Math)" + } + }, + "id": 60826, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8115:3:90", + "memberName": "min", + "nodeType": "MemberAccess", + "referencedDeclaration": 52726, + "src": "8110:8:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 60829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8110:32:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8103:40:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8074:69:90" + }, + { + "expression": { + "id": 60838, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 60832, + "name": "basePrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60786, + "src": "8151:9:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 60834, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "8161:3:90", + "memberName": "usd", + "nodeType": "MemberAccess", + "referencedDeclaration": 64931, + "src": "8151:13:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60835, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60782, + "src": "8167:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 60836, + "name": "renewalFeeByLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60823, + "src": "8178:18:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8167:29:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8151:45:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60839, + "nodeType": "ExpressionStatement", + "src": "8151:45:90" + }, + { + "assignments": [ + 60841 + ], + "declarations": [ + { + "constant": false, + "id": 60841, + "mutability": "mutable", + "name": "id", + "nameLocation": "8212:2:90", + "nodeType": "VariableDeclaration", + "scope": 60930, + "src": "8204:10:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60840, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8204:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60848, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 60844, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66622, + "src": "8235:12:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$66622_$", + "typeString": "type(library LibRNSDomain)" + } + }, + "id": 60845, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8248:6:90", + "memberName": "RON_ID", + "nodeType": "MemberAccess", + "referencedDeclaration": 66585, + "src": "8235:19:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 60846, + "name": "label", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60780, + "src": "8256:5:90", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 60842, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66622, + "src": "8217:12:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$66622_$", + "typeString": "type(library LibRNSDomain)" + } + }, + "id": 60843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8230:4:90", + "memberName": "toId", + "nodeType": "MemberAccess", + "referencedDeclaration": 66601, + "src": "8217:17:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,string memory) pure returns (uint256)" + } + }, + "id": 60847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8217:45:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8204:58:90" + }, + { + "assignments": [ + 60851 + ], + "declarations": [ + { + "constant": false, + "id": 60851, + "mutability": "mutable", + "name": "auction", + "nameLocation": "8281:7:90", + "nodeType": "VariableDeclaration", + "scope": 60930, + "src": "8270:18:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + }, + "typeName": { + "id": 60850, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60849, + "name": "INSAuction", + "nameLocations": [ + "8270:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64912, + "src": "8270:10:90" + }, + "referencedDeclaration": 64912, + "src": "8270:10:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "visibility": "internal" + } + ], + "id": 60853, + "initialValue": { + "id": 60852, + "name": "_auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60225, + "src": "8291:8:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8270:29:90" + }, + { + "condition": { + "arguments": [ + { + "id": 60856, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60841, + "src": "8328:2:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 60854, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60851, + "src": "8311:7:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "id": 60855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8319:8:90", + "memberName": "reserved", + "nodeType": "MemberAccess", + "referencedDeclaration": 64814, + "src": "8311:16:90", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view external returns (bool)" + } + }, + "id": 60857, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8311:20:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60929, + "nodeType": "IfStatement", + "src": "8307:630:90", + "trueBody": { + "id": 60928, + "nodeType": "Block", + "src": "8333:604:90", + "statements": [ + { + "assignments": [ + 60860 + ], + "declarations": [ + { + "constant": false, + "id": 60860, + "mutability": "mutable", + "name": "rns", + "nameLocation": "8354:3:90", + "nodeType": "VariableDeclaration", + "scope": 60928, + "src": "8343:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65555", + "typeString": "contract INSUnified" + }, + "typeName": { + "id": 60859, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60858, + "name": "INSUnified", + "nameLocations": [ + "8343:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65555, + "src": "8343:10:90" + }, + "referencedDeclaration": 65555, + "src": "8343:10:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65555", + "typeString": "contract INSUnified" + } + }, + "visibility": "internal" + } + ], + "id": 60864, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 60861, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60851, + "src": "8360:7:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "id": 60862, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8368:13:90", + "memberName": "getRNSUnified", + "nodeType": "MemberAccess", + "referencedDeclaration": 64911, + "src": "8360:21:90", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_INSUnified_$65555_$", + "typeString": "function () view external returns (contract INSUnified)" + } + }, + "id": 60863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8360:23:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65555", + "typeString": "contract INSUnified" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8343:40:90" + }, + { + "assignments": [ + 60866 + ], + "declarations": [ + { + "constant": false, + "id": 60866, + "mutability": "mutable", + "name": "expiry", + "nameLocation": "8401:6:90", + "nodeType": "VariableDeclaration", + "scope": 60928, + "src": "8393:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60865, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8393:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60882, + "initialValue": { + "arguments": [ + { + "expression": { + "expression": { + "arguments": [ + { + "id": 60871, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60841, + "src": "8455:2:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 60869, + "name": "rns", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60860, + "src": "8441:3:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$65555", + "typeString": "contract INSUnified" + } + }, + "id": 60870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8445:9:90", + "memberName": "getRecord", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "8441:13:90", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_Record_$65368_memory_ptr_$", + "typeString": "function (uint256) view external returns (struct INSUnified.Record memory)" + } + }, + "id": 60872, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8441:17:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65368_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 60873, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8459:3:90", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65367, + "src": "8441:21:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65361_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 60874, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8463:6:90", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65358, + "src": "8441:28:90", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 60875, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60782, + "src": "8471:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "arguments": [ + { + "id": 60878, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8486:6:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 60877, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "8486:6:90", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + } + ], + "id": 60876, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "8481:4:90", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 60879, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8481:12:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint64", + "typeString": "type(uint64)" + } + }, + "id": 60880, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8494:3:90", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "8481:16:90", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 60867, + "name": "LibSafeRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67166, + "src": "8410:12:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibSafeRange_$67166_$", + "typeString": "type(library LibSafeRange)" + } + }, + "id": 60868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8423:17:90", + "memberName": "addWithUpperbound", + "nodeType": "MemberAccess", + "referencedDeclaration": 67165, + "src": "8410:30:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 60881, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8410:88:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8393:105:90" + }, + { + "assignments": [ + 60887, + null + ], + "declarations": [ + { + "constant": false, + "id": 60887, + "mutability": "mutable", + "name": "domainAuction", + "nameLocation": "8541:13:90", + "nodeType": "VariableDeclaration", + "scope": 60928, + "src": "8509:45:90", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64722_memory_ptr", + "typeString": "struct INSAuction.DomainAuction" + }, + "typeName": { + "id": 60886, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60885, + "name": "INSAuction.DomainAuction", + "nameLocations": [ + "8509:10:90", + "8520:13:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64722, + "src": "8509:24:90" + }, + "referencedDeclaration": 64722, + "src": "8509:24:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64722_storage_ptr", + "typeString": "struct INSAuction.DomainAuction" + } + }, + "visibility": "internal" + }, + null + ], + "id": 60892, + "initialValue": { + "arguments": [ + { + "id": 60890, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60841, + "src": "8578:2:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 60888, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60851, + "src": "8559:7:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "id": 60889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8567:10:90", + "memberName": "getAuction", + "nodeType": "MemberAccess", + "referencedDeclaration": 64870, + "src": "8559:18:90", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_DomainAuction_$64722_memory_ptr_$_t_uint256_$", + "typeString": "function (uint256) view external returns (struct INSAuction.DomainAuction memory,uint256)" + } + }, + "id": 60891, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8559:22:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_struct$_DomainAuction_$64722_memory_ptr_$_t_uint256_$", + "typeString": "tuple(struct INSAuction.DomainAuction memory,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8508:73:90" + }, + { + "assignments": [ + 60894 + ], + "declarations": [ + { + "constant": false, + "id": 60894, + "mutability": "mutable", + "name": "claimedAt", + "nameLocation": "8599:9:90", + "nodeType": "VariableDeclaration", + "scope": 60928, + "src": "8591:17:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60893, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8591:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 60898, + "initialValue": { + "expression": { + "expression": { + "id": 60895, + "name": "domainAuction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60887, + "src": "8611:13:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DomainAuction_$64722_memory_ptr", + "typeString": "struct INSAuction.DomainAuction memory" + } + }, + "id": 60896, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8625:3:90", + "memberName": "bid", + "nodeType": "MemberAccess", + "referencedDeclaration": 64721, + "src": "8611:17:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Bid_$64714_memory_ptr", + "typeString": "struct INSAuction.Bid memory" + } + }, + "id": 60897, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8629:9:90", + "memberName": "claimedAt", + "nodeType": "MemberAccess", + "referencedDeclaration": 64713, + "src": "8611:27:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8591:47:90" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 60909, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60901, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60899, + "name": "claimedAt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60894, + "src": "8652:9:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 60900, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8665:1:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8652:14:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60902, + "name": "expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60866, + "src": "8670:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 60903, + "name": "claimedAt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60894, + "src": "8679:9:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8670:18:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 60905, + "name": "auction", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60851, + "src": "8691:7:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSAuction_$64912", + "typeString": "contract INSAuction" + } + }, + "id": 60906, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8699:25:90", + "memberName": "MAX_AUCTION_DOMAIN_EXPIRY", + "nodeType": "MemberAccess", + "referencedDeclaration": 64778, + "src": "8691:33:90", + "typeDescriptions": { + "typeIdentifier": "t_function_external_pure$__$returns$_t_uint64_$", + "typeString": "function () pure external returns (uint64)" + } + }, + "id": 60907, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8691:35:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "8670:56:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8652:74:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 60914, + "nodeType": "IfStatement", + "src": "8648:137:90", + "trueBody": { + "id": 60913, + "nodeType": "Block", + "src": "8728:57:90", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 60910, + "name": "ExceedAuctionDomainExpiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64924, + "src": "8747:25:90", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 60911, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8747:27:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 60912, + "nodeType": "RevertStatement", + "src": "8740:34:90" + } + ] + } + }, + { + "expression": { + "id": 60926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 60915, + "name": "tax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60789, + "src": "8855:3:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 60917, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "8859:3:90", + "memberName": "usd", + "nodeType": "MemberAccess", + "referencedDeclaration": 64931, + "src": "8855:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 60920, + "name": "_taxRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60228, + "src": "8877:9:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 60922, + "name": "lbHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60798, + "src": "8904:6:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 60921, + "name": "_getDomainPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61315, + "src": "8888:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_uint256_$", + "typeString": "function (bytes32) view returns (uint256)" + } + }, + "id": 60923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8888:23:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 60924, + "name": "MAX_PERCENTAGE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60200, + "src": "8913:14:90", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 60918, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53549, + "src": "8865:4:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$53549_$", + "typeString": "type(library Math)" + } + }, + "id": 60919, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8870:6:90", + "memberName": "mulDiv", + "nodeType": "MemberAccess", + "referencedDeclaration": 52897, + "src": "8865:11:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 60925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8865:63:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8855:73:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60927, + "nodeType": "ExpressionStatement", + "src": "8855:73:90" + } + ] + } + } + ] + }, + "id": 60931, + "nodeType": "IfStatement", + "src": "7966:977:90", + "trueBody": { + "id": 60821, + "nodeType": "Block", + "src": "7997:63:90", + "statements": [ + { + "expression": { + "id": 60819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 60812, + "name": "basePrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60786, + "src": "8005:9:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 60814, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "8015:3:90", + "memberName": "usd", + "nodeType": "MemberAccess", + "referencedDeclaration": 64931, + "src": "8005:13:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 60818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 60815, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60782, + "src": "8021:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "id": 60817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "~", + "prefix": true, + "src": "8032:21:90", + "subExpression": { + "id": 60816, + "name": "overriddenRenewalFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60804, + "src": "8033:20:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8021:32:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8005:48:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60820, + "nodeType": "ExpressionStatement", + "src": "8005:48:90" + } + ] + } + }, + { + "expression": { + "id": 60939, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 60932, + "name": "tax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60789, + "src": "8949:3:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 60934, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "8953:3:90", + "memberName": "ron", + "nodeType": "MemberAccess", + "referencedDeclaration": 64933, + "src": "8949:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 60936, + "name": "tax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60789, + "src": "8975:3:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 60937, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8979:3:90", + "memberName": "usd", + "nodeType": "MemberAccess", + "referencedDeclaration": 64931, + "src": "8975:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60935, + "name": "convertUSDToRON", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60981, + "src": "8959:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 60938, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8959:24:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8949:34:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60940, + "nodeType": "ExpressionStatement", + "src": "8949:34:90" + }, + { + "expression": { + "id": 60948, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 60941, + "name": "basePrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60786, + "src": "8989:9:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 60943, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "8999:3:90", + "memberName": "ron", + "nodeType": "MemberAccess", + "referencedDeclaration": 64933, + "src": "8989:13:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "expression": { + "id": 60945, + "name": "basePrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60786, + "src": "9021:9:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 60946, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9031:3:90", + "memberName": "usd", + "nodeType": "MemberAccess", + "referencedDeclaration": 64931, + "src": "9021:13:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 60944, + "name": "convertUSDToRON", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60981, + "src": "9005:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 60947, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9005:30:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8989:46:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 60949, + "nodeType": "ExpressionStatement", + "src": "8989:46:90" + } + ] + }, + "baseFunctions": [ + 65088 + ], + "documentation": { + "id": 60778, + "nodeType": "StructuredDocumentation", + "src": "7629:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "f4651f49", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRenewalFee", + "nameLocation": "7682:13:90", + "parameters": { + "id": 60783, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60780, + "mutability": "mutable", + "name": "label", + "nameLocation": "7710:5:90", + "nodeType": "VariableDeclaration", + "scope": 60951, + "src": "7696:19:90", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 60779, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "7696:6:90", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60782, + "mutability": "mutable", + "name": "duration", + "nameLocation": "7725:8:90", + "nodeType": "VariableDeclaration", + "scope": 60951, + "src": "7717:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60781, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7717:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7695:39:90" + }, + "returnParameters": { + "id": 60790, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60786, + "mutability": "mutable", + "name": "basePrice", + "nameLocation": "7785:9:90", + "nodeType": "VariableDeclaration", + "scope": 60951, + "src": "7768:26:90", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice" + }, + "typeName": { + "id": 60785, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60784, + "name": "UnitPrice", + "nameLocations": [ + "7768:9:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64934, + "src": "7768:9:90" + }, + "referencedDeclaration": 64934, + "src": "7768:9:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_storage_ptr", + "typeString": "struct INSDomainPrice.UnitPrice" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 60789, + "mutability": "mutable", + "name": "tax", + "nameLocation": "7813:3:90", + "nodeType": "VariableDeclaration", + "scope": 60951, + "src": "7796:20:90", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice" + }, + "typeName": { + "id": 60788, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 60787, + "name": "UnitPrice", + "nameLocations": [ + "7796:9:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64934, + "src": "7796:9:90" + }, + "referencedDeclaration": 64934, + "src": "7796:9:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64934_storage_ptr", + "typeString": "struct INSDomainPrice.UnitPrice" + } + }, + "visibility": "internal" + } + ], + "src": "7767:50:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 60981, + "nodeType": "FunctionDefinition", + "src": "9088:286:90", + "nodes": [], + "body": { + "id": 60980, + "nodeType": "Block", + "src": "9166:208:90", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60969, + "name": "usdWei", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60954, + "src": "9285:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 60974, + "name": "USD_DECIMALS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60196, + "src": "9325:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + ], + "id": 60973, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9318:6:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint32_$", + "typeString": "type(uint32)" + }, + "typeName": { + "id": 60972, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "9318:6:90", + "typeDescriptions": {} + } + }, + "id": 60975, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9318:20:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 60971, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9312:5:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int32_$", + "typeString": "type(int32)" + }, + "typeName": { + "id": 60970, + "name": "int32", + "nodeType": "ElementaryTypeName", + "src": "9312:5:90", + "typeDescriptions": {} + } + }, + "id": 60976, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9312:27:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int32", + "typeString": "int32" + } + }, + { + "hexValue": "3138", + "id": 60977, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9360:2:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_int32", + "typeString": "int32" + }, + { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + } + ], + "expression": { + "arguments": [ + { + "id": 60966, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "-", + "prefix": true, + "src": "9258:3:90", + "subExpression": { + "hexValue": "3138", + "id": 60965, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9259:2:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + "typeDescriptions": { + "typeIdentifier": "t_rational_minus_18_by_1", + "typeString": "int_const -18" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_minus_18_by_1", + "typeString": "int_const -18" + } + ], + "expression": { + "arguments": [ + { + "id": 60961, + "name": "_pythIdForRONUSD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60237, + "src": "9205:16:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 60962, + "name": "_maxAcceptableAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60234, + "src": "9223:17:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 60959, + "name": "_pyth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60221, + "src": "9179:5:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "id": 60960, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9185:19:90", + "memberName": "getPriceNoOlderThan", + "nodeType": "MemberAccess", + "referencedDeclaration": 54768, + "src": "9179:25:90", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_struct$_Price_$54869_memory_ptr_$", + "typeString": "function (bytes32,uint256) view external returns (struct PythStructs.Price memory)" + } + }, + "id": 60963, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9179:62:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Price_$54869_memory_ptr", + "typeString": "struct PythStructs.Price memory" + } + }, + "id": 60964, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9242:7:90", + "memberName": "inverse", + "nodeType": "MemberAccess", + "referencedDeclaration": 67956, + "src": "9179:70:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Price_$54869_memory_ptr_$_t_int32_$returns$_t_struct$_Price_$54869_memory_ptr_$attached_to$_t_struct$_Price_$54869_memory_ptr_$", + "typeString": "function (struct PythStructs.Price memory,int32) pure returns (struct PythStructs.Price memory)" + } + }, + "id": 60967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [ + "9252:4:90" + ], + "names": [ + "expo" + ], + "nodeType": "FunctionCall", + "src": "9179:85:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Price_$54869_memory_ptr", + "typeString": "struct PythStructs.Price memory" + } + }, + "id": 60968, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9265:3:90", + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 67848, + "src": "9179:89:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Price_$54869_memory_ptr_$_t_uint256_$_t_int32_$_t_int32_$returns$_t_uint256_$attached_to$_t_struct$_Price_$54869_memory_ptr_$", + "typeString": "function (struct PythStructs.Price memory,uint256,int32,int32) pure returns (uint256)" + } + }, + "id": 60978, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [ + "9277:6:90", + "9299:11:90", + "9347:11:90" + ], + "names": [ + "inpWei", + "inpDecimals", + "outDecimals" + ], + "nodeType": "FunctionCall", + "src": "9179:190:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 60958, + "id": 60979, + "nodeType": "Return", + "src": "9172:197:90" + } + ] + }, + "baseFunctions": [ + 65149 + ], + "documentation": { + "id": 60952, + "nodeType": "StructuredDocumentation", + "src": "9044:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "7174026e", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "convertUSDToRON", + "nameLocation": "9097:15:90", + "parameters": { + "id": 60955, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60954, + "mutability": "mutable", + "name": "usdWei", + "nameLocation": "9121:6:90", + "nodeType": "VariableDeclaration", + "scope": 60981, + "src": "9113:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60953, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9113:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9112:16:90" + }, + "returnParameters": { + "id": 60958, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60957, + "mutability": "mutable", + "name": "ronWei", + "nameLocation": "9158:6:90", + "nodeType": "VariableDeclaration", + "scope": 60981, + "src": "9150:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60956, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9150:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9149:16:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 61007, + "nodeType": "FunctionDefinition", + "src": "9422:263:90", + "nodes": [], + "body": { + "id": 61006, + "nodeType": "Block", + "src": "9500:185:90", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 60995, + "name": "ronWei", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60984, + "src": "9596:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "3138", + "id": 60996, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9623:2:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + "value": "18" + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 61001, + "name": "USD_DECIMALS", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60196, + "src": "9659:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + ], + "id": 61000, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9652:6:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint32_$", + "typeString": "type(uint32)" + }, + "typeName": { + "id": 60999, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "9652:6:90", + "typeDescriptions": {} + } + }, + "id": 61002, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9652:20:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "id": 60998, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9646:5:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_int32_$", + "typeString": "type(int32)" + }, + "typeName": { + "id": 60997, + "name": "int32", + "nodeType": "ElementaryTypeName", + "src": "9646:5:90", + "typeDescriptions": {} + } + }, + "id": 61003, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9646:27:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_int32", + "typeString": "int32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_18_by_1", + "typeString": "int_const 18" + }, + { + "typeIdentifier": "t_int32", + "typeString": "int32" + } + ], + "expression": { + "arguments": [ + { + "id": 60991, + "name": "_pythIdForRONUSD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60237, + "src": "9539:16:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 60992, + "name": "_maxAcceptableAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60234, + "src": "9557:17:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 60989, + "name": "_pyth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60221, + "src": "9513:5:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "id": 60990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9519:19:90", + "memberName": "getPriceNoOlderThan", + "nodeType": "MemberAccess", + "referencedDeclaration": 54768, + "src": "9513:25:90", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_struct$_Price_$54869_memory_ptr_$", + "typeString": "function (bytes32,uint256) view external returns (struct PythStructs.Price memory)" + } + }, + "id": 60993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9513:62:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Price_$54869_memory_ptr", + "typeString": "struct PythStructs.Price memory" + } + }, + "id": 60994, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9576:3:90", + "memberName": "mul", + "nodeType": "MemberAccess", + "referencedDeclaration": 67848, + "src": "9513:66:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Price_$54869_memory_ptr_$_t_uint256_$_t_int32_$_t_int32_$returns$_t_uint256_$attached_to$_t_struct$_Price_$54869_memory_ptr_$", + "typeString": "function (struct PythStructs.Price memory,uint256,int32,int32) pure returns (uint256)" + } + }, + "id": 61004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [ + "9588:6:90", + "9610:11:90", + "9633:11:90" + ], + "names": [ + "inpWei", + "inpDecimals", + "outDecimals" + ], + "nodeType": "FunctionCall", + "src": "9513:167:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 60988, + "id": 61005, + "nodeType": "Return", + "src": "9506:174:90" + } + ] + }, + "baseFunctions": [ + 65157 + ], + "documentation": { + "id": 60982, + "nodeType": "StructuredDocumentation", + "src": "9378:41:90", + "text": " @inheritdoc INSDomainPrice" + }, + "functionSelector": "037f1769", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "convertRONToUSD", + "nameLocation": "9431:15:90", + "parameters": { + "id": 60985, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60984, + "mutability": "mutable", + "name": "ronWei", + "nameLocation": "9455:6:90", + "nodeType": "VariableDeclaration", + "scope": 61007, + "src": "9447:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60983, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9447:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9446:16:90" + }, + "returnParameters": { + "id": 60988, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 60987, + "mutability": "mutable", + "name": "usdWei", + "nameLocation": "9492:6:90", + "nodeType": "VariableDeclaration", + "scope": 61007, + "src": "9484:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 60986, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9484:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9483:16:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 61054, + "nodeType": "FunctionDefinition", + "src": "9783:419:90", + "nodes": [], + "body": { + "id": 61053, + "nodeType": "Block", + "src": "10012:190:90", + "nodes": [], + "statements": [ + { + "expression": { + "id": 61028, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61025, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61023, + "src": "10018:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 61026, + "name": "lbHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61011, + "src": "10027:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + "id": 61027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10036:6:90", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "10027:15:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10018:24:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61029, + "nodeType": "ExpressionStatement", + "src": "10018:24:90" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 61047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 61042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 61037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 61030, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61023, + "src": "10052:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 61031, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10062:1:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "10052:11:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 61033, + "name": "ronPrices", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61014, + "src": "10067:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 61034, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10077:6:90", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "10067:16:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 61035, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61023, + "src": "10087:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10067:26:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "10052:41:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61041, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 61038, + "name": "proofHashes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61017, + "src": "10097:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[] calldata" + } + }, + "id": 61039, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10109:6:90", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "10097:18:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 61040, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61023, + "src": "10119:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10097:28:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "10052:73:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61046, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 61043, + "name": "setTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61020, + "src": "10129:8:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 61044, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10138:6:90", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "10129:15:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 61045, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61023, + "src": "10148:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10129:25:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "10052:102:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 61052, + "nodeType": "IfStatement", + "src": "10048:150:90", + "trueBody": { + "id": 61051, + "nodeType": "Block", + "src": "10156:42:90", + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61048, + "name": "InvalidArrayLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64920, + "src": "10171:18:90", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 61049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10171:20:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61050, + "nodeType": "RevertStatement", + "src": "10164:27:90" + } + ] + } + } + ] + }, + "documentation": { + "id": 61008, + "nodeType": "StructuredDocumentation", + "src": "9689:91:90", + "text": " @dev Reverts if the arguments of the method {bulkSetDomainPrice} is invalid." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_requireBulkSetDomainPriceArgumentsValid", + "nameLocation": "9792:40:90", + "parameters": { + "id": 61021, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61011, + "mutability": "mutable", + "name": "lbHashes", + "nameLocation": "9857:8:90", + "nodeType": "VariableDeclaration", + "scope": 61054, + "src": "9838:27:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 61009, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9838:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 61010, + "nodeType": "ArrayTypeName", + "src": "9838:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61014, + "mutability": "mutable", + "name": "ronPrices", + "nameLocation": "9890:9:90", + "nodeType": "VariableDeclaration", + "scope": 61054, + "src": "9871:28:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 61012, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9871:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61013, + "nodeType": "ArrayTypeName", + "src": "9871:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61017, + "mutability": "mutable", + "name": "proofHashes", + "nameLocation": "9924:11:90", + "nodeType": "VariableDeclaration", + "scope": 61054, + "src": "9905:30:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", + "typeString": "bytes32[]" + }, + "typeName": { + "baseType": { + "id": 61015, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9905:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 61016, + "nodeType": "ArrayTypeName", + "src": "9905:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", + "typeString": "bytes32[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61020, + "mutability": "mutable", + "name": "setTypes", + "nameLocation": "9960:8:90", + "nodeType": "VariableDeclaration", + "scope": 61054, + "src": "9941:27:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 61018, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9941:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61019, + "nodeType": "ArrayTypeName", + "src": "9941:9:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "9832:140:90" + }, + "returnParameters": { + "id": 61024, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61023, + "mutability": "mutable", + "name": "length", + "nameLocation": "10004:6:90", + "nodeType": "VariableDeclaration", + "scope": 61054, + "src": "9996:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61022, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9996:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9995:16:90" + }, + "scope": 61316, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "id": 61119, + "nodeType": "FunctionDefinition", + "src": "10321:503:90", + "nodes": [], + "body": { + "id": 61118, + "nodeType": "Block", + "src": "10507:317:90", + "nodes": [], + "statements": [ + { + "assignments": [ + 61073 + ], + "declarations": [ + { + "constant": false, + "id": 61073, + "mutability": "mutable", + "name": "usdPrice", + "nameLocation": "10521:8:90", + "nodeType": "VariableDeclaration", + "scope": 61118, + "src": "10513:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61072, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10513:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 61077, + "initialValue": { + "arguments": [ + { + "id": 61075, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61061, + "src": "10548:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 61074, + "name": "convertRONToUSD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61007, + "src": "10532:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256) view returns (uint256)" + } + }, + "id": 61076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10532:25:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10513:44:90" + }, + { + "assignments": [ + 61080 + ], + "declarations": [ + { + "constant": false, + "id": 61080, + "mutability": "mutable", + "name": "dp", + "nameLocation": "10588:2:90", + "nodeType": "VariableDeclaration", + "scope": 61118, + "src": "10563:27:90", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper" + }, + "typeName": { + "id": 61079, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61078, + "name": "TimestampWrapper", + "nameLocations": [ + "10563:16:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67100, + "src": "10563:16:90" + }, + "referencedDeclaration": 67100, + "src": "10563:16:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper" + } + }, + "visibility": "internal" + } + ], + "id": 61084, + "initialValue": { + "baseExpression": { + "id": 61081, + "name": "_dp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60252, + "src": "10593:3:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TimestampWrapper_$67100_storage_$", + "typeString": "mapping(bytes32 => struct TimestampWrapper storage ref)" + } + }, + "id": 61083, + "indexExpression": { + "id": 61082, + "name": "lbHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61059, + "src": "10597:6:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10593:11:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage", + "typeString": "struct TimestampWrapper storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10563:41:90" + }, + { + "expression": { + "id": 61092, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61085, + "name": "updated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61070, + "src": "10610:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 61091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 61086, + "name": "forced", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61067, + "src": "10620:6:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61090, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 61087, + "name": "dp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61080, + "src": "10630:2:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper storage pointer" + } + }, + "id": 61088, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10633:5:90", + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": 67097, + "src": "10630:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 61089, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61073, + "src": "10641:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10630:19:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "10620:29:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "10610:39:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 61093, + "nodeType": "ExpressionStatement", + "src": "10610:39:90" + }, + { + "condition": { + "id": 61094, + "name": "updated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61070, + "src": "10660:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 61117, + "nodeType": "IfStatement", + "src": "10656:164:90", + "trueBody": { + "id": 61116, + "nodeType": "Block", + "src": "10669:151:90", + "statements": [ + { + "expression": { + "id": 61099, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 61095, + "name": "dp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61080, + "src": "10677:2:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper storage pointer" + } + }, + "id": 61097, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "10680:5:90", + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": 67097, + "src": "10677:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 61098, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61073, + "src": "10688:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10677:19:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61100, + "nodeType": "ExpressionStatement", + "src": "10677:19:90" + }, + { + "expression": { + "id": 61106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 61101, + "name": "dp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61080, + "src": "10704:2:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper storage pointer" + } + }, + "id": 61103, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "10707:9:90", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 67099, + "src": "10704:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 61104, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "10719:5:90", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 61105, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10725:9:90", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "10719:15:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10704:30:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61107, + "nodeType": "ExpressionStatement", + "src": "10704:30:90" + }, + { + "eventCall": { + "arguments": [ + { + "id": 61109, + "name": "operator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61057, + "src": "10766:8:90", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 61110, + "name": "lbHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61059, + "src": "10776:6:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 61111, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61073, + "src": "10784:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 61112, + "name": "proofHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61063, + "src": "10794:9:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 61113, + "name": "setType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61065, + "src": "10805:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 61108, + "name": "DomainPriceUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64979, + "src": "10747:18:90", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$_t_bytes32_$_t_uint256_$returns$__$", + "typeString": "function (address,bytes32,uint256,bytes32,uint256)" + } + }, + "id": 61114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10747:66:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61115, + "nodeType": "EmitStatement", + "src": "10742:71:90" + } + ] + } + } + ] + }, + "documentation": { + "id": 61055, + "nodeType": "StructuredDocumentation", + "src": "10206:112:90", + "text": " @dev Helper method to set domain price.\n Emits an event {DomainPriceUpdated} optionally." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setDomainPrice", + "nameLocation": "10330:15:90", + "parameters": { + "id": 61068, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61057, + "mutability": "mutable", + "name": "operator", + "nameLocation": "10359:8:90", + "nodeType": "VariableDeclaration", + "scope": 61119, + "src": "10351:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 61056, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10351:7:90", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61059, + "mutability": "mutable", + "name": "lbHash", + "nameLocation": "10381:6:90", + "nodeType": "VariableDeclaration", + "scope": 61119, + "src": "10373:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61058, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10373:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61061, + "mutability": "mutable", + "name": "ronPrice", + "nameLocation": "10401:8:90", + "nodeType": "VariableDeclaration", + "scope": 61119, + "src": "10393:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61060, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10393:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61063, + "mutability": "mutable", + "name": "proofHash", + "nameLocation": "10423:9:90", + "nodeType": "VariableDeclaration", + "scope": 61119, + "src": "10415:17:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61062, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "10415:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61065, + "mutability": "mutable", + "name": "setType", + "nameLocation": "10446:7:90", + "nodeType": "VariableDeclaration", + "scope": 61119, + "src": "10438:15:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61064, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10438:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61067, + "mutability": "mutable", + "name": "forced", + "nameLocation": "10464:6:90", + "nodeType": "VariableDeclaration", + "scope": 61119, + "src": "10459:11:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 61066, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10459:4:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10345:129:90" + }, + "returnParameters": { + "id": 61071, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61070, + "mutability": "mutable", + "name": "updated", + "nameLocation": "10498:7:90", + "nodeType": "VariableDeclaration", + "scope": 61119, + "src": "10493:12:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 61069, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10493:4:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10492:14:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 61136, + "nodeType": "FunctionDefinition", + "src": "10926:121:90", + "nodes": [], + "body": { + "id": 61135, + "nodeType": "Block", + "src": "10972:75:90", + "nodes": [], + "statements": [ + { + "expression": { + "id": 61127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61125, + "name": "_taxRatio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60228, + "src": "10978:9:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 61126, + "name": "ratio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61122, + "src": "10990:5:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10978:17:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61128, + "nodeType": "ExpressionStatement", + "src": "10978:17:90" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61130, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "11022:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 61131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11022:12:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 61132, + "name": "ratio", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61122, + "src": "11036:5:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 61129, + "name": "TaxRatioUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64941, + "src": "11006:15:90", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 61133, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11006:36:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61134, + "nodeType": "EmitStatement", + "src": "11001:41:90" + } + ] + }, + "documentation": { + "id": 61120, + "nodeType": "StructuredDocumentation", + "src": "10828:95:90", + "text": " @dev Sets renewal reservation ratio.\n Emits an event {TaxRatioUpdated}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setTaxRatio", + "nameLocation": "10935:12:90", + "parameters": { + "id": 61123, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61122, + "mutability": "mutable", + "name": "ratio", + "nameLocation": "10956:5:90", + "nodeType": "VariableDeclaration", + "scope": 61136, + "src": "10948:13:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61121, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10948:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10947:15:90" + }, + "returnParameters": { + "id": 61124, + "nodeType": "ParameterList", + "parameters": [], + "src": "10972:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 61157, + "nodeType": "FunctionDefinition", + "src": "11157:243:90", + "nodes": [], + "body": { + "id": 61156, + "nodeType": "Block", + "src": "11244:156:90", + "nodes": [], + "statements": [ + { + "expression": { + "id": 61145, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61143, + "name": "_dpDownScaler", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60241, + "src": "11250:13:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage", + "typeString": "struct PeriodScaler storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 61144, + "name": "domainPriceScaleRule", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61140, + "src": "11266:20:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler calldata" + } + }, + "src": "11250:36:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage", + "typeString": "struct PeriodScaler storage ref" + } + }, + "id": 61146, + "nodeType": "ExpressionStatement", + "src": "11250:36:90" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61148, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "11325:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 61149, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11325:12:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 61150, + "name": "domainPriceScaleRule", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61140, + "src": "11339:20:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler calldata" + } + }, + "id": 61151, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11360:5:90", + "memberName": "ratio", + "nodeType": "MemberAccess", + "referencedDeclaration": 67174, + "src": "11339:26:90", + "typeDescriptions": { + "typeIdentifier": "t_uint192", + "typeString": "uint192" + } + }, + { + "expression": { + "id": 61152, + "name": "domainPriceScaleRule", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61140, + "src": "11367:20:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler calldata" + } + }, + "id": 61153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11388:6:90", + "memberName": "period", + "nodeType": "MemberAccess", + "referencedDeclaration": 67176, + "src": "11367:27:90", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint192", + "typeString": "uint192" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 61147, + "name": "DomainPriceScaleRuleUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64988, + "src": "11297:27:90", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint192_$_t_uint64_$returns$__$", + "typeString": "function (address,uint192,uint64)" + } + }, + "id": 61154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11297:98:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61155, + "nodeType": "EmitStatement", + "src": "11292:103:90" + } + ] + }, + "documentation": { + "id": 61137, + "nodeType": "StructuredDocumentation", + "src": "11051:103:90", + "text": " @dev Sets domain price scale rule.\n Emits events {DomainPriceScaleRuleUpdated}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setDomainPriceScaleRule", + "nameLocation": "11166:24:90", + "parameters": { + "id": 61141, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61140, + "mutability": "mutable", + "name": "domainPriceScaleRule", + "nameLocation": "11213:20:90", + "nodeType": "VariableDeclaration", + "scope": 61157, + "src": "11191:42:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_calldata_ptr", + "typeString": "struct PeriodScaler" + }, + "typeName": { + "id": 61139, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61138, + "name": "PeriodScaler", + "nameLocations": [ + "11191:12:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67177, + "src": "11191:12:90" + }, + "referencedDeclaration": 67177, + "src": "11191:12:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage_ptr", + "typeString": "struct PeriodScaler" + } + }, + "visibility": "internal" + } + ], + "src": "11190:44:90" + }, + "returnParameters": { + "id": 61142, + "nodeType": "ParameterList", + "parameters": [], + "src": "11244:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 61241, + "nodeType": "FunctionDefinition", + "src": "11557:754:90", + "nodes": [], + "body": { + "id": 61240, + "nodeType": "Block", + "src": "11634:677:90", + "nodes": [], + "statements": [ + { + "assignments": [ + 61166 + ], + "declarations": [ + { + "constant": false, + "id": 61166, + "mutability": "mutable", + "name": "operator", + "nameLocation": "11648:8:90", + "nodeType": "VariableDeclaration", + "scope": 61240, + "src": "11640:16:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 61165, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11640:7:90", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 61169, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61167, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "11659:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 61168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11659:12:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11640:31:90" + }, + { + "assignments": [ + 61172 + ], + "declarations": [ + { + "constant": false, + "id": 61172, + "mutability": "mutable", + "name": "renewalFee", + "nameLocation": "11695:10:90", + "nodeType": "VariableDeclaration", + "scope": 61240, + "src": "11677:28:90", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee" + }, + "typeName": { + "id": 61171, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61170, + "name": "RenewalFee", + "nameLocations": [ + "11677:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64929, + "src": "11677:10:90" + }, + "referencedDeclaration": 64929, + "src": "11677:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee" + } + }, + "visibility": "internal" + } + ], + "id": 61173, + "nodeType": "VariableDeclarationStatement", + "src": "11677:28:90" + }, + { + "assignments": [ + 61175 + ], + "declarations": [ + { + "constant": false, + "id": 61175, + "mutability": "mutable", + "name": "length", + "nameLocation": "11719:6:90", + "nodeType": "VariableDeclaration", + "scope": 61240, + "src": "11711:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61174, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11711:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 61178, + "initialValue": { + "expression": { + "id": 61176, + "name": "renewalFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61162, + "src": "11728:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee calldata[] calldata" + } + }, + "id": 61177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11740:6:90", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "11728:18:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11711:35:90" + }, + { + "assignments": [ + 61180 + ], + "declarations": [ + { + "constant": false, + "id": 61180, + "mutability": "mutable", + "name": "maxRenewalFeeLength", + "nameLocation": "11760:19:90", + "nodeType": "VariableDeclaration", + "scope": 61240, + "src": "11752:27:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61179, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11752:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 61182, + "initialValue": { + "id": 61181, + "name": "_rnfMaxLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60231, + "src": "11782:13:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11752:43:90" + }, + { + "body": { + "id": 61224, + "nodeType": "Block", + "src": "11831:308:90", + "statements": [ + { + "expression": { + "id": 61193, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61189, + "name": "renewalFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61172, + "src": "11839:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 61190, + "name": "renewalFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61162, + "src": "11852:11:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee calldata[] calldata" + } + }, + "id": 61192, + "indexExpression": { + "id": 61191, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61184, + "src": "11864:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11852:14:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee calldata" + } + }, + "src": "11839:27:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory" + } + }, + "id": 61194, + "nodeType": "ExpressionStatement", + "src": "11839:27:90" + }, + { + "expression": { + "id": 61202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61195, + "name": "maxRenewalFeeLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61180, + "src": "11874:19:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 61198, + "name": "maxRenewalFeeLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61180, + "src": "11905:19:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 61199, + "name": "renewalFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61172, + "src": "11926:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory" + } + }, + "id": 61200, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11937:11:90", + "memberName": "labelLength", + "nodeType": "MemberAccess", + "referencedDeclaration": 64926, + "src": "11926:22:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 61196, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 53549, + "src": "11896:4:90", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Math_$53549_$", + "typeString": "type(library Math)" + } + }, + "id": 61197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11901:3:90", + "memberName": "max", + "nodeType": "MemberAccess", + "referencedDeclaration": 52708, + "src": "11896:8:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 61201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11896:53:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11874:75:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61203, + "nodeType": "ExpressionStatement", + "src": "11874:75:90" + }, + { + "expression": { + "id": 61210, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 61204, + "name": "_rnFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60246, + "src": "11957:6:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 61207, + "indexExpression": { + "expression": { + "id": 61205, + "name": "renewalFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61172, + "src": "11964:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory" + } + }, + "id": 61206, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11975:11:90", + "memberName": "labelLength", + "nodeType": "MemberAccess", + "referencedDeclaration": 64926, + "src": "11964:22:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "11957:30:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 61208, + "name": "renewalFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61172, + "src": "11990:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory" + } + }, + "id": 61209, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12001:3:90", + "memberName": "fee", + "nodeType": "MemberAccess", + "referencedDeclaration": 64928, + "src": "11990:14:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11957:47:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61211, + "nodeType": "ExpressionStatement", + "src": "11957:47:90" + }, + { + "eventCall": { + "arguments": [ + { + "id": 61213, + "name": "operator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61166, + "src": "12043:8:90", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 61214, + "name": "renewalFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61172, + "src": "12053:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory" + } + }, + "id": 61215, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12064:11:90", + "memberName": "labelLength", + "nodeType": "MemberAccess", + "referencedDeclaration": 64926, + "src": "12053:22:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 61216, + "name": "renewalFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61172, + "src": "12077:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_memory_ptr", + "typeString": "struct INSDomainPrice.RenewalFee memory" + } + }, + "id": 61217, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12088:3:90", + "memberName": "fee", + "nodeType": "MemberAccess", + "referencedDeclaration": 64928, + "src": "12077:14:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 61212, + "name": "RenewalFeeByLengthUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64957, + "src": "12017:25:90", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256,uint256)" + } + }, + "id": 61218, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12017:75:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61219, + "nodeType": "EmitStatement", + "src": "12012:80:90" + }, + { + "id": 61223, + "nodeType": "UncheckedBlock", + "src": "12101:32:90", + "statements": [ + { + "expression": { + "id": 61221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "12121:3:90", + "subExpression": { + "id": 61220, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61184, + "src": "12123:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61222, + "nodeType": "ExpressionStatement", + "src": "12121:3:90" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61188, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 61186, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61184, + "src": "11818:1:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 61187, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61175, + "src": "11822:6:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11818:10:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 61225, + "initializationExpression": { + "assignments": [ + 61184 + ], + "declarations": [ + { + "constant": false, + "id": 61184, + "mutability": "mutable", + "name": "i", + "nameLocation": "11815:1:90", + "nodeType": "VariableDeclaration", + "scope": 61225, + "src": "11807:9:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61183, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11807:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 61185, + "nodeType": "VariableDeclarationStatement", + "src": "11807:9:90" + }, + "nodeType": "ForStatement", + "src": "11802:337:90" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 61226, + "name": "maxRenewalFeeLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61180, + "src": "12149:19:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 61227, + "name": "_rnfMaxLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60231, + "src": "12172:13:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12149:36:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 61239, + "nodeType": "IfStatement", + "src": "12145:162:90", + "trueBody": { + "id": 61238, + "nodeType": "Block", + "src": "12187:120:90", + "statements": [ + { + "expression": { + "id": 61231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61229, + "name": "_rnfMaxLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60231, + "src": "12195:13:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 61230, + "name": "maxRenewalFeeLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61180, + "src": "12211:19:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12195:35:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61232, + "nodeType": "ExpressionStatement", + "src": "12195:35:90" + }, + { + "eventCall": { + "arguments": [ + { + "id": 61234, + "name": "operator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61166, + "src": "12270:8:90", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 61235, + "name": "maxRenewalFeeLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61180, + "src": "12280:19:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 61233, + "name": "MaxRenewalFeeLengthUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64948, + "src": "12243:26:90", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 61236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12243:57:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61237, + "nodeType": "EmitStatement", + "src": "12238:62:90" + } + ] + } + } + ] + }, + "documentation": { + "id": 61158, + "nodeType": "StructuredDocumentation", + "src": "11404:150:90", + "text": " @dev Sets renewal fee.\n Emits events {RenewalFeeByLengthUpdated}.\n Emits an event {MaxRenewalFeeLengthUpdated} optionally." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setRenewalFeeByLengths", + "nameLocation": "11566:23:90", + "parameters": { + "id": 61163, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61162, + "mutability": "mutable", + "name": "renewalFees", + "nameLocation": "11612:11:90", + "nodeType": "VariableDeclaration", + "scope": 61241, + "src": "11590:33:90", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct INSDomainPrice.RenewalFee[]" + }, + "typeName": { + "baseType": { + "id": 61160, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61159, + "name": "RenewalFee", + "nameLocations": [ + "11590:10:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64929, + "src": "11590:10:90" + }, + "referencedDeclaration": 64929, + "src": "11590:10:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RenewalFee_$64929_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee" + } + }, + "id": 61161, + "nodeType": "ArrayTypeName", + "src": "11590:12:90", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_RenewalFee_$64929_storage_$dyn_storage_ptr", + "typeString": "struct INSDomainPrice.RenewalFee[]" + } + }, + "visibility": "internal" + } + ], + "src": "11589:35:90" + }, + "returnParameters": { + "id": 61164, + "nodeType": "ParameterList", + "parameters": [], + "src": "11634:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 61273, + "nodeType": "FunctionDefinition", + "src": "12412:296:90", + "nodes": [], + "body": { + "id": 61272, + "nodeType": "Block", + "src": "12514:194:90", + "nodes": [], + "statements": [ + { + "expression": { + "id": 61254, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61252, + "name": "_pyth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60221, + "src": "12520:5:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 61253, + "name": "pyth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61245, + "src": "12528:4:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "src": "12520:12:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "id": 61255, + "nodeType": "ExpressionStatement", + "src": "12520:12:90" + }, + { + "expression": { + "id": 61258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61256, + "name": "_maxAcceptableAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60234, + "src": "12538:17:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 61257, + "name": "maxAcceptableAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61247, + "src": "12558:16:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12538:36:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 61259, + "nodeType": "ExpressionStatement", + "src": "12538:36:90" + }, + { + "expression": { + "id": 61262, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 61260, + "name": "_pythIdForRONUSD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60237, + "src": "12580:16:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 61261, + "name": "pythIdForRONUSD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61249, + "src": "12599:15:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "12580:34:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 61263, + "nodeType": "ExpressionStatement", + "src": "12580:34:90" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 61265, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "12649:10:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 61266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12649:12:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 61267, + "name": "pyth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61245, + "src": "12663:4:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + { + "id": 61268, + "name": "maxAcceptableAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61247, + "src": "12669:16:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 61269, + "name": "pythIdForRONUSD", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61249, + "src": "12687:15:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 61264, + "name": "PythOracleConfigUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65000, + "src": "12625:23:90", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_IPyth_$54836_$_t_uint256_$_t_bytes32_$returns$__$", + "typeString": "function (address,contract IPyth,uint256,bytes32)" + } + }, + "id": 61270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12625:78:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 61271, + "nodeType": "EmitStatement", + "src": "12620:83:90" + } + ] + }, + "documentation": { + "id": 61242, + "nodeType": "StructuredDocumentation", + "src": "12315:94:90", + "text": " @dev Sets Pyth Oracle config.\n Emits events {PythOracleConfigUpdated}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setPythOracleConfig", + "nameLocation": "12421:20:90", + "parameters": { + "id": 61250, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61245, + "mutability": "mutable", + "name": "pyth", + "nameLocation": "12448:4:90", + "nodeType": "VariableDeclaration", + "scope": 61273, + "src": "12442:10:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + }, + "typeName": { + "id": 61244, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61243, + "name": "IPyth", + "nameLocations": [ + "12442:5:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 54836, + "src": "12442:5:90" + }, + "referencedDeclaration": 54836, + "src": "12442:5:90", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPyth_$54836", + "typeString": "contract IPyth" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61247, + "mutability": "mutable", + "name": "maxAcceptableAge", + "nameLocation": "12462:16:90", + "nodeType": "VariableDeclaration", + "scope": 61273, + "src": "12454:24:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61246, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12454:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 61249, + "mutability": "mutable", + "name": "pythIdForRONUSD", + "nameLocation": "12488:15:90", + "nodeType": "VariableDeclaration", + "scope": 61273, + "src": "12480:23:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61248, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12480:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "12441:63:90" + }, + "returnParameters": { + "id": 61251, + "nodeType": "ParameterList", + "parameters": [], + "src": "12514:0:90" + }, + "scope": 61316, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 61315, + "nodeType": "FunctionDefinition", + "src": "12821:361:90", + "nodes": [], + "body": { + "id": 61314, + "nodeType": "Block", + "src": "12894:288:90", + "nodes": [], + "statements": [ + { + "assignments": [ + 61283 + ], + "declarations": [ + { + "constant": false, + "id": 61283, + "mutability": "mutable", + "name": "dp", + "nameLocation": "12925:2:90", + "nodeType": "VariableDeclaration", + "scope": 61314, + "src": "12900:27:90", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper" + }, + "typeName": { + "id": 61282, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 61281, + "name": "TimestampWrapper", + "nameLocations": [ + "12900:16:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 67100, + "src": "12900:16:90" + }, + "referencedDeclaration": 67100, + "src": "12900:16:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper" + } + }, + "visibility": "internal" + } + ], + "id": 61287, + "initialValue": { + "baseExpression": { + "id": 61284, + "name": "_dp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60252, + "src": "12930:3:90", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_TimestampWrapper_$67100_storage_$", + "typeString": "mapping(bytes32 => struct TimestampWrapper storage ref)" + } + }, + "id": 61286, + "indexExpression": { + "id": 61285, + "name": "lbHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61276, + "src": "12934:6:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12930:11:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage", + "typeString": "struct TimestampWrapper storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12900:41:90" + }, + { + "assignments": [ + 61289 + ], + "declarations": [ + { + "constant": false, + "id": 61289, + "mutability": "mutable", + "name": "lastSyncedAt", + "nameLocation": "12955:12:90", + "nodeType": "VariableDeclaration", + "scope": 61314, + "src": "12947:20:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61288, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12947:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 61292, + "initialValue": { + "expression": { + "id": 61290, + "name": "dp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61283, + "src": "12970:2:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper storage pointer" + } + }, + "id": 61291, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12973:9:90", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "referencedDeclaration": 67099, + "src": "12970:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12947:35:90" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 61293, + "name": "lastSyncedAt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61289, + "src": "12992:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 61294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13008:1:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "12992:17:90", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 61298, + "nodeType": "IfStatement", + "src": "12988:31:90", + "trueBody": { + "expression": { + "hexValue": "30", + "id": 61296, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13018:1:90", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 61280, + "id": 61297, + "nodeType": "Return", + "src": "13011:8:90" + } + }, + { + "assignments": [ + 61300 + ], + "declarations": [ + { + "constant": false, + "id": 61300, + "mutability": "mutable", + "name": "passedDuration", + "nameLocation": "13034:14:90", + "nodeType": "VariableDeclaration", + "scope": 61314, + "src": "13026:22:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61299, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13026:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 61305, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 61304, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 61301, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "13051:5:90", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 61302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13057:9:90", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "13051:15:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 61303, + "name": "lastSyncedAt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61289, + "src": "13069:12:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13051:30:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13026:55:90" + }, + { + "expression": { + "arguments": [ + { + "expression": { + "id": 61308, + "name": "dp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61283, + "src": "13123:2:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TimestampWrapper_$67100_storage_ptr", + "typeString": "struct TimestampWrapper storage pointer" + } + }, + "id": 61309, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13126:5:90", + "memberName": "value", + "nodeType": "MemberAccess", + "referencedDeclaration": 67097, + "src": "13123:8:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 61310, + "name": "MAX_PERCENTAGE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60200, + "src": "13139:14:90", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 61311, + "name": "passedDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61300, + "src": "13160:14:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 61306, + "name": "_dpDownScaler", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 60241, + "src": "13094:13:90", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PeriodScaler_$67177_storage", + "typeString": "struct PeriodScaler storage ref" + } + }, + "id": 61307, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13108:9:90", + "memberName": "scaleDown", + "nodeType": "MemberAccess", + "referencedDeclaration": 67267, + "src": "13094:23:90", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_PeriodScaler_$67177_memory_ptr_$_t_uint256_$_t_uint64_$_t_uint256_$returns$_t_uint256_$attached_to$_t_struct$_PeriodScaler_$67177_memory_ptr_$", + "typeString": "function (struct PeriodScaler memory,uint256,uint64,uint256) pure returns (uint256)" + } + }, + "id": 61312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [ + "13120:1:90", + "13133:4:90", + "13155:3:90" + ], + "names": [ + "v", + "maxR", + "dur" + ], + "nodeType": "FunctionCall", + "src": "13094:83:90", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 61280, + "id": 61313, + "nodeType": "Return", + "src": "13087:90:90" + } + ] + }, + "documentation": { + "id": 61274, + "nodeType": "StructuredDocumentation", + "src": "12712:106:90", + "text": " @dev Returns the current domain price applied the business rule: deduced x% each y seconds." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getDomainPrice", + "nameLocation": "12830:15:90", + "parameters": { + "id": 61277, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61276, + "mutability": "mutable", + "name": "lbHash", + "nameLocation": "12854:6:90", + "nodeType": "VariableDeclaration", + "scope": 61315, + "src": "12846:14:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 61275, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12846:7:90", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "12845:16:90" + }, + "returnParameters": { + "id": 61280, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 61279, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 61315, + "src": "12885:7:90", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 61278, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12885:7:90", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12884:9:90" + }, + "scope": 61316, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 60174, + "name": "Initializable", + "nameLocations": [ + "1005:13:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50240, + "src": "1005:13:90" + }, + "id": 60175, + "nodeType": "InheritanceSpecifier", + "src": "1005:13:90" + }, + { + "baseName": { + "id": 60176, + "name": "AccessControlEnumerable", + "nameLocations": [ + "1020:23:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48967, + "src": "1020:23:90" + }, + "id": 60177, + "nodeType": "InheritanceSpecifier", + "src": "1020:23:90" + }, + { + "baseName": { + "id": 60178, + "name": "INSDomainPrice", + "nameLocations": [ + "1045:14:90" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65182, + "src": "1045:14:90" + }, + "id": 60179, + "nodeType": "InheritanceSpecifier", + "src": "1045:14:90" + } + ], + "canonicalName": "RNSDomainPrice", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 61316, + 65182, + 48967, + 48842, + 52671, + 52683, + 49065, + 49040, + 52308, + 50240 + ], + "name": "RNSDomainPrice", + "nameLocation": "987:14:90", + "scope": 61317, + "usedErrors": [ + 64920, + 64922, + 64924, + 67184, + 67799, + 67807 + ], + "usedEvents": [ + 48979, + 48988, + 48997, + 50086, + 64941, + 64948, + 64957, + 64966, + 64979, + 64988, + 65000 + ] + } + ], + "license": "MIT" + }, + "blockNumber": 21479653, + "bytecode": "0x60806040526200000e62000014565b620000d5565b600054610100900460ff1615620000815760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000d3576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61316780620000e56000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80635ef32e2c11610104578063ca15c873116100a2578063e229a67011610071578063e229a670146104b2578063f4651f49146104c5578063f5b541a6146104e6578063fe303ebf1461050d57600080fd5b8063ca15c87314610466578063d40ed58c14610479578063d547741f1461048c578063dd28776d1461049f57600080fd5b80637174026e116100de5780637174026e1461040d5780639010d07c1461042057806391d148541461044b578063a217fddf1461045e57600080fd5b80635ef32e2c146103b6578063700213c8146103be578063713a69a7146103e557600080fd5b80632f6ee6951161017c5780634c255c971161014b5780634c255c971461034f57806353faf90914610370578063599eaabf146103905780635c68c830146103a357600080fd5b80632f6ee695146102b757806335feb741146102d157806336568abe146102e457806339e47da7146102f757600080fd5b8063248a9ca3116101b8578063248a9ca31461023d57806328dd3065146102615780632be09ecc146102765780632f2ff15d146102a457600080fd5b806301ffc9a7146101df578063037f1769146102075780630a44f51f14610228575b600080fd5b6101f26101ed36600461236d565b610520565b60405190151581526020015b60405180910390f35b61021a610215366004612397565b61054b565b6040519081526020016101fe565b6102306105dd565b6040516101fe91906123b0565b61021a61024b366004612397565b6000908152600160208190526040909120015490565b61027461026f366004612427565b6106ba565b005b603554603954603a54604080516001600160a01b0390941684526020840192909252908201526060016101fe565b6102746102b236600461245c565b6106d6565b6102bf601281565b60405160ff90911681526020016101fe565b6102746102df3660046124d0565b610701565b6102746102f236600461245c565b610716565b604080518082018252600080825260209182015281518083018352603b546001600160c01b0381168083526001600160401b03600160c01b9092048216928401928352845190815291511691810191909152016101fe565b61035861271081565b6040516001600160401b0390911681526020016101fe565b61038361037e366004612555565b610799565b6040516101fe9190612618565b61027461039e366004612555565b6108d2565b61021a6103b136600461265e565b6109a2565b60375461021a565b61021a7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad81565b6103f86103f33660046127fe565b610a20565b604080519283526020830191909152016101fe565b61021a61041b366004612397565b610a4c565b61043361042e366004612832565b610adf565b6040516001600160a01b0390911681526020016101fe565b6101f261045936600461245c565b610afe565b61021a600081565b61021a610474366004612397565b610b29565b61027461048736600461286c565b610b40565b61027461049a36600461245c565b610d08565b6102746104ad366004612945565b610d2e565b6102746104c03660046129b0565b610e4c565b6104d86104d33660046129cc565b610e60565b6040516101fe929190612a10565b61021a7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b61027461051b366004612397565b611216565b60006001600160e01b03198216635a05180f60e01b148061054557506105458261122a565b92915050565b603554603a5460395460405163052571af60e51b815260009361054593869360129384936001600160a01b03169263a4ae35e09261059492600401918252602082015260400190565b608060405180830381865afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190612a4b565b92919061125f565b603854606090806001600160401b038111156105fb576105fb6126cf565b60405190808252806020026020018201604052801561064057816020015b60408051808201909152600080825260208201528152602001906001900390816106195790505b5091506000805b828110156106b4578060010191508184828151811061066857610668612ab8565b60200260200101516000018181525050603c60008381526020019081526020016000205484828151811061069e5761069e612ab8565b6020908102919091018101510152600101610647565b50505090565b60006106c5816112a0565b6106d08484846112ad565b50505050565b600082815260016020819052604090912001546106f2816112a0565b6106fc838361131f565b505050565b600061070c816112a0565b6106fc8383611341565b6001600160a01b038116331461078b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610795828261145a565b5050565b60607f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296107c5816112a0565b60006107d78b8b8b8b8b8b8b8b61147c565b905033816001600160401b038111156107f2576107f26126cf565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50935060005b828110156108c257610898828e8e8481811061083f5761083f612ab8565b905060200201358d8d8581811061085857610858612ab8565b905060200201358c8c8681811061087157610871612ab8565b905060200201358b8b8781811061088a5761088a612ab8565b9050602002013560006114ca565b8582815181106108aa576108aa612ab8565b91151560209283029190910190910152600101610821565b5050505098975050505050505050565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad6108fc816112a0565b600061090e8a8a8a8a8a8a8a8a61147c565b90503360005b828110156109945761098b828d8d8481811061093257610932612ab8565b905060200201358c8c8581811061094b5761094b612ab8565b905060200201358b8b8681811061096457610964612ab8565b905060200201358a8a8781811061097d5761097d612ab8565b9050602002013560016114ca565b50600101610914565b505050505050505050505050565b6000603e60006109e785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155992505050565b815260200190815260200160002054905080600003610a1957604051635421761560e11b815260040160405180910390fd5b1992915050565b600080610a3a610a3584805160209091012090565b611564565b9150610a4582610a4c565b9050915091565b603554603a5460395460405163052571af60e51b81526004810192909252602482015260009161054591849160129182916105d591601119916001600160a01b03169063a4ae35e090604401608060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad99190612a4b565b906115de565b6000828152600260205260408120610af79083611738565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260026020526040812061054590611744565b600054610100900460ff1615808015610b605750600054600160ff909116105b80610b7a5750303b158015610b7a575060005460ff166001145b610bdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610782565b6000805460ff191660011790558015610c00576000805461ff0019166101001790555b897f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960005b82811015610c6557610c5d828f8f84818110610c4357610c43612ab8565b9050602002016020810190610c589190612ace565b61174e565b600101610c25565b50603680546001600160a01b0319166001600160a01b038816179055610c8c60008f61174e565b610c968b8b611341565b610c9f89611758565b610ca88861178d565b610cb38786866112ad565b50508015610994576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b60008281526001602081905260409091200154610d24816112a0565b6106fc838361145a565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad610d58816112a0565b83801580610d665750808314155b15610d8457604051634ec4810560e11b815260040160405180910390fd5b600033815b83811015610e4157868682818110610da357610da3612ab8565b9050602002013519925082603e60008b8b85818110610dc457610dc4612ab8565b90506020020135815260200190815260200160002081905550888882818110610def57610def612ab8565b90506020020135826001600160a01b03167fb52d278cb3ef3b003bdfb385ce2eb23a83eb6d713724abfba1acaa16ccf6621485604051610e3191815260200190565b60405180910390a3600101610d89565b505050505050505050565b6000610e57816112a0565b6107958261178d565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610e9385611809565b855160208701209091506000906000818152603e60205260409020549091508015610eca57610ec3811987612b01565b85526111e9565b6000603c6000610edc866038546118f7565b81526020019081526020016000205490508087610ef99190612b01565b86526000610f387fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888a6000918252805160209182012090526040902090565b6036546040516329fc8caf60e11b8152600481018390529192506001600160a01b03169081906353f9195e90602401602060405180830381865afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190612b28565b156111e5576000816001600160a01b0316638c8433146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190612b43565b905060006110ac826001600160a01b03166303e9e609866040518263ffffffff1660e01b815260040161104691815260200190565b600060405180830381865afa158015611063573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261108b9190810190612bea565b60200151604001516001600160401b03168c6001600160401b03801661190d565b6040516378bd793560e01b8152600481018690529091506000906001600160a01b038516906378bd79359060240160e060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190612cf1565b5060408101516060015190915080158015906111a95750846001600160a01b0316630afe1bb36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190612d8e565b6001600160401b03166111a78285612dab565b115b156111c757604051631bb03f9d60e01b815260040160405180910390fd5b6111de6037546111d68b611564565b612710611943565b8b52505050505b5050505b83516111f490610a4c565b6020850152845161120490610a4c565b60208601525092959194509092505050565b6000611221816112a0565b61079582611758565b60006001600160e01b03198216637965db0b60e01b148061054557506301ffc9a760e01b6001600160e01b0319831614610545565b600061129584611285876000015160070b8860400151866112809190612dbe565b611a2d565b611290600187611a2d565b611943565b90505b949350505050565b6112aa8133611a87565b50565b603580546001600160a01b0319166001600160a01b0385169081179091556039839055603a8290558190336001600160a01b03167f671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b8560405161131291815260200190565b60405180910390a4505050565b6113298282611ae0565b60008281526002602052604090206106fc9082611b4b565b60408051808201909152600080825260208201523390603854839060005b8281101561140c5786868281811061137957611379612ab8565b90506040020180360381019061138f9190612de5565b935061139f828560000151611b60565b6020808601805187516000908152603c90935260409283902055865190519151929450916001600160a01b038816917f85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77916113fc91815260200190565b60405180910390a360010161135f565b50603854811461145257603881905560405181906001600160a01b038616907f7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b90600090a35b505050505050565b6114648282611b6f565b60008281526002602052604090206106fc9082611bd6565b8680158061148a5750858114155b806114955750838114155b806114a05750818114155b156114be57604051634ec4810560e11b815260040160405180910390fd5b98975050505050505050565b6000806114d68661054b565b6000888152603d6020526040902090915083806114f35750805482115b9250821561154d57818155426001820155604080518381526020810187905287918a916001600160a01b038d16917f60d5fd6d2284807447aae62f93c05517a647b8e8479c3af2c27ee1d1c85b540f910160405180910390a45b50509695505050505050565b805160209091012090565b6000818152603d602052604081206001810154808303611588575060009392505050565b60006115948242612dab565b835460408051808201909152603b546001600160c01b0381168252600160c01b90046001600160401b031660208201529192506115d5919061271084611beb565b95945050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260006116176001856040015161128090612e17565b90506001600160ff1b0381111561164d576040808501519051633e87ca5d60e11b815260039190910b6004820152602401610782565b600061165d600161128086612e17565b90506001600160ff1b0381111561168d57604051633e87ca5d60e11b8152600385900b6004820152602401610782565b845160009060070b61169f8385612e3a565b6116a99190612e80565b9050677fffffffffffffff8113156116f557604086810151875191516329b2fb5560e11b8152600391820b60048201529087900b602482015260079190910b6044820152606401610782565b60405180608001604052808260070b815260200187602001516001600160401b031681526020018660030b81526020018760600151815250935050505092915050565b6000610af78383611cc1565b6000610545825490565b610795828261131f565b6037819055604051819033907f1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf07390600090a350565b80603b61179a8282612ec3565b503390507fa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc646117cc6020840184612f05565b6117dc6040850160208601612f22565b604080516001600160c01b0390931683526001600160401b0390911660208301520160405180910390a250565b600080600080845190505b808310156118ef57600085848151811061183057611830612ab8565b01602001516001600160f81b0319169050600160ff1b811015611858576001840193506118e3565b600760fd1b6001600160f81b031982161015611879576002840193506118e3565b600f60fc1b6001600160f81b03198216101561189a576003840193506118e3565b601f60fb1b6001600160f81b0319821610156118bb576004840193506118e3565b603f60fa1b6001600160f81b0319821610156118dc576005840193506118e3565b6006840193505b50600190910190611814565b509392505050565b60008183106119065781610af7565b5090919050565b60008184118061191c57508183115b15611928575080610af7565b6119328484611ceb565b905081811115610af7575092915050565b600080806000198587098587029250828110838203039150508060000361197d5783828161197357611973612e6a565b0492505050610af7565b8084116119c45760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610782565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000808260030b1215611a5f57611a4382612e17565b611a4e90600a613023565b611a589084613035565b9050610545565b60008260030b1315611a8057611a7682600a613023565b611a589084612b01565b5081610545565b611a918282610afe565b61079557611a9e81611cff565b611aa9836020611d11565b604051602001611aba929190613049565b60408051601f198184030181529082905262461bcd60e51b8252610782916004016130be565b611aea8282610afe565b6107955760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610af7836001600160a01b038416611eac565b60008183116119065781610af7565b611b798282610afe565b156107955760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610af7836001600160a01b038416611efb565b60008085602001516001600160401b031683611c079190613035565b9050801580611c1e575085516001600160c01b0316155b15611c2c5784915050611298565b85516001600160c01b03166001600160401b03851603611c50576000915050611298565b61ffff811115611c7657604051637359f25f60e01b815260048101829052602401610782565b6000611ca68760000151866001600160401b0316036001600160c01b0316612710876001600160401b0316611943565b9050611cb6868261271085611fee565b979650505050505050565b6000826000018281548110611cd857611cd8612ab8565b9060005260206000200154905092915050565b818101828110156105455750600019610545565b60606105456001600160a01b03831660145b60606000611d20836002612b01565b611d2b9060026130f1565b6001600160401b03811115611d4257611d426126cf565b6040519080825280601f01601f191660200182016040528015611d6c576020820181803683370190505b509050600360fc1b81600081518110611d8757611d87612ab8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611db657611db6612ab8565b60200101906001600160f81b031916908160001a9053506000611dda846002612b01565b611de59060016130f1565b90505b6001811115611e5d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e1957611e19612ab8565b1a60f81b828281518110611e2f57611e2f612ab8565b60200101906001600160f81b031916908160001a90535060049490941c93611e5681613104565b9050611de8565b508315610af75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610782565b6000818152600183016020526040812054611ef357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610545565b506000610545565b60008181526001830160205260408120548015611fe4576000611f1f600183612dab565b8554909150600090611f3390600190612dab565b9050818114611f98576000866000018281548110611f5357611f53612ab8565b9060005260206000200154905080876000018481548110611f7657611f76612ab8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fa957611fa961311b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610545565b6000915050610545565b600082841480612000575061ffff8216155b1561200c575083611298565b5083600080808061202d61ffff87166120248a612151565b61ffff166118f7565b90505b61ffff8116156120835761204a8561ffff83168a0a612322565b9094509250831561206357829450808603955080820191505b61207c600261ffff83160461ffff168761ffff166118f7565b9050612030565b505b61ffff8516156120f6576120998488612322565b909350915082156120b857600019909401939092508290600101612085565b61ffff8116156120dd578584816120d1576120d1612e6a565b04935060001901612085565b6120e8848888611943565b600019909501949350612085565b600061210187612151565b90505b61ffff8216156121455760006121228261ffff168461ffff166118f7565b90508061ffff16880a868161213957612139612e6a565b04955090910390612104565b50505050949350505050565b60006003821015612164575060ff919050565b600482101561217557506080919050565b601082101561218657506040919050565b61010082101561219857506020919050565b611bdc8210156121aa57506014919050565b612c708210156121bc57506013919050565b614aa98210156121ce57506012919050565b6185548210156121e057506011919050565b620100008210156121f357506010919050565b620218378210156122065750600f919050565b6204e0468210156122195750600e919050565b620ced4c82101561222c5750600d919050565b6228514682101561223f5750600c919050565b629aa2ad8210156122525750600b919050565b6303080c018210156122665750600a919050565b6315c5cbbd82101561227a57506009919050565b64010000000082101561228f57506008919050565b6417c6a1f29f8210156122a457506007919050565b6506597fa94f5c8210156122ba57506006919050565b66093088c35d733b8210156122d157506005919050565b680100000000000000008210156122ea57506004919050565b6a285145f31ae515c447bb5782101561230557506003919050565b600160801b82101561231957506002919050565b5060015b919050565b600080836000036123395750600190506000612366565b8383028385828161234c5761234c612e6a565b041461235f576000809250925050612366565b6001925090505b9250929050565b60006020828403121561237f57600080fd5b81356001600160e01b031981168114610af757600080fd5b6000602082840312156123a957600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b828110156123fa576123ea84835180518252602090810151910152565b92840192908501906001016123cd565b5091979650505050505050565b6001600160a01b03811681146112aa57600080fd5b803561231d81612407565b60008060006060848603121561243c57600080fd5b833561244781612407565b95602085013595506040909401359392505050565b6000806040838503121561246f57600080fd5b82359150602083013561248181612407565b809150509250929050565b60008083601f84011261249e57600080fd5b5081356001600160401b038111156124b557600080fd5b6020830191508360208260061b850101111561236657600080fd5b600080602083850312156124e357600080fd5b82356001600160401b038111156124f957600080fd5b6125058582860161248c565b90969095509350505050565b60008083601f84011261252357600080fd5b5081356001600160401b0381111561253a57600080fd5b6020830191508360208260051b850101111561236657600080fd5b6000806000806000806000806080898b03121561257157600080fd5b88356001600160401b038082111561258857600080fd5b6125948c838d01612511565b909a50985060208b01359150808211156125ad57600080fd5b6125b98c838d01612511565b909850965060408b01359150808211156125d257600080fd5b6125de8c838d01612511565b909650945060608b01359150808211156125f757600080fd5b506126048b828c01612511565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b81811015612652578351151583529284019291840191600101612634565b50909695505050505050565b6000806020838503121561267157600080fd5b82356001600160401b038082111561268857600080fd5b818501915085601f83011261269c57600080fd5b8135818111156126ab57600080fd5b8660208285010111156126bd57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715612707576127076126cf565b60405290565b604080519081016001600160401b0381118282101715612707576127076126cf565b604051606081016001600160401b0381118282101715612707576127076126cf565b604051601f8201601f191681016001600160401b0381118282101715612779576127796126cf565b604052919050565b60006001600160401b0382111561279a5761279a6126cf565b50601f01601f191660200190565b600082601f8301126127b957600080fd5b81356127cc6127c782612781565b612751565b8181528460208386010111156127e157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561281057600080fd5b81356001600160401b0381111561282657600080fd5b611298848285016127a8565b6000806040838503121561284557600080fd5b50508035926020909101359150565b60006040828403121561286657600080fd5b50919050565b60008060008060008060008060008060006101408c8e03121561288e57600080fd5b6128988c35612407565b8b359a506001600160401b038060208e013511156128b557600080fd5b6128c58e60208f01358f01612511565b909b50995060408d01358110156128db57600080fd5b506128ec8d60408e01358e0161248c565b909850965060608c013595506129058d60808e01612854565b945060c08c013561291581612407565b935061292360e08d0161241c565b92506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806040858703121561295b57600080fd5b84356001600160401b038082111561297257600080fd5b61297e88838901612511565b9096509450602087013591508082111561299757600080fd5b506129a487828801612511565b95989497509550505050565b6000604082840312156129c257600080fd5b610af78383612854565b600080604083850312156129df57600080fd5b82356001600160401b038111156129f557600080fd5b612a01858286016127a8565b95602094909401359450505050565b825181526020808401518183015282516040830152820151606082015260808101610af7565b6001600160401b03811681146112aa57600080fd5b600060808284031215612a5d57600080fd5b612a656126e5565b82518060070b8114612a7657600080fd5b81526020830151612a8681612a36565b60208201526040830151600381900b8114612aa057600080fd5b60408201526060928301519281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ae057600080fd5b8135610af781612407565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761054557610545612aeb565b8051801515811461231d57600080fd5b600060208284031215612b3a57600080fd5b610af782612b18565b600060208284031215612b5557600080fd5b8151610af781612407565b60005b83811015612b7b578181015183820152602001612b63565b50506000910152565b600060808284031215612b9657600080fd5b612b9e6126e5565b90508151612bab81612407565b81526020820151612bbb81612407565b60208201526040820151612bce81612a36565b6040820152612bdf60608301612b18565b606082015292915050565b60006020808385031215612bfd57600080fd5b82516001600160401b0380821115612c1457600080fd5b9084019060a08287031215612c2857600080fd5b612c3061270d565b825182811115612c3f57600080fd5b830160608189031215612c5157600080fd5b612c5961272f565b815160ff81168114612c6a57600080fd5b81528186015186820152604082015184811115612c8657600080fd5b82019350601f84018913612c9957600080fd5b83519150612ca96127c783612781565b8281528987848701011115612cbd57600080fd5b612ccc83888301898801612b60565b6040820152825250612ce087848601612b84565b848201528094505050505092915050565b60008082840360e0811215612d0557600080fd5b60c0811215612d1357600080fd5b612d1b61272f565b84518152602085015160208201526080603f1983011215612d3b57600080fd5b612d436126e5565b91506040850151612d5381612407565b80835250606085015160208301526080850151604083015260a08501516060830152816040820152809350505060c083015190509250929050565b600060208284031215612da057600080fd5b8151610af781612a36565b8181038181111561054557610545612aeb565b600381810b9083900b01637fffffff8113637fffffff198212171561054557610545612aeb565b600060408284031215612df757600080fd5b612dff61270d565b82358152602083013560208201528091505092915050565b60008160030b637fffffff198103612e3157612e31612aeb565b60000392915050565b80820260008212600160ff1b84141615612e5657612e56612aeb565b818105831482151761054557610545612aeb565b634e487b7160e01b600052601260045260246000fd5b600082612e8f57612e8f612e6a565b600160ff1b821460001984141615612ea957612ea9612aeb565b500590565b6001600160c01b03811681146112aa57600080fd5b8135612ece81612eae565b81546001600160c01b03199081166001600160c01b039290921691821783556020840135612efb81612a36565b60c01b1617905550565b600060208284031215612f1757600080fd5b8135610af781612eae565b600060208284031215612f3457600080fd5b8135610af781612a36565b600181815b80851115612f7a578160001904821115612f6057612f60612aeb565b80851615612f6d57918102915b93841c9390800290612f44565b509250929050565b600082612f9157506001610545565b81612f9e57506000610545565b8160018114612fb45760028114612fbe57612fda565b6001915050610545565b60ff841115612fcf57612fcf612aeb565b50506001821b610545565b5060208310610133831016604e8410600b8410161715612ffd575081810a610545565b6130078383612f3f565b806000190482111561301b5761301b612aeb565b029392505050565b6000610af763ffffffff841683612f82565b60008261304457613044612e6a565b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613081816017850160208801612b60565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516130b2816028840160208801612b60565b01602801949350505050565b60208152600082518060208401526130dd816040850160208701612b60565b601f01601f19169190910160400192915050565b8082018082111561054557610545612aeb565b60008161311357613113612aeb565b506000190190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d0496611adae861791435296e0aae2099af9499031b6826466a4fe91423b08e564736f6c63430008150033", + "chainId": 2021, + "contractName": "RNSDomainPrice", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80635ef32e2c11610104578063ca15c873116100a2578063e229a67011610071578063e229a670146104b2578063f4651f49146104c5578063f5b541a6146104e6578063fe303ebf1461050d57600080fd5b8063ca15c87314610466578063d40ed58c14610479578063d547741f1461048c578063dd28776d1461049f57600080fd5b80637174026e116100de5780637174026e1461040d5780639010d07c1461042057806391d148541461044b578063a217fddf1461045e57600080fd5b80635ef32e2c146103b6578063700213c8146103be578063713a69a7146103e557600080fd5b80632f6ee6951161017c5780634c255c971161014b5780634c255c971461034f57806353faf90914610370578063599eaabf146103905780635c68c830146103a357600080fd5b80632f6ee695146102b757806335feb741146102d157806336568abe146102e457806339e47da7146102f757600080fd5b8063248a9ca3116101b8578063248a9ca31461023d57806328dd3065146102615780632be09ecc146102765780632f2ff15d146102a457600080fd5b806301ffc9a7146101df578063037f1769146102075780630a44f51f14610228575b600080fd5b6101f26101ed36600461236d565b610520565b60405190151581526020015b60405180910390f35b61021a610215366004612397565b61054b565b6040519081526020016101fe565b6102306105dd565b6040516101fe91906123b0565b61021a61024b366004612397565b6000908152600160208190526040909120015490565b61027461026f366004612427565b6106ba565b005b603554603954603a54604080516001600160a01b0390941684526020840192909252908201526060016101fe565b6102746102b236600461245c565b6106d6565b6102bf601281565b60405160ff90911681526020016101fe565b6102746102df3660046124d0565b610701565b6102746102f236600461245c565b610716565b604080518082018252600080825260209182015281518083018352603b546001600160c01b0381168083526001600160401b03600160c01b9092048216928401928352845190815291511691810191909152016101fe565b61035861271081565b6040516001600160401b0390911681526020016101fe565b61038361037e366004612555565b610799565b6040516101fe9190612618565b61027461039e366004612555565b6108d2565b61021a6103b136600461265e565b6109a2565b60375461021a565b61021a7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad81565b6103f86103f33660046127fe565b610a20565b604080519283526020830191909152016101fe565b61021a61041b366004612397565b610a4c565b61043361042e366004612832565b610adf565b6040516001600160a01b0390911681526020016101fe565b6101f261045936600461245c565b610afe565b61021a600081565b61021a610474366004612397565b610b29565b61027461048736600461286c565b610b40565b61027461049a36600461245c565b610d08565b6102746104ad366004612945565b610d2e565b6102746104c03660046129b0565b610e4c565b6104d86104d33660046129cc565b610e60565b6040516101fe929190612a10565b61021a7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b61027461051b366004612397565b611216565b60006001600160e01b03198216635a05180f60e01b148061054557506105458261122a565b92915050565b603554603a5460395460405163052571af60e51b815260009361054593869360129384936001600160a01b03169263a4ae35e09261059492600401918252602082015260400190565b608060405180830381865afa1580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d59190612a4b565b92919061125f565b603854606090806001600160401b038111156105fb576105fb6126cf565b60405190808252806020026020018201604052801561064057816020015b60408051808201909152600080825260208201528152602001906001900390816106195790505b5091506000805b828110156106b4578060010191508184828151811061066857610668612ab8565b60200260200101516000018181525050603c60008381526020019081526020016000205484828151811061069e5761069e612ab8565b6020908102919091018101510152600101610647565b50505090565b60006106c5816112a0565b6106d08484846112ad565b50505050565b600082815260016020819052604090912001546106f2816112a0565b6106fc838361131f565b505050565b600061070c816112a0565b6106fc8383611341565b6001600160a01b038116331461078b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610795828261145a565b5050565b60607f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296107c5816112a0565b60006107d78b8b8b8b8b8b8b8b61147c565b905033816001600160401b038111156107f2576107f26126cf565b60405190808252806020026020018201604052801561081b578160200160208202803683370190505b50935060005b828110156108c257610898828e8e8481811061083f5761083f612ab8565b905060200201358d8d8581811061085857610858612ab8565b905060200201358c8c8681811061087157610871612ab8565b905060200201358b8b8781811061088a5761088a612ab8565b9050602002013560006114ca565b8582815181106108aa576108aa612ab8565b91151560209283029190910190910152600101610821565b5050505098975050505050505050565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad6108fc816112a0565b600061090e8a8a8a8a8a8a8a8a61147c565b90503360005b828110156109945761098b828d8d8481811061093257610932612ab8565b905060200201358c8c8581811061094b5761094b612ab8565b905060200201358b8b8681811061096457610964612ab8565b905060200201358a8a8781811061097d5761097d612ab8565b9050602002013560016114ca565b50600101610914565b505050505050505050505050565b6000603e60006109e785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061155992505050565b815260200190815260200160002054905080600003610a1957604051635421761560e11b815260040160405180910390fd5b1992915050565b600080610a3a610a3584805160209091012090565b611564565b9150610a4582610a4c565b9050915091565b603554603a5460395460405163052571af60e51b81526004810192909252602482015260009161054591849160129182916105d591601119916001600160a01b03169063a4ae35e090604401608060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad99190612a4b565b906115de565b6000828152600260205260408120610af79083611738565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260026020526040812061054590611744565b600054610100900460ff1615808015610b605750600054600160ff909116105b80610b7a5750303b158015610b7a575060005460ff166001145b610bdd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610782565b6000805460ff191660011790558015610c00576000805461ff0019166101001790555b897f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960005b82811015610c6557610c5d828f8f84818110610c4357610c43612ab8565b9050602002016020810190610c589190612ace565b61174e565b600101610c25565b50603680546001600160a01b0319166001600160a01b038816179055610c8c60008f61174e565b610c968b8b611341565b610c9f89611758565b610ca88861178d565b610cb38786866112ad565b50508015610994576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b60008281526001602081905260409091200154610d24816112a0565b6106fc838361145a565b7f033a42b04fa8bdb42a28dc41fe890f4b8409d5af5d3ed16a96b5fb479b0d3fad610d58816112a0565b83801580610d665750808314155b15610d8457604051634ec4810560e11b815260040160405180910390fd5b600033815b83811015610e4157868682818110610da357610da3612ab8565b9050602002013519925082603e60008b8b85818110610dc457610dc4612ab8565b90506020020135815260200190815260200160002081905550888882818110610def57610def612ab8565b90506020020135826001600160a01b03167fb52d278cb3ef3b003bdfb385ce2eb23a83eb6d713724abfba1acaa16ccf6621485604051610e3191815260200190565b60405180910390a3600101610d89565b505050505050505050565b6000610e57816112a0565b6107958261178d565b604080518082019091526000808252602082015260408051808201909152600080825260208201526000610e9385611809565b855160208701209091506000906000818152603e60205260409020549091508015610eca57610ec3811987612b01565b85526111e9565b6000603c6000610edc866038546118f7565b81526020019081526020016000205490508087610ef99190612b01565b86526000610f387fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888a6000918252805160209182012090526040902090565b6036546040516329fc8caf60e11b8152600481018390529192506001600160a01b03169081906353f9195e90602401602060405180830381865afa158015610f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa89190612b28565b156111e5576000816001600160a01b0316638c8433146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110119190612b43565b905060006110ac826001600160a01b03166303e9e609866040518263ffffffff1660e01b815260040161104691815260200190565b600060405180830381865afa158015611063573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261108b9190810190612bea565b60200151604001516001600160401b03168c6001600160401b03801661190d565b6040516378bd793560e01b8152600481018690529091506000906001600160a01b038516906378bd79359060240160e060405180830381865afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b9190612cf1565b5060408101516060015190915080158015906111a95750846001600160a01b0316630afe1bb36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611170573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111949190612d8e565b6001600160401b03166111a78285612dab565b115b156111c757604051631bb03f9d60e01b815260040160405180910390fd5b6111de6037546111d68b611564565b612710611943565b8b52505050505b5050505b83516111f490610a4c565b6020850152845161120490610a4c565b60208601525092959194509092505050565b6000611221816112a0565b61079582611758565b60006001600160e01b03198216637965db0b60e01b148061054557506301ffc9a760e01b6001600160e01b0319831614610545565b600061129584611285876000015160070b8860400151866112809190612dbe565b611a2d565b611290600187611a2d565b611943565b90505b949350505050565b6112aa8133611a87565b50565b603580546001600160a01b0319166001600160a01b0385169081179091556039839055603a8290558190336001600160a01b03167f671083457675651266070f50f1438ef8190b7da64d38f16f5117246236b7dd5b8560405161131291815260200190565b60405180910390a4505050565b6113298282611ae0565b60008281526002602052604090206106fc9082611b4b565b60408051808201909152600080825260208201523390603854839060005b8281101561140c5786868281811061137957611379612ab8565b90506040020180360381019061138f9190612de5565b935061139f828560000151611b60565b6020808601805187516000908152603c90935260409283902055865190519151929450916001600160a01b038816917f85211e946be6d537cd1b22a183d04151d4e5d0818e1ce75d2e5ebaecba0a5a77916113fc91815260200190565b60405180910390a360010161135f565b50603854811461145257603881905560405181906001600160a01b038616907f7e7c3a4273ac1af351af63a82e91a8335bcb389ba681375a32dbe4455d0d474b90600090a35b505050505050565b6114648282611b6f565b60008281526002602052604090206106fc9082611bd6565b8680158061148a5750858114155b806114955750838114155b806114a05750818114155b156114be57604051634ec4810560e11b815260040160405180910390fd5b98975050505050505050565b6000806114d68661054b565b6000888152603d6020526040902090915083806114f35750805482115b9250821561154d57818155426001820155604080518381526020810187905287918a916001600160a01b038d16917f60d5fd6d2284807447aae62f93c05517a647b8e8479c3af2c27ee1d1c85b540f910160405180910390a45b50509695505050505050565b805160209091012090565b6000818152603d602052604081206001810154808303611588575060009392505050565b60006115948242612dab565b835460408051808201909152603b546001600160c01b0381168252600160c01b90046001600160401b031660208201529192506115d5919061271084611beb565b95945050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260006116176001856040015161128090612e17565b90506001600160ff1b0381111561164d576040808501519051633e87ca5d60e11b815260039190910b6004820152602401610782565b600061165d600161128086612e17565b90506001600160ff1b0381111561168d57604051633e87ca5d60e11b8152600385900b6004820152602401610782565b845160009060070b61169f8385612e3a565b6116a99190612e80565b9050677fffffffffffffff8113156116f557604086810151875191516329b2fb5560e11b8152600391820b60048201529087900b602482015260079190910b6044820152606401610782565b60405180608001604052808260070b815260200187602001516001600160401b031681526020018660030b81526020018760600151815250935050505092915050565b6000610af78383611cc1565b6000610545825490565b610795828261131f565b6037819055604051819033907f1e97e29c863545fad1ce79512b4deb3f0b7d30c3356bc7bbbd6588c9e68cf07390600090a350565b80603b61179a8282612ec3565b503390507fa7f38b74141f9a2ac1b02640ded2b98431ef77f8cf2e3ade85c71d6c8420dc646117cc6020840184612f05565b6117dc6040850160208601612f22565b604080516001600160c01b0390931683526001600160401b0390911660208301520160405180910390a250565b600080600080845190505b808310156118ef57600085848151811061183057611830612ab8565b01602001516001600160f81b0319169050600160ff1b811015611858576001840193506118e3565b600760fd1b6001600160f81b031982161015611879576002840193506118e3565b600f60fc1b6001600160f81b03198216101561189a576003840193506118e3565b601f60fb1b6001600160f81b0319821610156118bb576004840193506118e3565b603f60fa1b6001600160f81b0319821610156118dc576005840193506118e3565b6006840193505b50600190910190611814565b509392505050565b60008183106119065781610af7565b5090919050565b60008184118061191c57508183115b15611928575080610af7565b6119328484611ceb565b905081811115610af7575092915050565b600080806000198587098587029250828110838203039150508060000361197d5783828161197357611973612e6a565b0492505050610af7565b8084116119c45760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401610782565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000808260030b1215611a5f57611a4382612e17565b611a4e90600a613023565b611a589084613035565b9050610545565b60008260030b1315611a8057611a7682600a613023565b611a589084612b01565b5081610545565b611a918282610afe565b61079557611a9e81611cff565b611aa9836020611d11565b604051602001611aba929190613049565b60408051601f198184030181529082905262461bcd60e51b8252610782916004016130be565b611aea8282610afe565b6107955760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610af7836001600160a01b038416611eac565b60008183116119065781610af7565b611b798282610afe565b156107955760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610af7836001600160a01b038416611efb565b60008085602001516001600160401b031683611c079190613035565b9050801580611c1e575085516001600160c01b0316155b15611c2c5784915050611298565b85516001600160c01b03166001600160401b03851603611c50576000915050611298565b61ffff811115611c7657604051637359f25f60e01b815260048101829052602401610782565b6000611ca68760000151866001600160401b0316036001600160c01b0316612710876001600160401b0316611943565b9050611cb6868261271085611fee565b979650505050505050565b6000826000018281548110611cd857611cd8612ab8565b9060005260206000200154905092915050565b818101828110156105455750600019610545565b60606105456001600160a01b03831660145b60606000611d20836002612b01565b611d2b9060026130f1565b6001600160401b03811115611d4257611d426126cf565b6040519080825280601f01601f191660200182016040528015611d6c576020820181803683370190505b509050600360fc1b81600081518110611d8757611d87612ab8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611db657611db6612ab8565b60200101906001600160f81b031916908160001a9053506000611dda846002612b01565b611de59060016130f1565b90505b6001811115611e5d576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e1957611e19612ab8565b1a60f81b828281518110611e2f57611e2f612ab8565b60200101906001600160f81b031916908160001a90535060049490941c93611e5681613104565b9050611de8565b508315610af75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610782565b6000818152600183016020526040812054611ef357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610545565b506000610545565b60008181526001830160205260408120548015611fe4576000611f1f600183612dab565b8554909150600090611f3390600190612dab565b9050818114611f98576000866000018281548110611f5357611f53612ab8565b9060005260206000200154905080876000018481548110611f7657611f76612ab8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fa957611fa961311b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610545565b6000915050610545565b600082841480612000575061ffff8216155b1561200c575083611298565b5083600080808061202d61ffff87166120248a612151565b61ffff166118f7565b90505b61ffff8116156120835761204a8561ffff83168a0a612322565b9094509250831561206357829450808603955080820191505b61207c600261ffff83160461ffff168761ffff166118f7565b9050612030565b505b61ffff8516156120f6576120998488612322565b909350915082156120b857600019909401939092508290600101612085565b61ffff8116156120dd578584816120d1576120d1612e6a565b04935060001901612085565b6120e8848888611943565b600019909501949350612085565b600061210187612151565b90505b61ffff8216156121455760006121228261ffff168461ffff166118f7565b90508061ffff16880a868161213957612139612e6a565b04955090910390612104565b50505050949350505050565b60006003821015612164575060ff919050565b600482101561217557506080919050565b601082101561218657506040919050565b61010082101561219857506020919050565b611bdc8210156121aa57506014919050565b612c708210156121bc57506013919050565b614aa98210156121ce57506012919050565b6185548210156121e057506011919050565b620100008210156121f357506010919050565b620218378210156122065750600f919050565b6204e0468210156122195750600e919050565b620ced4c82101561222c5750600d919050565b6228514682101561223f5750600c919050565b629aa2ad8210156122525750600b919050565b6303080c018210156122665750600a919050565b6315c5cbbd82101561227a57506009919050565b64010000000082101561228f57506008919050565b6417c6a1f29f8210156122a457506007919050565b6506597fa94f5c8210156122ba57506006919050565b66093088c35d733b8210156122d157506005919050565b680100000000000000008210156122ea57506004919050565b6a285145f31ae515c447bb5782101561230557506003919050565b600160801b82101561231957506002919050565b5060015b919050565b600080836000036123395750600190506000612366565b8383028385828161234c5761234c612e6a565b041461235f576000809250925050612366565b6001925090505b9250929050565b60006020828403121561237f57600080fd5b81356001600160e01b031981168114610af757600080fd5b6000602082840312156123a957600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b828110156123fa576123ea84835180518252602090810151910152565b92840192908501906001016123cd565b5091979650505050505050565b6001600160a01b03811681146112aa57600080fd5b803561231d81612407565b60008060006060848603121561243c57600080fd5b833561244781612407565b95602085013595506040909401359392505050565b6000806040838503121561246f57600080fd5b82359150602083013561248181612407565b809150509250929050565b60008083601f84011261249e57600080fd5b5081356001600160401b038111156124b557600080fd5b6020830191508360208260061b850101111561236657600080fd5b600080602083850312156124e357600080fd5b82356001600160401b038111156124f957600080fd5b6125058582860161248c565b90969095509350505050565b60008083601f84011261252357600080fd5b5081356001600160401b0381111561253a57600080fd5b6020830191508360208260051b850101111561236657600080fd5b6000806000806000806000806080898b03121561257157600080fd5b88356001600160401b038082111561258857600080fd5b6125948c838d01612511565b909a50985060208b01359150808211156125ad57600080fd5b6125b98c838d01612511565b909850965060408b01359150808211156125d257600080fd5b6125de8c838d01612511565b909650945060608b01359150808211156125f757600080fd5b506126048b828c01612511565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b81811015612652578351151583529284019291840191600101612634565b50909695505050505050565b6000806020838503121561267157600080fd5b82356001600160401b038082111561268857600080fd5b818501915085601f83011261269c57600080fd5b8135818111156126ab57600080fd5b8660208285010111156126bd57600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715612707576127076126cf565b60405290565b604080519081016001600160401b0381118282101715612707576127076126cf565b604051606081016001600160401b0381118282101715612707576127076126cf565b604051601f8201601f191681016001600160401b0381118282101715612779576127796126cf565b604052919050565b60006001600160401b0382111561279a5761279a6126cf565b50601f01601f191660200190565b600082601f8301126127b957600080fd5b81356127cc6127c782612781565b612751565b8181528460208386010111156127e157600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561281057600080fd5b81356001600160401b0381111561282657600080fd5b611298848285016127a8565b6000806040838503121561284557600080fd5b50508035926020909101359150565b60006040828403121561286657600080fd5b50919050565b60008060008060008060008060008060006101408c8e03121561288e57600080fd5b6128988c35612407565b8b359a506001600160401b038060208e013511156128b557600080fd5b6128c58e60208f01358f01612511565b909b50995060408d01358110156128db57600080fd5b506128ec8d60408e01358e0161248c565b909850965060608c013595506129058d60808e01612854565b945060c08c013561291581612407565b935061292360e08d0161241c565b92506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806040858703121561295b57600080fd5b84356001600160401b038082111561297257600080fd5b61297e88838901612511565b9096509450602087013591508082111561299757600080fd5b506129a487828801612511565b95989497509550505050565b6000604082840312156129c257600080fd5b610af78383612854565b600080604083850312156129df57600080fd5b82356001600160401b038111156129f557600080fd5b612a01858286016127a8565b95602094909401359450505050565b825181526020808401518183015282516040830152820151606082015260808101610af7565b6001600160401b03811681146112aa57600080fd5b600060808284031215612a5d57600080fd5b612a656126e5565b82518060070b8114612a7657600080fd5b81526020830151612a8681612a36565b60208201526040830151600381900b8114612aa057600080fd5b60408201526060928301519281019290925250919050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612ae057600080fd5b8135610af781612407565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761054557610545612aeb565b8051801515811461231d57600080fd5b600060208284031215612b3a57600080fd5b610af782612b18565b600060208284031215612b5557600080fd5b8151610af781612407565b60005b83811015612b7b578181015183820152602001612b63565b50506000910152565b600060808284031215612b9657600080fd5b612b9e6126e5565b90508151612bab81612407565b81526020820151612bbb81612407565b60208201526040820151612bce81612a36565b6040820152612bdf60608301612b18565b606082015292915050565b60006020808385031215612bfd57600080fd5b82516001600160401b0380821115612c1457600080fd5b9084019060a08287031215612c2857600080fd5b612c3061270d565b825182811115612c3f57600080fd5b830160608189031215612c5157600080fd5b612c5961272f565b815160ff81168114612c6a57600080fd5b81528186015186820152604082015184811115612c8657600080fd5b82019350601f84018913612c9957600080fd5b83519150612ca96127c783612781565b8281528987848701011115612cbd57600080fd5b612ccc83888301898801612b60565b6040820152825250612ce087848601612b84565b848201528094505050505092915050565b60008082840360e0811215612d0557600080fd5b60c0811215612d1357600080fd5b612d1b61272f565b84518152602085015160208201526080603f1983011215612d3b57600080fd5b612d436126e5565b91506040850151612d5381612407565b80835250606085015160208301526080850151604083015260a08501516060830152816040820152809350505060c083015190509250929050565b600060208284031215612da057600080fd5b8151610af781612a36565b8181038181111561054557610545612aeb565b600381810b9083900b01637fffffff8113637fffffff198212171561054557610545612aeb565b600060408284031215612df757600080fd5b612dff61270d565b82358152602083013560208201528091505092915050565b60008160030b637fffffff198103612e3157612e31612aeb565b60000392915050565b80820260008212600160ff1b84141615612e5657612e56612aeb565b818105831482151761054557610545612aeb565b634e487b7160e01b600052601260045260246000fd5b600082612e8f57612e8f612e6a565b600160ff1b821460001984141615612ea957612ea9612aeb565b500590565b6001600160c01b03811681146112aa57600080fd5b8135612ece81612eae565b81546001600160c01b03199081166001600160c01b039290921691821783556020840135612efb81612a36565b60c01b1617905550565b600060208284031215612f1757600080fd5b8135610af781612eae565b600060208284031215612f3457600080fd5b8135610af781612a36565b600181815b80851115612f7a578160001904821115612f6057612f60612aeb565b80851615612f6d57918102915b93841c9390800290612f44565b509250929050565b600082612f9157506001610545565b81612f9e57506000610545565b8160018114612fb45760028114612fbe57612fda565b6001915050610545565b60ff841115612fcf57612fcf612aeb565b50506001821b610545565b5060208310610133831016604e8410600b8410161715612ffd575081810a610545565b6130078383612f3f565b806000190482111561301b5761301b612aeb565b029392505050565b6000610af763ffffffff841683612f82565b60008261304457613044612e6a565b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613081816017850160208801612b60565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516130b2816028840160208801612b60565b01602801949350505050565b60208152600082518060208401526130dd816040850160208701612b60565b601f01601f19169190910160400192915050565b8082018082111561054557610545612aeb565b60008161311357613113612aeb565b506000190190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d0496611adae861791435296e0aae2099af9499031b6826466a4fe91423b08e564736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "bulkOverrideRenewalFees(bytes32[],uint256[])": { + "details": "Bulk override renewal fees. Requirements: - The method caller is operator. - The input array lengths must be larger than 0 and the same. Emits events {RenewalFeeOverridingUpdated}.", + "params": { + "lbHashes": "Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')", + "usdPrices": "Array of prices in USD. Leave 2^256 - 1 to remove overriding." + } + }, + "bulkSetDomainPrice(bytes32[],uint256[],bytes32[],uint256[])": { + "details": "Bulk override domain prices. Requirements: - The method caller is operator. - The input array lengths must be larger than 0 and the same. Emits events {DomainPriceUpdated}.", + "params": { + "lbHashes": "Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')", + "proofHashes": "Array of proof hashes.", + "ronPrices": "Array of prices in (W)RON token.", + "setTypes": "Array of update types from the operator service." + } + }, + "bulkTrySetDomainPrice(bytes32[],uint256[],bytes32[],uint256[])": { + "details": "Bulk try to set domain prices. Returns a boolean array indicating whether domain prices at the corresponding indexes if set or not. Requirements: - The method caller is operator. - The input array lengths must be larger than 0 and the same. - The price should be larger than current domain price or it will not be updated. Emits events {DomainPriceUpdated} optionally.", + "params": { + "lbHashes": "Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')", + "proofHashes": "Array of proof hashes.", + "ronPrices": "Array of prices in (W)RON token.", + "setTypes": "Array of update types from the operator service." + } + }, + "convertRONToUSD(uint256)": { + "details": "Returns the converted amount from RON to USD." + }, + "convertUSDToRON(uint256)": { + "details": "Returns the converted amount from USD to RON." + }, + "getDomainPrice(string)": { + "details": "Return the domain price.", + "params": { + "label": "The domain label to register (Eg, 'foo' for 'foo.ron')." + } + }, + "getOverriddenRenewalFee(string)": { + "details": "Returns the renewal fee of a label. Reverts if not overridden." + }, + "getPythOracleConfig()": { + "details": "Returns the Pyth oracle config." + }, + "getRenewalFee(string,uint256)": { + "details": "Returns the renewal fee in USD and RON.", + "params": { + "duration": "Amount of second(s).", + "label": "The domain label to register (Eg, 'foo' for 'foo.ron')." + } + }, + "getRenewalFeeByLengths()": { + "details": "Returns the renewal fee by lengths." + }, + "getRoleAdmin(bytes32)": { + "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + }, + "getRoleMember(bytes32,uint256)": { + "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information." + }, + "getRoleMemberCount(bytes32)": { + "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role." + }, + "getScaleDownRuleForDomainPrice()": { + "details": "Returns the percentage to scale from domain price each period." + }, + "getTaxRatio()": { + "details": "Returns tax ratio." + }, + "grantRole(bytes32,address)": { + "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + }, + "hasRole(bytes32,address)": { + "details": "Returns `true` if `account` has been granted `role`." + }, + "renounceRole(bytes32,address)": { + "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + }, + "revokeRole(bytes32,address)": { + "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + }, + "setPythOracleConfig(address,uint256,bytes32)": { + "details": "Sets the Pyth oracle config. Requirements: - The method caller is admin. Emits events {PythOracleConfigUpdated}." + }, + "setRenewalFeeByLengths((uint256,uint256)[])": { + "details": "Sets the renewal fee by lengths Requirements: - The method caller is admin. Emits events {RenewalFeeByLengthUpdated}. Emits an event {MaxRenewalFeeLengthUpdated} optionally." + }, + "setScaleDownRuleForDomainPrice((uint192,uint64))": { + "details": "Sets the percentage to scale from domain price each period. Requirements: - The method caller is admin. Emits events {DomainPriceScaleRuleUpdated}." + }, + "setTaxRatio(uint256)": { + "details": "Sets renewal reservation ratio. Requirements: - The method caller is admin. Emits an event {TaxRatioUpdated}." + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + } + }, + "events": { + "DomainPriceScaleRuleUpdated(address,uint192,uint64)": { + "details": "Emitted when the rule to rescale domain price is updated." + }, + "DomainPriceUpdated(address,bytes32,uint256,bytes32,uint256)": { + "details": "Emitted when the domain price is updated." + }, + "Initialized(uint8)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "MaxRenewalFeeLengthUpdated(address,uint256)": { + "details": "Emitted when the maximum length of renewal fee is updated." + }, + "PythOracleConfigUpdated(address,address,uint256,bytes32)": { + "details": "Emitted when the Pyth Oracle config is updated." + }, + "RenewalFeeByLengthUpdated(address,uint256,uint256)": { + "details": "Emitted when the renew fee is updated." + }, + "RenewalFeeOverridingUpdated(address,bytes32,uint256)": { + "details": "Emitted when the renew fee of a domain is overridden. Value of `inverseRenewalFee` is 0 when not overridden." + }, + "RoleAdminChanged(bytes32,bytes32,bytes32)": { + "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + }, + "RoleGranted(bytes32,address,address)": { + "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + }, + "RoleRevoked(bytes32,address,address)": { + "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + }, + "TaxRatioUpdated(address,uint256)": { + "details": "Emitted when the renewal reservation ratio is updated." + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"expo1\",\"type\":\"int32\"},{\"internalType\":\"int32\",\"name\":\"expo2\",\"type\":\"int32\"},{\"internalType\":\"int64\",\"name\":\"price1\",\"type\":\"int64\"}],\"name\":\"ErrComputedPriceTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int32\",\"name\":\"expo\",\"type\":\"int32\"}],\"name\":\"ErrExponentTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExceedAuctionDomainExpiry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"}],\"name\":\"PeriodNumOverflowedUint16\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RenewalFeeIsNotOverriden\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint192\",\"name\":\"ratio\",\"type\":\"uint192\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"period\",\"type\":\"uint64\"}],\"name\":\"DomainPriceScaleRuleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"labelHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"proofHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"setType\",\"type\":\"uint256\"}],\"name\":\"DomainPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"maxLength\",\"type\":\"uint256\"}],\"name\":\"MaxRenewalFeeLengthUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IPyth\",\"name\":\"pyth\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxAcceptableAge\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pythIdForRONUSD\",\"type\":\"bytes32\"}],\"name\":\"PythOracleConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"labelLength\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"renewalFee\",\"type\":\"uint256\"}],\"name\":\"RenewalFeeByLengthUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"labelHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inverseRenewalFee\",\"type\":\"uint256\"}],\"name\":\"RenewalFeeOverridingUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"TaxRatioUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OVERRIDER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"USD_DECIMALS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"lbHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"usdPrices\",\"type\":\"uint256[]\"}],\"name\":\"bulkOverrideRenewalFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"lbHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ronPrices\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"setTypes\",\"type\":\"uint256[]\"}],\"name\":\"bulkSetDomainPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"lbHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ronPrices\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"setTypes\",\"type\":\"uint256[]\"}],\"name\":\"bulkTrySetDomainPrice\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"updated\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ronWei\",\"type\":\"uint256\"}],\"name\":\"convertRONToUSD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"usdWei\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"usdWei\",\"type\":\"uint256\"}],\"name\":\"convertUSDToRON\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ronWei\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"getDomainPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ronPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"name\":\"getOverriddenRenewalFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"usdFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPythOracleConfig\",\"outputs\":[{\"internalType\":\"contract IPyth\",\"name\":\"pyth\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAcceptableAge\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"pythIdForRONUSD\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"getRenewalFee\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"usd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ron\",\"type\":\"uint256\"}],\"internalType\":\"struct INSDomainPrice.UnitPrice\",\"name\":\"basePrice\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"usd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ron\",\"type\":\"uint256\"}],\"internalType\":\"struct INSDomainPrice.UnitPrice\",\"name\":\"tax\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRenewalFeeByLengths\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"labelLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"internalType\":\"struct INSDomainPrice.RenewalFee[]\",\"name\":\"renewalFees\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getScaleDownRuleForDomainPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint192\",\"name\":\"ratio\",\"type\":\"uint192\"},{\"internalType\":\"uint64\",\"name\":\"period\",\"type\":\"uint64\"}],\"internalType\":\"struct PeriodScaler\",\"name\":\"scaleRule\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTaxRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"labelLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"internalType\":\"struct INSDomainPrice.RenewalFee[]\",\"name\":\"renewalFees\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"taxRatio\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint192\",\"name\":\"ratio\",\"type\":\"uint192\"},{\"internalType\":\"uint64\",\"name\":\"period\",\"type\":\"uint64\"}],\"internalType\":\"struct PeriodScaler\",\"name\":\"domainPriceScaleRule\",\"type\":\"tuple\"},{\"internalType\":\"contract IPyth\",\"name\":\"pyth\",\"type\":\"address\"},{\"internalType\":\"contract INSAuction\",\"name\":\"auction\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAcceptableAge\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"pythIdForRONUSD\",\"type\":\"bytes32\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IPyth\",\"name\":\"pyth\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAcceptableAge\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"pythIdForRONUSD\",\"type\":\"bytes32\"}],\"name\":\"setPythOracleConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"labelLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"internalType\":\"struct INSDomainPrice.RenewalFee[]\",\"name\":\"renewalFees\",\"type\":\"tuple[]\"}],\"name\":\"setRenewalFeeByLengths\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint192\",\"name\":\"ratio\",\"type\":\"uint192\"},{\"internalType\":\"uint64\",\"name\":\"period\",\"type\":\"uint64\"}],\"internalType\":\"struct PeriodScaler\",\"name\":\"scaleRule\",\"type\":\"tuple\"}],\"name\":\"setScaleDownRuleForDomainPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"ratio\",\"type\":\"uint256\"}],\"name\":\"setTaxRatio\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"DomainPriceScaleRuleUpdated(address,uint192,uint64)\":{\"details\":\"Emitted when the rule to rescale domain price is updated.\"},\"DomainPriceUpdated(address,bytes32,uint256,bytes32,uint256)\":{\"details\":\"Emitted when the domain price is updated.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"MaxRenewalFeeLengthUpdated(address,uint256)\":{\"details\":\"Emitted when the maximum length of renewal fee is updated.\"},\"PythOracleConfigUpdated(address,address,uint256,bytes32)\":{\"details\":\"Emitted when the Pyth Oracle config is updated.\"},\"RenewalFeeByLengthUpdated(address,uint256,uint256)\":{\"details\":\"Emitted when the renew fee is updated.\"},\"RenewalFeeOverridingUpdated(address,bytes32,uint256)\":{\"details\":\"Emitted when the renew fee of a domain is overridden. Value of `inverseRenewalFee` is 0 when not overridden.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"TaxRatioUpdated(address,uint256)\":{\"details\":\"Emitted when the renewal reservation ratio is updated.\"}},\"kind\":\"dev\",\"methods\":{\"bulkOverrideRenewalFees(bytes32[],uint256[])\":{\"details\":\"Bulk override renewal fees. Requirements: - The method caller is operator. - The input array lengths must be larger than 0 and the same. Emits events {RenewalFeeOverridingUpdated}.\",\"params\":{\"lbHashes\":\"Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\",\"usdPrices\":\"Array of prices in USD. Leave 2^256 - 1 to remove overriding.\"}},\"bulkSetDomainPrice(bytes32[],uint256[],bytes32[],uint256[])\":{\"details\":\"Bulk override domain prices. Requirements: - The method caller is operator. - The input array lengths must be larger than 0 and the same. Emits events {DomainPriceUpdated}.\",\"params\":{\"lbHashes\":\"Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\",\"proofHashes\":\"Array of proof hashes.\",\"ronPrices\":\"Array of prices in (W)RON token.\",\"setTypes\":\"Array of update types from the operator service.\"}},\"bulkTrySetDomainPrice(bytes32[],uint256[],bytes32[],uint256[])\":{\"details\":\"Bulk try to set domain prices. Returns a boolean array indicating whether domain prices at the corresponding indexes if set or not. Requirements: - The method caller is operator. - The input array lengths must be larger than 0 and the same. - The price should be larger than current domain price or it will not be updated. Emits events {DomainPriceUpdated} optionally.\",\"params\":{\"lbHashes\":\"Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\",\"proofHashes\":\"Array of proof hashes.\",\"ronPrices\":\"Array of prices in (W)RON token.\",\"setTypes\":\"Array of update types from the operator service.\"}},\"convertRONToUSD(uint256)\":{\"details\":\"Returns the converted amount from RON to USD.\"},\"convertUSDToRON(uint256)\":{\"details\":\"Returns the converted amount from USD to RON.\"},\"getDomainPrice(string)\":{\"details\":\"Return the domain price.\",\"params\":{\"label\":\"The domain label to register (Eg, 'foo' for 'foo.ron').\"}},\"getOverriddenRenewalFee(string)\":{\"details\":\"Returns the renewal fee of a label. Reverts if not overridden.\"},\"getPythOracleConfig()\":{\"details\":\"Returns the Pyth oracle config.\"},\"getRenewalFee(string,uint256)\":{\"details\":\"Returns the renewal fee in USD and RON.\",\"params\":{\"duration\":\"Amount of second(s).\",\"label\":\"The domain label to register (Eg, 'foo' for 'foo.ron').\"}},\"getRenewalFeeByLengths()\":{\"details\":\"Returns the renewal fee by lengths.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"getScaleDownRuleForDomainPrice()\":{\"details\":\"Returns the percentage to scale from domain price each period.\"},\"getTaxRatio()\":{\"details\":\"Returns tax ratio.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setPythOracleConfig(address,uint256,bytes32)\":{\"details\":\"Sets the Pyth oracle config. Requirements: - The method caller is admin. Emits events {PythOracleConfigUpdated}.\"},\"setRenewalFeeByLengths((uint256,uint256)[])\":{\"details\":\"Sets the renewal fee by lengths Requirements: - The method caller is admin. Emits events {RenewalFeeByLengthUpdated}. Emits an event {MaxRenewalFeeLengthUpdated} optionally.\"},\"setScaleDownRuleForDomainPrice((uint192,uint64))\":{\"details\":\"Sets the percentage to scale from domain price each period. Requirements: - The method caller is admin. Emits events {DomainPriceScaleRuleUpdated}.\"},\"setTaxRatio(uint256)\":{\"details\":\"Sets renewal reservation ratio. Requirements: - The method caller is admin. Emits an event {TaxRatioUpdated}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"stateVariables\":{\"MAX_PERCENTAGE\":{\"details\":\"Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\"},\"OPERATOR_ROLE\":{\"details\":\"Value equals to keccak256(\\\"OPERATOR_ROLE\\\").\"},\"OVERRIDER_ROLE\":{\"details\":\"Returns the overrider role.\"},\"USD_DECIMALS\":{\"details\":\"Decimal for USD.\"},\"____gap\":{\"details\":\"Gap for upgradeability.\"},\"_auction\":{\"details\":\"RNSAuction contract\"},\"_dp\":{\"details\":\"Mapping from name => domain price in USD\"},\"_dpDownScaler\":{\"details\":\"The percentage scale from domain price each period\"},\"_maxAcceptableAge\":{\"details\":\"Max acceptable age of the price oracle request\"},\"_pyth\":{\"details\":\"Pyth oracle contract\"},\"_pythIdForRONUSD\":{\"details\":\"Price feed ID on Pyth for RON/USD\"},\"_rnFee\":{\"details\":\"Mapping from domain length => renewal fee in USD\"},\"_rnFeeOverriding\":{\"details\":\"Mapping from name => inverse bitwise of renewal fee overriding.\"},\"_rnfMaxLength\":{\"details\":\"Max length of the renewal fee\"},\"_taxRatio\":{\"details\":\"Extra fee for renewals based on the current domain price.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getOverriddenRenewalFee(string)\":{\"notice\":\"This method is to help developers check the domain renewal fee overriding. Consider using method {getRenewalFee} instead for full handling of renewal fees.\"},\"setScaleDownRuleForDomainPrice((uint192,uint64))\":{\"notice\":\"Applies for the business rule: -x% each y seconds.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RNSDomainPrice.sol\":\"RNSDomainPrice\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```solidity\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```solidity\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\\n * to enforce additional security measures for this role.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0dd6e52cb394d7f5abe5dca2d4908a6be40417914720932de757de34a99ab87f\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlEnumerable.sol\\\";\\nimport \\\"./AccessControl.sol\\\";\\nimport \\\"../utils/structs/EnumerableSet.sol\\\";\\n\\n/**\\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\\n */\\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\\n using EnumerableSet for EnumerableSet.AddressSet;\\n\\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {\\n return _roleMembers[role].at(index);\\n }\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) public view virtual override returns (uint256) {\\n return _roleMembers[role].length();\\n }\\n\\n /**\\n * @dev Overload {_grantRole} to track enumerable memberships\\n */\\n function _grantRole(bytes32 role, address account) internal virtual override {\\n super._grantRole(role, account);\\n _roleMembers[role].add(account);\\n }\\n\\n /**\\n * @dev Overload {_revokeRole} to track enumerable memberships\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual override {\\n super._revokeRole(role, account);\\n _roleMembers[role].remove(account);\\n }\\n}\\n\",\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toString(int256 value) internal pure returns (string memory) {\\n return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\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) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message 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(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x58b21219689909c4f8339af00813760337f7e2e7f169a97fe49e2896dcfb3b9a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)\\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```solidity\\n * contract Example {\\n * // Add the library methods\\n * using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n * // Declare a set state variable\\n * EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n *\\n * [WARNING]\\n * ====\\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\\n * unusable.\\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\\n *\\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\\n * array of EnumerableSet.\\n * ====\\n */\\nlibrary EnumerableSet {\\n // To implement this library for multiple types with as little code\\n // repetition as possible, we write it in terms of a generic Set type with\\n // bytes32 values.\\n // The Set implementation uses private functions, and user-facing\\n // implementations (such as AddressSet) are just wrappers around the\\n // underlying Set.\\n // This means that we can only create new EnumerableSets for types that fit\\n // in bytes32.\\n\\n struct Set {\\n // Storage of set values\\n bytes32[] _values;\\n // Position of the value in the `values` array, plus 1 because index 0\\n // means a value is not in the set.\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n // The value is stored at length-1, but we add 1 to all indexes\\n // and use 0 as a sentinel value\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n // We read and store the value's index to prevent multiple reads from the same storage slot\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n // Equivalent to contains(set, value)\\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n // the array, and then remove the last element (sometimes called as 'swap and pop').\\n // This modifies the order of the array, as noted in {at}.\\n\\n uint256 toDeleteIndex = valueIndex - 1;\\n uint256 lastIndex = set._values.length - 1;\\n\\n if (lastIndex != toDeleteIndex) {\\n bytes32 lastValue = set._values[lastIndex];\\n\\n // Move the last value to the index where the value to delete is\\n set._values[toDeleteIndex] = lastValue;\\n // Update the index for the moved value\\n set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex\\n }\\n\\n // Delete the slot where the moved value was stored\\n set._values.pop();\\n\\n // Delete the index for the deleted slot\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n return set._indexes[value] != 0;\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n return set._values[index];\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function _values(Set storage set) private view returns (bytes32[] memory) {\\n return set._values;\\n }\\n\\n // Bytes32Set\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _add(set._inner, value);\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _remove(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n return _contains(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n return _at(set._inner, index);\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n bytes32[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // AddressSet\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(AddressSet storage set, address value) internal returns (bool) {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(AddressSet storage set, address value) internal returns (bool) {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(AddressSet storage set, address value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(AddressSet storage set) internal view returns (address[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n address[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // UintSet\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n return uint256(_at(set._inner, index));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(UintSet storage set) internal view returns (uint256[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n uint256[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\"},\"lib/pyth-sdk-solidity/IPyth.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PythStructs.sol\\\";\\nimport \\\"./IPythEvents.sol\\\";\\n\\n/// @title Consume prices from the Pyth Network (https://pyth.network/).\\n/// @dev Please refer to the guidance at https://docs.pyth.network/consumers/best-practices for how to consume prices safely.\\n/// @author Pyth Data Association\\ninterface IPyth is IPythEvents {\\n /// @notice Returns the period (in seconds) that a price feed is considered valid since its publish time\\n function getValidTimePeriod() external view returns (uint validTimePeriod);\\n\\n /// @notice Returns the price and confidence interval.\\n /// @dev Reverts if the price has not been updated within the last `getValidTimePeriod()` seconds.\\n /// @param id The Pyth Price Feed ID of which to fetch the price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price and confidence interval.\\n /// @dev Reverts if the EMA price is not available.\\n /// @param id The Pyth Price Feed ID of which to fetch the EMA price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price of a price feed without any sanity checks.\\n /// @dev This function returns the most recent price update in this contract without any recency checks.\\n /// This function is unsafe as the returned price update may be arbitrarily far in the past.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getPrice` or `getPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price that is no older than `age` seconds of the current time.\\n /// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks.\\n /// @dev This function returns the same price as `getEmaPrice` in the case where the price is available.\\n /// However, if the price is not recent this function returns the latest available price.\\n ///\\n /// The returned price can be from arbitrarily far in the past; this function makes no guarantees that\\n /// the returned price is recent or useful for any particular application.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds\\n /// of the current time.\\n /// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Update price feeds with given update messages.\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n /// Prices will be updated if they are more recent than the current stored prices.\\n /// The call will succeed even if the update is not the most recent.\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n function updatePriceFeeds(bytes[] calldata updateData) external payable;\\n\\n /// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is\\n /// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the\\n /// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n /// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime\\n /// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have\\n /// a newer or equal publish time than the given publish time, it will reject the transaction to save gas.\\n /// Otherwise, it calls updatePriceFeeds method to update the prices.\\n ///\\n /// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]`\\n function updatePriceFeedsIfNecessary(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64[] calldata publishTimes\\n ) external payable;\\n\\n /// @notice Returns the required fee to update an array of price updates.\\n /// @param updateData Array of price update data.\\n /// @return feeAmount The required fee in Wei.\\n function getUpdateFee(\\n bytes[] calldata updateData\\n ) external view returns (uint feeAmount);\\n\\n /// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published\\n /// within `minPublishTime` and `maxPublishTime`.\\n ///\\n /// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price;\\n /// otherwise, please consider using `updatePriceFeeds`. This method does not store the price updates on-chain.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n ///\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is\\n /// no update for any of the given `priceIds` within the given time range.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.\\n /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.\\n /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).\\n function parsePriceFeedUpdates(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64 minPublishTime,\\n uint64 maxPublishTime\\n ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);\\n}\\n\",\"keccak256\":\"0x949c65c65fea0578c09a6fc068e09ed1165adede2c835984cefcb25d76de1de2\",\"license\":\"Apache-2.0\"},\"lib/pyth-sdk-solidity/IPythEvents.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/// @title IPythEvents contains the events that Pyth contract emits.\\n/// @dev This interface can be used for listening to the updates for off-chain and testing purposes.\\ninterface IPythEvents {\\n /// @dev Emitted when the price feed with `id` has received a fresh update.\\n /// @param id The Pyth Price Feed ID.\\n /// @param publishTime Publish time of the given price update.\\n /// @param price Price of the given price update.\\n /// @param conf Confidence interval of the given price update.\\n event PriceFeedUpdate(\\n bytes32 indexed id,\\n uint64 publishTime,\\n int64 price,\\n uint64 conf\\n );\\n\\n /// @dev Emitted when a batch price update is processed successfully.\\n /// @param chainId ID of the source chain that the batch price update comes from.\\n /// @param sequenceNumber Sequence number of the batch price update.\\n event BatchPriceFeedUpdate(uint16 chainId, uint64 sequenceNumber);\\n}\\n\",\"keccak256\":\"0x048a35526c2e77d107d43ba336f1dcf31f64cef25ba429ae1f7a0fbc11c23320\",\"license\":\"Apache-2.0\"},\"lib/pyth-sdk-solidity/PythStructs.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\ncontract PythStructs {\\n // A price with a degree of uncertainty, represented as a price +- a confidence interval.\\n //\\n // The confidence interval roughly corresponds to the standard error of a normal distribution.\\n // Both the price and confidence are stored in a fixed-point numeric representation,\\n // `x * (10^expo)`, where `expo` is the exponent.\\n //\\n // Please refer to the documentation at https://docs.pyth.network/consumers/best-practices for how\\n // to how this price safely.\\n struct Price {\\n // Price\\n int64 price;\\n // Confidence interval around the price\\n uint64 conf;\\n // Price exponent\\n int32 expo;\\n // Unix timestamp describing when the price was published\\n uint publishTime;\\n }\\n\\n // PriceFeed represents a current aggregate price from pyth publisher feeds.\\n struct PriceFeed {\\n // The price ID.\\n bytes32 id;\\n // Latest available price\\n Price price;\\n // Latest available exponentially-weighted moving average price\\n Price emaPrice;\\n }\\n}\\n\",\"keccak256\":\"0x95ff0a6d64517348ef604b8bcf246b561a9445d7e607b8f48491c617cfda9b65\",\"license\":\"Apache-2.0\"},\"src/RNSDomainPrice.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { AccessControlEnumerable } from \\\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\\\";\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\nimport { IPyth, PythStructs } from \\\"@pythnetwork/IPyth.sol\\\";\\nimport { INSUnified } from \\\"./interfaces/INSUnified.sol\\\";\\nimport { INSAuction } from \\\"./interfaces/INSAuction.sol\\\";\\nimport { INSDomainPrice } from \\\"./interfaces/INSDomainPrice.sol\\\";\\nimport { PeriodScaler, LibPeriodScaler, Math } from \\\"./libraries/math/PeriodScalingUtils.sol\\\";\\nimport { TimestampWrapper } from \\\"./libraries/TimestampWrapperUtils.sol\\\";\\nimport { LibSafeRange } from \\\"./libraries/math/LibSafeRange.sol\\\";\\nimport { LibString } from \\\"./libraries/LibString.sol\\\";\\nimport { LibRNSDomain } from \\\"./libraries/LibRNSDomain.sol\\\";\\nimport { PythConverter } from \\\"./libraries/pyth/PythConverter.sol\\\";\\n\\ncontract RNSDomainPrice is Initializable, AccessControlEnumerable, INSDomainPrice {\\n using LibString for *;\\n using LibRNSDomain for string;\\n using LibPeriodScaler for PeriodScaler;\\n using PythConverter for PythStructs.Price;\\n\\n /// @inheritdoc INSDomainPrice\\n uint8 public constant USD_DECIMALS = 18;\\n /// @inheritdoc INSDomainPrice\\n uint64 public constant MAX_PERCENTAGE = 100_00;\\n /// @inheritdoc INSDomainPrice\\n bytes32 public constant OPERATOR_ROLE = keccak256(\\\"OPERATOR_ROLE\\\");\\n /// @inheritdoc INSDomainPrice\\n bytes32 public constant OVERRIDER_ROLE = keccak256(\\\"OVERRIDER_ROLE\\\");\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Pyth oracle contract\\n IPyth internal _pyth;\\n /// @dev RNSAuction contract\\n INSAuction internal _auction;\\n /// @dev Extra fee for renewals based on the current domain price.\\n uint256 internal _taxRatio;\\n /// @dev Max length of the renewal fee\\n uint256 internal _rnfMaxLength;\\n /// @dev Max acceptable age of the price oracle request\\n uint256 internal _maxAcceptableAge;\\n /// @dev Price feed ID on Pyth for RON/USD\\n bytes32 internal _pythIdForRONUSD;\\n /// @dev The percentage scale from domain price each period\\n PeriodScaler internal _dpDownScaler;\\n\\n /// @dev Mapping from domain length => renewal fee in USD\\n mapping(uint256 length => uint256 usdPrice) internal _rnFee;\\n /// @dev Mapping from name => domain price in USD\\n mapping(bytes32 lbHash => TimestampWrapper usdPrice) internal _dp;\\n /// @dev Mapping from name => inverse bitwise of renewal fee overriding.\\n mapping(bytes32 lbHash => uint256 usdPrice) internal _rnFeeOverriding;\\n\\n constructor() payable {\\n _disableInitializers();\\n }\\n\\n function initialize(\\n address admin,\\n address[] calldata operators,\\n RenewalFee[] calldata renewalFees,\\n uint256 taxRatio,\\n PeriodScaler calldata domainPriceScaleRule,\\n IPyth pyth,\\n INSAuction auction,\\n uint256 maxAcceptableAge,\\n bytes32 pythIdForRONUSD\\n ) external initializer {\\n uint256 length = operators.length;\\n bytes32 operatorRole = OPERATOR_ROLE;\\n\\n for (uint256 i; i < length;) {\\n _setupRole(operatorRole, operators[i]);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n _auction = auction;\\n _setupRole(DEFAULT_ADMIN_ROLE, admin);\\n _setRenewalFeeByLengths(renewalFees);\\n _setTaxRatio(taxRatio);\\n _setDomainPriceScaleRule(domainPriceScaleRule);\\n _setPythOracleConfig(pyth, maxAcceptableAge, pythIdForRONUSD);\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function getPythOracleConfig() external view returns (IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) {\\n return (_pyth, _maxAcceptableAge, _pythIdForRONUSD);\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD)\\n external\\n onlyRole(DEFAULT_ADMIN_ROLE)\\n {\\n _setPythOracleConfig(pyth, maxAcceptableAge, pythIdForRONUSD);\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function getRenewalFeeByLengths() external view returns (RenewalFee[] memory renewalFees) {\\n uint256 rnfMaxLength = _rnfMaxLength;\\n renewalFees = new RenewalFee[](rnfMaxLength);\\n uint256 len;\\n\\n for (uint256 i; i < rnfMaxLength;) {\\n unchecked {\\n len = i + 1;\\n renewalFees[i].labelLength = len;\\n renewalFees[i].fee = _rnFee[len];\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setRenewalFeeByLengths(renewalFees);\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function getTaxRatio() external view returns (uint256 ratio) {\\n return _taxRatio;\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function setTaxRatio(uint256 ratio) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setTaxRatio(ratio);\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function getScaleDownRuleForDomainPrice() external view returns (PeriodScaler memory scaleRule) {\\n return _dpDownScaler;\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function setScaleDownRuleForDomainPrice(PeriodScaler calldata scaleRule) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setDomainPriceScaleRule(scaleRule);\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function getOverriddenRenewalFee(string calldata label) external view returns (uint256 usdFee) {\\n usdFee = _rnFeeOverriding[label.hashLabel()];\\n if (usdFee == 0) revert RenewalFeeIsNotOverriden();\\n return ~usdFee;\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function bulkOverrideRenewalFees(bytes32[] calldata lbHashes, uint256[] calldata usdPrices)\\n external\\n onlyRole(OVERRIDER_ROLE)\\n {\\n uint256 length = lbHashes.length;\\n if (length == 0 || length != usdPrices.length) revert InvalidArrayLength();\\n uint256 inverseBitwise;\\n address operator = _msgSender();\\n\\n for (uint256 i; i < length;) {\\n inverseBitwise = ~usdPrices[i];\\n _rnFeeOverriding[lbHashes[i]] = inverseBitwise;\\n emit RenewalFeeOverridingUpdated(operator, lbHashes[i], inverseBitwise);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function bulkTrySetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external onlyRole(OPERATOR_ROLE) returns (bool[] memory updated) {\\n uint256 length = _requireBulkSetDomainPriceArgumentsValid(lbHashes, ronPrices, proofHashes, setTypes);\\n address operator = _msgSender();\\n updated = new bool[](length);\\n\\n for (uint256 i; i < length;) {\\n updated[i] = _setDomainPrice(operator, lbHashes[i], ronPrices[i], proofHashes[i], setTypes[i], false);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function bulkSetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external onlyRole(OVERRIDER_ROLE) {\\n uint256 length = _requireBulkSetDomainPriceArgumentsValid(lbHashes, ronPrices, proofHashes, setTypes);\\n address operator = _msgSender();\\n\\n for (uint256 i; i < length;) {\\n _setDomainPrice(operator, lbHashes[i], ronPrices[i], proofHashes[i], setTypes[i], true);\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function getDomainPrice(string memory label) public view returns (uint256 usdPrice, uint256 ronPrice) {\\n usdPrice = _getDomainPrice(label.hashLabel());\\n ronPrice = convertUSDToRON(usdPrice);\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function getRenewalFee(string memory label, uint256 duration)\\n public\\n view\\n returns (UnitPrice memory basePrice, UnitPrice memory tax)\\n {\\n uint256 nameLen = label.strlen();\\n bytes32 lbHash = label.hashLabel();\\n uint256 overriddenRenewalFee = _rnFeeOverriding[lbHash];\\n\\n if (overriddenRenewalFee != 0) {\\n basePrice.usd = duration * ~overriddenRenewalFee;\\n } else {\\n uint256 renewalFeeByLength = _rnFee[Math.min(nameLen, _rnfMaxLength)];\\n basePrice.usd = duration * renewalFeeByLength;\\n uint256 id = LibRNSDomain.toId(LibRNSDomain.RON_ID, label);\\n INSAuction auction = _auction;\\n if (auction.reserved(id)) {\\n INSUnified rns = auction.getRNSUnified();\\n uint256 expiry = LibSafeRange.addWithUpperbound(rns.getRecord(id).mut.expiry, duration, type(uint64).max);\\n (INSAuction.DomainAuction memory domainAuction,) = auction.getAuction(id);\\n uint256 claimedAt = domainAuction.bid.claimedAt;\\n if (claimedAt != 0 && expiry - claimedAt > auction.MAX_AUCTION_DOMAIN_EXPIRY()) {\\n revert ExceedAuctionDomainExpiry();\\n }\\n // Tax is added to the name reserved for the auction\\n tax.usd = Math.mulDiv(_taxRatio, _getDomainPrice(lbHash), MAX_PERCENTAGE);\\n }\\n }\\n\\n tax.ron = convertUSDToRON(tax.usd);\\n basePrice.ron = convertUSDToRON(basePrice.usd);\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function convertUSDToRON(uint256 usdWei) public view returns (uint256 ronWei) {\\n return _pyth.getPriceNoOlderThan(_pythIdForRONUSD, _maxAcceptableAge).inverse({ expo: -18 }).mul({\\n inpWei: usdWei,\\n inpDecimals: int32(uint32(USD_DECIMALS)),\\n outDecimals: 18\\n });\\n }\\n\\n /**\\n * @inheritdoc INSDomainPrice\\n */\\n function convertRONToUSD(uint256 ronWei) public view returns (uint256 usdWei) {\\n return _pyth.getPriceNoOlderThan(_pythIdForRONUSD, _maxAcceptableAge).mul({\\n inpWei: ronWei,\\n inpDecimals: 18,\\n outDecimals: int32(uint32(USD_DECIMALS))\\n });\\n }\\n\\n /**\\n * @dev Reverts if the arguments of the method {bulkSetDomainPrice} is invalid.\\n */\\n function _requireBulkSetDomainPriceArgumentsValid(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) internal pure returns (uint256 length) {\\n length = lbHashes.length;\\n if (length == 0 || ronPrices.length != length || proofHashes.length != length || setTypes.length != length) {\\n revert InvalidArrayLength();\\n }\\n }\\n\\n /**\\n * @dev Helper method to set domain price.\\n *\\n * Emits an event {DomainPriceUpdated} optionally.\\n */\\n function _setDomainPrice(\\n address operator,\\n bytes32 lbHash,\\n uint256 ronPrice,\\n bytes32 proofHash,\\n uint256 setType,\\n bool forced\\n ) internal returns (bool updated) {\\n uint256 usdPrice = convertRONToUSD(ronPrice);\\n TimestampWrapper storage dp = _dp[lbHash];\\n updated = forced || dp.value < usdPrice;\\n\\n if (updated) {\\n dp.value = usdPrice;\\n dp.timestamp = block.timestamp;\\n emit DomainPriceUpdated(operator, lbHash, usdPrice, proofHash, setType);\\n }\\n }\\n\\n /**\\n * @dev Sets renewal reservation ratio.\\n *\\n * Emits an event {TaxRatioUpdated}.\\n */\\n function _setTaxRatio(uint256 ratio) internal {\\n _taxRatio = ratio;\\n emit TaxRatioUpdated(_msgSender(), ratio);\\n }\\n\\n /**\\n * @dev Sets domain price scale rule.\\n *\\n * Emits events {DomainPriceScaleRuleUpdated}.\\n */\\n function _setDomainPriceScaleRule(PeriodScaler calldata domainPriceScaleRule) internal {\\n _dpDownScaler = domainPriceScaleRule;\\n emit DomainPriceScaleRuleUpdated(_msgSender(), domainPriceScaleRule.ratio, domainPriceScaleRule.period);\\n }\\n\\n /**\\n * @dev Sets renewal fee.\\n *\\n * Emits events {RenewalFeeByLengthUpdated}.\\n * Emits an event {MaxRenewalFeeLengthUpdated} optionally.\\n */\\n function _setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) internal {\\n address operator = _msgSender();\\n RenewalFee memory renewalFee;\\n uint256 length = renewalFees.length;\\n uint256 maxRenewalFeeLength = _rnfMaxLength;\\n\\n for (uint256 i; i < length;) {\\n renewalFee = renewalFees[i];\\n maxRenewalFeeLength = Math.max(maxRenewalFeeLength, renewalFee.labelLength);\\n _rnFee[renewalFee.labelLength] = renewalFee.fee;\\n emit RenewalFeeByLengthUpdated(operator, renewalFee.labelLength, renewalFee.fee);\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n if (maxRenewalFeeLength != _rnfMaxLength) {\\n _rnfMaxLength = maxRenewalFeeLength;\\n emit MaxRenewalFeeLengthUpdated(operator, maxRenewalFeeLength);\\n }\\n }\\n\\n /**\\n * @dev Sets Pyth Oracle config.\\n *\\n * Emits events {PythOracleConfigUpdated}.\\n */\\n function _setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) internal {\\n _pyth = pyth;\\n _maxAcceptableAge = maxAcceptableAge;\\n _pythIdForRONUSD = pythIdForRONUSD;\\n emit PythOracleConfigUpdated(_msgSender(), pyth, maxAcceptableAge, pythIdForRONUSD);\\n }\\n\\n /**\\n * @dev Returns the current domain price applied the business rule: deduced x% each y seconds.\\n */\\n function _getDomainPrice(bytes32 lbHash) internal view returns (uint256) {\\n TimestampWrapper storage dp = _dp[lbHash];\\n uint256 lastSyncedAt = dp.timestamp;\\n if (lastSyncedAt == 0) return 0;\\n\\n uint256 passedDuration = block.timestamp - lastSyncedAt;\\n return _dpDownScaler.scaleDown({ v: dp.value, maxR: MAX_PERCENTAGE, dur: passedDuration });\\n }\\n}\\n\",\"keccak256\":\"0xb317170571c1e6fbb5504f6348a4a713133a3e457b8cfdb4a225ed075e455f16\",\"license\":\"MIT\"},\"src/interfaces/INSAuction.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\nimport { EventRange } from \\\"../libraries/LibEventRange.sol\\\";\\n\\ninterface INSAuction {\\n error NotYetEnded();\\n error NoOneBidded();\\n error NullAssignment();\\n error AlreadyBidding();\\n error RatioIsTooLarge();\\n error NameNotReserved();\\n error InvalidEventRange();\\n error QueryIsNotInPeriod();\\n error InsufficientAmount();\\n error InvalidArrayLength();\\n error BidderCannotReceiveRON();\\n error EventIsNotCreatedOrAlreadyStarted();\\n\\n struct Bid {\\n address payable bidder;\\n uint256 price;\\n uint256 timestamp;\\n uint256 claimedAt;\\n }\\n\\n struct DomainAuction {\\n bytes32 auctionId;\\n uint256 startingPrice;\\n Bid bid;\\n }\\n\\n /// @dev Emitted when an auction is set.\\n event AuctionEventSet(bytes32 indexed auctionId, EventRange range);\\n /// @dev Emitted when the labels are listed for auction.\\n event LabelsListed(bytes32 indexed auctionId, uint256[] ids, uint256[] startingPrices);\\n /// @dev Emitted when a bid is placed for a name.\\n event BidPlaced(\\n bytes32 indexed auctionId,\\n uint256 indexed id,\\n uint256 price,\\n address payable bidder,\\n uint256 previousPrice,\\n address previousBidder\\n );\\n /// @dev Emitted when the treasury is updated.\\n event TreasuryUpdated(address indexed addr);\\n /// @dev Emitted when bid gap ratio is updated.\\n event BidGapRatioUpdated(uint256 ratio);\\n\\n /**\\n * @dev The maximum expiry duration\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev The maximum expiry duration of a domain after transferring to bidder.\\n */\\n function MAX_AUCTION_DOMAIN_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the operator role.\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\\n */\\n function MAX_PERCENTAGE() external pure returns (uint256);\\n\\n /**\\n * @dev The expiry duration of a domain after transferring to bidder.\\n */\\n function DOMAIN_EXPIRY_DURATION() external pure returns (uint64);\\n\\n /**\\n * @dev Claims domain names for auction.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n *\\n * @param labels The domain names. Eg, ['foo'] for 'foo.ron'\\n * @return ids The id corresponding for namehash of domain names.\\n */\\n function bulkRegister(string[] calldata labels) external returns (uint256[] memory ids);\\n\\n /**\\n * @dev Checks whether a domain name is currently reserved for auction or not.\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function reserved(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Creates a new auction to sale with a specific time period.\\n *\\n * Requirements:\\n * - The method caller must be admin.\\n *\\n * Emits an event {AuctionEventSet}.\\n *\\n * @return auctionId The auction id\\n * @notice Please use the method `setAuctionNames` to list all the reserved names.\\n */\\n function createAuctionEvent(EventRange calldata range) external returns (bytes32 auctionId);\\n\\n /**\\n * @dev Updates the auction details.\\n *\\n * Requirements:\\n * - The method caller must be admin.\\n *\\n * Emits an event {AuctionEventSet}.\\n */\\n function setAuctionEvent(bytes32 auctionId, EventRange calldata range) external;\\n\\n /**\\n * @dev Returns the event range of an auction.\\n */\\n function getAuctionEvent(bytes32 auctionId) external view returns (EventRange memory);\\n\\n /**\\n * @dev Lists reserved names to sale in a specified auction.\\n *\\n * Requirements:\\n * - The method caller must be contract operator.\\n * - Array length are matched and larger than 0.\\n * - Only allow to set when the domain is:\\n * + Not in any auction.\\n * + Or, in the current auction.\\n * + Or, this name is not bided.\\n *\\n * Emits an event {LabelsListed}.\\n *\\n * Note: If the name is already listed, this method replaces with a new input value.\\n *\\n * @param ids The namehashes id of domain names. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function listNamesForAuction(bytes32 auctionId, uint256[] calldata ids, uint256[] calldata startingPrices) external;\\n\\n /**\\n * @dev Places a bid for a domain name.\\n *\\n * Requirements:\\n * - The name is listed, or the auction is happening.\\n * - The msg.value is larger than the current bid price or the auction starting price.\\n *\\n * Emits an event {BidPlaced}.\\n *\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function placeBid(uint256 id) external payable;\\n\\n /**\\n * @dev Returns the highest bid and address of the bidder.\\n * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function getAuction(uint256 id) external view returns (DomainAuction memory, uint256 beatPrice);\\n\\n /**\\n * @dev Bulk claims the bid name.\\n *\\n * Requirements:\\n * - Must be called after ended time.\\n * - The method caller can be anyone.\\n *\\n * @param ids The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron'\\n */\\n function bulkClaimBidNames(uint256[] calldata ids) external returns (uint256[] memory claimedAts);\\n\\n /**\\n * @dev Returns the treasury.\\n */\\n function getTreasury() external view returns (address);\\n\\n /**\\n * @dev Returns the gap ratio between 2 bids with the starting price. Value in range [0;100_00] is 0%-100%.\\n */\\n function getBidGapRatio() external view returns (uint256);\\n\\n /**\\n * @dev Sets the treasury.\\n *\\n * Requirements:\\n * - The method caller must be admin\\n *\\n * Emits an event {TreasuryUpdated}.\\n */\\n function setTreasury(address payable) external;\\n\\n /**\\n * @dev Sets commission ratio. Value in range [0;100_00] is 0%-100%.\\n *\\n * Requirements:\\n * - The method caller must be admin\\n *\\n * Emits an event {BidGapRatioUpdated}.\\n */\\n function setBidGapRatio(uint256) external;\\n\\n /**\\n * @dev Returns RNSUnified contract.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n}\\n\",\"keccak256\":\"0x135ec8837e89471cc437e90897896264b2bb4ba36ff332f7d30485c397888e03\",\"license\":\"MIT\"},\"src/interfaces/INSDomainPrice.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { PeriodScaler } from \\\"../libraries/math/PeriodScalingUtils.sol\\\";\\nimport { IPyth } from \\\"@pythnetwork/IPyth.sol\\\";\\n\\ninterface INSDomainPrice {\\n error InvalidArrayLength();\\n error RenewalFeeIsNotOverriden();\\n error ExceedAuctionDomainExpiry();\\n\\n struct RenewalFee {\\n uint256 labelLength;\\n uint256 fee;\\n }\\n\\n struct UnitPrice {\\n uint256 usd;\\n uint256 ron;\\n }\\n\\n /// @dev Emitted when the renewal reservation ratio is updated.\\n event TaxRatioUpdated(address indexed operator, uint256 indexed ratio);\\n /// @dev Emitted when the maximum length of renewal fee is updated.\\n event MaxRenewalFeeLengthUpdated(address indexed operator, uint256 indexed maxLength);\\n /// @dev Emitted when the renew fee is updated.\\n event RenewalFeeByLengthUpdated(address indexed operator, uint256 indexed labelLength, uint256 renewalFee);\\n /// @dev Emitted when the renew fee of a domain is overridden. Value of `inverseRenewalFee` is 0 when not overridden.\\n event RenewalFeeOverridingUpdated(address indexed operator, bytes32 indexed labelHash, uint256 inverseRenewalFee);\\n\\n /// @dev Emitted when the domain price is updated.\\n event DomainPriceUpdated(\\n address indexed operator, bytes32 indexed labelHash, uint256 price, bytes32 indexed proofHash, uint256 setType\\n );\\n /// @dev Emitted when the rule to rescale domain price is updated.\\n event DomainPriceScaleRuleUpdated(address indexed operator, uint192 ratio, uint64 period);\\n\\n /// @dev Emitted when the Pyth Oracle config is updated.\\n event PythOracleConfigUpdated(\\n address indexed operator, IPyth indexed pyth, uint256 maxAcceptableAge, bytes32 indexed pythIdForRONUSD\\n );\\n\\n /**\\n * @dev Returns the Pyth oracle config.\\n */\\n function getPythOracleConfig() external view returns (IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD);\\n\\n /**\\n * @dev Sets the Pyth oracle config.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {PythOracleConfigUpdated}.\\n */\\n function setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) external;\\n\\n /**\\n * @dev Returns the percentage to scale from domain price each period.\\n */\\n function getScaleDownRuleForDomainPrice() external view returns (PeriodScaler memory dpScaleRule);\\n\\n /**\\n * @dev Sets the percentage to scale from domain price each period.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {DomainPriceScaleRuleUpdated}.\\n *\\n * @notice Applies for the business rule: -x% each y seconds.\\n */\\n function setScaleDownRuleForDomainPrice(PeriodScaler calldata scaleRule) external;\\n\\n /**\\n * @dev Returns the renewal fee by lengths.\\n */\\n function getRenewalFeeByLengths() external view returns (RenewalFee[] memory renewalFees);\\n\\n /**\\n * @dev Sets the renewal fee by lengths\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {RenewalFeeByLengthUpdated}.\\n * Emits an event {MaxRenewalFeeLengthUpdated} optionally.\\n */\\n function setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) external;\\n\\n /**\\n * @dev Returns tax ratio.\\n */\\n function getTaxRatio() external view returns (uint256 taxRatio);\\n\\n /**\\n * @dev Sets renewal reservation ratio.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits an event {TaxRatioUpdated}.\\n */\\n function setTaxRatio(uint256 ratio) external;\\n\\n /**\\n * @dev Return the domain price.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n */\\n function getDomainPrice(string memory label) external view returns (uint256 usdPrice, uint256 ronPrice);\\n\\n /**\\n * @dev Returns the renewal fee in USD and RON.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n * @param duration Amount of second(s).\\n */\\n function getRenewalFee(string calldata label, uint256 duration)\\n external\\n view\\n returns (UnitPrice memory basePrice, UnitPrice memory tax);\\n\\n /**\\n * @dev Returns the renewal fee of a label. Reverts if not overridden.\\n * @notice This method is to help developers check the domain renewal fee overriding. Consider using method\\n * {getRenewalFee} instead for full handling of renewal fees.\\n */\\n function getOverriddenRenewalFee(string memory label) external view returns (uint256 usdFee);\\n\\n /**\\n * @dev Bulk override renewal fees.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {RenewalFeeOverridingUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param usdPrices Array of prices in USD. Leave 2^256 - 1 to remove overriding.\\n */\\n function bulkOverrideRenewalFees(bytes32[] calldata lbHashes, uint256[] calldata usdPrices) external;\\n\\n /**\\n * @dev Bulk try to set domain prices. Returns a boolean array indicating whether domain prices at the corresponding\\n * indexes if set or not.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n * - The price should be larger than current domain price or it will not be updated.\\n *\\n * Emits events {DomainPriceUpdated} optionally.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkTrySetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external returns (bool[] memory updated);\\n\\n /**\\n * @dev Bulk override domain prices.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {DomainPriceUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkSetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external;\\n\\n /**\\n * @dev Returns the converted amount from USD to RON.\\n */\\n function convertUSDToRON(uint256 usdAmount) external view returns (uint256 ronAmount);\\n\\n /**\\n * @dev Returns the converted amount from RON to USD.\\n */\\n function convertRONToUSD(uint256 ronAmount) external view returns (uint256 usdAmount);\\n\\n /**\\n * @dev Value equals to keccak256(\\\"OPERATOR_ROLE\\\").\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the overrider role.\\n */\\n function OVERRIDER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\\n */\\n function MAX_PERCENTAGE() external pure returns (uint64);\\n\\n /**\\n * @dev Decimal for USD.\\n */\\n function USD_DECIMALS() external pure returns (uint8);\\n}\\n\",\"keccak256\":\"0xcb57a6120bbe131d1c2a2ae72ce6a33ab95f5da4cae85e9cd1731496e26db7b1\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0xaef1c58bb7c8688d6677a1c2739c0dc9e645ca5c64dd875be2f2b7a318a11406\",\"license\":\"MIT\"},\"src/libraries/LibEventRange.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct EventRange {\\n uint256 startedAt;\\n uint256 endedAt;\\n}\\n\\nlibrary LibEventRange {\\n /**\\n * @dev Checks whether the event range is valid.\\n */\\n function valid(EventRange calldata range) internal pure returns (bool) {\\n return range.startedAt <= range.endedAt;\\n }\\n\\n /**\\n * @dev Returns whether the current range is not yet started.\\n */\\n function isNotYetStarted(EventRange memory range) internal view returns (bool) {\\n return block.timestamp < range.startedAt;\\n }\\n\\n /**\\n * @dev Returns whether the current range is ended or not.\\n */\\n function isEnded(EventRange memory range) internal view returns (bool) {\\n return range.endedAt <= block.timestamp;\\n }\\n\\n /**\\n * @dev Returns whether the current block is in period.\\n */\\n function isInPeriod(EventRange memory range) internal view returns (bool) {\\n return range.startedAt <= block.timestamp && block.timestamp < range.endedAt;\\n }\\n}\\n\",\"keccak256\":\"0x95bf015c4245919cbcbcd810dd597fdb23eb4e58b62df8ef74b1c8c60a969bea\",\"license\":\"MIT\"},\"src/libraries/LibRNSDomain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nlibrary LibRNSDomain {\\n /// @dev Value equals to namehash('ron')\\n uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688;\\n /// @dev Value equals to namehash('addr.reverse')\\n uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n /**\\n * @dev Calculate the corresponding id given parentId and label.\\n */\\n function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, parentId)\\n mstore(0x20, keccak256(add(label, 32), mload(label)))\\n id := keccak256(0x0, 64)\\n }\\n }\\n\\n /**\\n * @dev Calculates the hash of the label.\\n */\\n function hashLabel(string memory label) internal pure returns (bytes32 hashed) {\\n assembly (\\\"memory-safe\\\") {\\n hashed := keccak256(add(label, 32), mload(label))\\n }\\n }\\n\\n /**\\n * @dev Calculate the RNS namehash of a str.\\n */\\n function namehash(string memory str) internal pure returns (bytes32 hashed) {\\n // notice: this method is case-sensitive, ensure the string is lowercased before calling this method\\n assembly (\\\"memory-safe\\\") {\\n // load str length\\n let len := mload(str)\\n // returns bytes32(0x0) if length is zero\\n if iszero(iszero(len)) {\\n let hashedLen\\n // compute pointer to str[0]\\n let head := add(str, 32)\\n // compute pointer to str[length - 1]\\n let tail := add(head, sub(len, 1))\\n // cleanup dirty bytes if contains any\\n mstore(0x0, 0)\\n // loop backwards from `tail` to `head`\\n for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } {\\n // check if `i` is `head`\\n let isHead := eq(i, head)\\n // check if `str[i-1]` is \\\".\\\"\\n // `0x2e` == bytes1(\\\".\\\")\\n let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e)\\n if or(isHead, isDotNext) {\\n // size = distance(length, i) - hashedLength + 1\\n let size := add(sub(sub(tail, i), hashedLen), 1)\\n mstore(0x20, keccak256(i, size))\\n mstore(0x0, keccak256(0x0, 64))\\n // skip \\\".\\\" thereby + 1\\n hashedLen := add(hashedLen, add(size, 1))\\n }\\n }\\n }\\n hashed := mload(0x0)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x715029b2b420c6ec00bc1f939b837acf45d247fde8426089575b0e7b5e84518b\",\"license\":\"MIT\"},\"src/libraries/LibString.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nlibrary LibString {\\n error InvalidStringLength();\\n error InvalidCharacter(bytes1 char);\\n\\n /// @dev Lookup constant for method. See more detail at https://eips.ethereum.org/EIPS/eip-181\\n bytes32 private constant LOOKUP = 0x3031323334353637383961626364656600000000000000000000000000000000;\\n\\n /**\\n * @dev Returns the length of a given string\\n *\\n * @param s The string to measure the length of\\n * @return The length of the input string\\n */\\n function strlen(string memory s) internal pure returns (uint256) {\\n unchecked {\\n uint256 i;\\n uint256 len;\\n uint256 bytelength = bytes(s).length;\\n for (len; i < bytelength; len++) {\\n bytes1 b = bytes(s)[i];\\n if (b < 0x80) {\\n i += 1;\\n } else if (b < 0xE0) {\\n i += 2;\\n } else if (b < 0xF0) {\\n i += 3;\\n } else if (b < 0xF8) {\\n i += 4;\\n } else if (b < 0xFC) {\\n i += 5;\\n } else {\\n i += 6;\\n }\\n }\\n return len;\\n }\\n }\\n\\n /**\\n * @dev Converts an address to string.\\n */\\n function toString(address addr) internal pure returns (string memory stringifiedAddr) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(stringifiedAddr, 40)\\n let ptr := add(stringifiedAddr, 0x20)\\n for { let i := 40 } gt(i, 0) { } {\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n }\\n }\\n }\\n\\n /**\\n * @dev Converts string to address.\\n * Reverts if the string length is not equal to 40.\\n */\\n function parseAddr(string memory stringifiedAddr) internal pure returns (address) {\\n unchecked {\\n if (bytes(stringifiedAddr).length != 40) revert InvalidStringLength();\\n uint160 addr;\\n for (uint256 i = 0; i < 40; i += 2) {\\n addr *= 0x100;\\n addr += uint160(hexCharToDec(bytes(stringifiedAddr)[i])) * 0x10;\\n addr += hexCharToDec(bytes(stringifiedAddr)[i + 1]);\\n }\\n return address(addr);\\n }\\n }\\n\\n /**\\n * @dev Converts a hex char (0-9, a-f, A-F) to decimal number.\\n * Reverts if the char is invalid.\\n */\\n function hexCharToDec(bytes1 c) private pure returns (uint8 r) {\\n unchecked {\\n if ((bytes1(\\\"a\\\") <= c) && (c <= bytes1(\\\"f\\\"))) r = uint8(c) - 87;\\n else if ((bytes1(\\\"A\\\") <= c) && (c <= bytes1(\\\"F\\\"))) r = uint8(c) - 55;\\n else if ((bytes1(\\\"0\\\") <= c) && (c <= bytes1(\\\"9\\\"))) r = uint8(c) - 48;\\n else revert InvalidCharacter(c);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d456b294f0e44ccaabded43a3d96db6270761a167535155a762fe41e968b905\",\"license\":\"MIT\"},\"src/libraries/TimestampWrapperUtils.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct TimestampWrapper {\\n uint256 value;\\n uint256 timestamp;\\n}\\n\",\"keccak256\":\"0x18488d153ebc8579907a85cb7e0be828d0de7c571c9f3368a6d200574b012018\",\"license\":\"MIT\"},\"src/libraries/math/LibSafeRange.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nlibrary LibSafeRange {\\n function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n unchecked {\\n c = a + b;\\n if (c < a) return type(uint256).max;\\n }\\n }\\n\\n /**\\n * @dev Returns value of a + b; in case result is larger than upperbound, upperbound is returned.\\n */\\n function addWithUpperbound(uint256 a, uint256 b, uint256 ceil) internal pure returns (uint256 c) {\\n if (a > ceil || b > ceil) return ceil;\\n c = add(a, b);\\n if (c > ceil) return ceil;\\n }\\n}\\n\",\"keccak256\":\"0x12cf5f592a2d80b9c1b0ea11b8fe2b3ed42fc6d62303ba667edc56464baa8810\",\"license\":\"MIT\"},\"src/libraries/math/PeriodScalingUtils.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\nimport { PowMath } from \\\"./PowMath.sol\\\";\\n\\nstruct PeriodScaler {\\n uint192 ratio;\\n uint64 period;\\n}\\n\\nlibrary LibPeriodScaler {\\n using PowMath for uint256;\\n\\n error PeriodNumOverflowedUint16(uint256 n);\\n\\n /// @dev The precision number of calculation is 2\\n uint256 public constant MAX_PERCENTAGE = 100_00;\\n\\n /**\\n * @dev Scales down the input value `v` for a percentage of `self.ratio` each period `self.period`.\\n * Reverts if the passed period is larger than 2^16 - 1.\\n *\\n * @param self The period scaler with specific period and ratio\\n * @param v The original value to scale based on the rule `self`\\n * @param maxR The maximum value of 100%. Eg, if the `self.ratio` in range of [0;100_00] reflexes 0-100%, this param\\n * must be 100_00\\n * @param dur The passed duration in the same uint with `self.period`\\n */\\n function scaleDown(PeriodScaler memory self, uint256 v, uint64 maxR, uint256 dur) internal pure returns (uint256 rs) {\\n uint256 n = dur / uint256(self.period);\\n if (n == 0 || self.ratio == 0) return v;\\n if (maxR == self.ratio) return 0;\\n if (n > type(uint16).max) revert PeriodNumOverflowedUint16(n);\\n\\n unchecked {\\n // Normalizes the input ratios to be in range of [0;MAX_PERCENTAGE]\\n uint256 p = Math.mulDiv(maxR - self.ratio, MAX_PERCENTAGE, maxR);\\n return v.mulDiv({ y: p, d: MAX_PERCENTAGE, n: uint16(n) });\\n }\\n }\\n}\\n\",\"keccak256\":\"0x502d004fbd130a99f3f1e6685aebff9f47300565fbc5a65b4912824ea5eb5b78\",\"license\":\"MIT\"},\"src/libraries/math/PowMath.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nlibrary PowMath {\\n using Math for uint256;\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Negative exponent n for x*10^n.\\n */\\n function exp10(uint256 x, int32 n) internal pure returns (uint256) {\\n if (n < 0) {\\n return x / 10 ** uint32(-n);\\n } else if (n > 0) {\\n return x * 10 ** uint32(n);\\n } else {\\n return x;\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with full precision.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256 r) {\\n unchecked {\\n if (y == d || n == 0) return x;\\n r = x;\\n\\n bool ok;\\n uint256 r_;\\n uint16 nd_;\\n\\n {\\n uint16 ye = uint16(Math.min(n, findMaxExponent(y)));\\n while (ye > 0) {\\n (ok, r_) = r.tryMul(y ** ye);\\n if (ok) {\\n r = r_;\\n n -= ye;\\n nd_ += ye;\\n }\\n ye = uint16(Math.min(ye / 2, n));\\n }\\n }\\n\\n while (n > 0) {\\n (ok, r_) = r.tryMul(y);\\n if (ok) {\\n r = r_;\\n n--;\\n nd_++;\\n } else if (nd_ > 0) {\\n r /= d;\\n nd_--;\\n } else {\\n r = r.mulDiv(y, d);\\n n--;\\n }\\n }\\n\\n uint16 de = findMaxExponent(d);\\n while (nd_ > 0) {\\n uint16 e = uint16(Math.min(de, nd_));\\n r /= d ** e;\\n nd_ -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with low precision.\\n */\\n function mulDivLowPrecision(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256) {\\n return uncheckedMulDiv(x, y, d, n, findMaxExponent(Math.max(y, d)));\\n }\\n\\n /**\\n * @dev Aggregated calculate multiplications.\\n * ```\\n * r = x*(y/d)^k\\n * = \\\\prod(x*(y/d)^{k_i}) \\\\ where \\\\ sum(k_i) = k\\n * ```\\n */\\n function uncheckedMulDiv(uint256 x, uint256 y, uint256 d, uint16 n, uint16 maxE) internal pure returns (uint256 r) {\\n unchecked {\\n r = x;\\n uint16 e;\\n while (n > 0) {\\n e = uint16(Math.min(n, maxE));\\n r = r.mulDiv(y ** e, d ** e);\\n n -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Returns the largest exponent `k` where, x^k <= 2^256-1\\n * Note: n = Surd[2^256-1,k]\\n * = 10^( log2(2^256-1) / k * log10(2) )\\n */\\n function findMaxExponent(uint256 x) internal pure returns (uint16 k) {\\n if (x < 3) k = 255;\\n else if (x < 4) k = 128;\\n else if (x < 16) k = 64;\\n else if (x < 256) k = 32;\\n else if (x < 7132) k = 20;\\n else if (x < 11376) k = 19;\\n else if (x < 19113) k = 18;\\n else if (x < 34132) k = 17;\\n else if (x < 65536) k = 16;\\n else if (x < 137271) k = 15;\\n else if (x < 319558) k = 14;\\n else if (x < 847180) k = 13;\\n else if (x < 2642246) k = 12;\\n else if (x < 10134189) k = 11;\\n else if (x < 50859009) k = 10;\\n else if (x < 365284285) k = 9;\\n else if (x < 4294967296) k = 8;\\n else if (x < 102116749983) k = 7;\\n else if (x < 6981463658332) k = 6;\\n else if (x < 2586638741762875) k = 5;\\n else if (x < 18446744073709551616) k = 4;\\n else if (x < 48740834812604276470692695) k = 3;\\n else if (x < 340282366920938463463374607431768211456) k = 2;\\n else k = 1;\\n }\\n}\\n\",\"keccak256\":\"0x29f943cf7c61149bc9a624244901720fc3a349adb418555db1db2a045fcdfb70\",\"license\":\"MIT\"},\"src/libraries/pyth/PythConverter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\nimport { PythStructs } from \\\"@pythnetwork/PythStructs.sol\\\";\\nimport { PowMath } from \\\"../math/PowMath.sol\\\";\\n\\nlibrary PythConverter {\\n error ErrExponentTooLarge(int32 expo);\\n error ErrComputedPriceTooLarge(int32 expo1, int32 expo2, int64 price1);\\n\\n /**\\n * @dev Multiples and converts the price into token wei with decimals `outDecimals`.\\n */\\n function mul(PythStructs.Price memory self, uint256 inpWei, int32 inpDecimals, int32 outDecimals)\\n internal\\n pure\\n returns (uint256 outWei)\\n {\\n return Math.mulDiv(\\n inpWei, PowMath.exp10(uint256(int256(self.price)), outDecimals + self.expo), PowMath.exp10(1, inpDecimals)\\n );\\n }\\n\\n /**\\n * @dev Inverses token price of tokenA/tokenB to tokenB/tokenA.\\n */\\n function inverse(PythStructs.Price memory self, int32 expo) internal pure returns (PythStructs.Price memory outPrice) {\\n uint256 exp10p1 = PowMath.exp10(1, -self.expo);\\n if (exp10p1 > uint256(type(int256).max)) revert ErrExponentTooLarge(self.expo);\\n uint256 exp10p2 = PowMath.exp10(1, -expo);\\n if (exp10p2 > uint256(type(int256).max)) revert ErrExponentTooLarge(expo);\\n int256 price = (int256(exp10p1) * int256(exp10p2)) / self.price;\\n if (price > type(int64).max) revert ErrComputedPriceTooLarge(self.expo, expo, self.price);\\n\\n return PythStructs.Price({ price: int64(price), conf: self.conf, expo: expo, publishTime: self.publishTime });\\n }\\n}\\n\",\"keccak256\":\"0x87ade16f6e931f6a3ead7706b0e550ee2c2cdee0be2f218488df93588e787f06\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { xor as ^ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction xor(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) ^ ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0x2e42fbba358c470ff6b57268367d248f0e2fcf8d7142d762688f7aef5efae7ee\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182602, + "numDeployments": 3, + "storageLayout": { + "storage": [ + { + "astId": 50078, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 50081, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 48551, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_roles", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_struct(RoleData)48546_storage)" + }, + { + "astId": 48861, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_roleMembers", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)54430_storage)" + }, + { + "astId": 60217, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "____gap", + "offset": 0, + "slot": "3", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 60221, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_pyth", + "offset": 0, + "slot": "53", + "type": "t_contract(IPyth)54836" + }, + { + "astId": 60225, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_auction", + "offset": 0, + "slot": "54", + "type": "t_contract(INSAuction)64912" + }, + { + "astId": 60228, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_taxRatio", + "offset": 0, + "slot": "55", + "type": "t_uint256" + }, + { + "astId": 60231, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_rnfMaxLength", + "offset": 0, + "slot": "56", + "type": "t_uint256" + }, + { + "astId": 60234, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_maxAcceptableAge", + "offset": 0, + "slot": "57", + "type": "t_uint256" + }, + { + "astId": 60237, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_pythIdForRONUSD", + "offset": 0, + "slot": "58", + "type": "t_bytes32" + }, + { + "astId": 60241, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_dpDownScaler", + "offset": 0, + "slot": "59", + "type": "t_struct(PeriodScaler)67177_storage" + }, + { + "astId": 60246, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_rnFee", + "offset": 0, + "slot": "60", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 60252, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_dp", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_bytes32,t_struct(TimestampWrapper)67100_storage)" + }, + { + "astId": 60257, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_rnFeeOverriding", + "offset": 0, + "slot": "62", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(INSAuction)64912": { + "encoding": "inplace", + "label": "contract INSAuction", + "numberOfBytes": "20" + }, + "t_contract(IPyth)54836": { + "encoding": "inplace", + "label": "contract IPyth", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)54430_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct EnumerableSet.AddressSet)", + "numberOfBytes": "32", + "value": "t_struct(AddressSet)54430_storage" + }, + "t_mapping(t_bytes32,t_struct(RoleData)48546_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct AccessControl.RoleData)", + "numberOfBytes": "32", + "value": "t_struct(RoleData)48546_storage" + }, + "t_mapping(t_bytes32,t_struct(TimestampWrapper)67100_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct TimestampWrapper)", + "numberOfBytes": "32", + "value": "t_struct(TimestampWrapper)67100_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_struct(AddressSet)54430_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.AddressSet", + "numberOfBytes": "64", + "members": [ + { + "astId": 54429, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_inner", + "offset": 0, + "slot": "0", + "type": "t_struct(Set)54115_storage" + } + ] + }, + "t_struct(PeriodScaler)67177_storage": { + "encoding": "inplace", + "label": "struct PeriodScaler", + "numberOfBytes": "32", + "members": [ + { + "astId": 67174, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "ratio", + "offset": 0, + "slot": "0", + "type": "t_uint192" + }, + { + "astId": 67176, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "period", + "offset": 24, + "slot": "0", + "type": "t_uint64" + } + ] + }, + "t_struct(RoleData)48546_storage": { + "encoding": "inplace", + "label": "struct AccessControl.RoleData", + "numberOfBytes": "64", + "members": [ + { + "astId": 48543, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "members", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 48545, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "adminRole", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ] + }, + "t_struct(Set)54115_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.Set", + "numberOfBytes": "64", + "members": [ + { + "astId": 54110, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_values", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "astId": 54114, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "_indexes", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_struct(TimestampWrapper)67100_storage": { + "encoding": "inplace", + "label": "struct TimestampWrapper", + "numberOfBytes": "64", + "members": [ + { + "astId": 67097, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "value", + "offset": 0, + "slot": "0", + "type": "t_uint256" + }, + { + "astId": 67099, + "contract": "src/RNSDomainPrice.sol:RNSDomainPrice", + "label": "timestamp", + "offset": 0, + "slot": "1", + "type": "t_uint256" + } + ] + }, + "t_uint192": { + "encoding": "inplace", + "label": "uint192", + "numberOfBytes": "24" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "timestamp": 1698139032, + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "getOverriddenRenewalFee(string)": { + "notice": "This method is to help developers check the domain renewal fee overriding. Consider using method {getRenewalFee} instead for full handling of renewal fees." + }, + "setScaleDownRuleForDomainPrice((uint192,uint64))": { + "notice": "Applies for the business rule: -x% each y seconds." + } + } + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RNSDomainPriceProxy.json b/deployments/ronin-testnet/RNSDomainPriceProxy.json new file mode 100644 index 00000000..896be479 --- /dev/null +++ b/deployments/ronin-testnet/RNSDomainPriceProxy.json @@ -0,0 +1,120 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "address": "0x51cAF51678f469e9DD4c878a7b0ceBEbbd4A4AB5", + "args": "0xd40ed58c000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000076a700000000000000000000000000a2aa501b19aff244d90cc15a4cf739d2725b5729000000000000000000000000b962edded164f55d136e491a3022246815e1b5a800000000000000000000000000000000000000000000000000000000000151804cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c20000000000000000000000000000000000000000000000000000000000000001000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000024ea4122ae0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000002e24d16b5a80000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000008a6e74420f9", + "blockNumber": 21224275, + "bytecode": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "chainId": 2021, + "contractName": "TransparentUpgradeableProxy", + "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.", + "methods": { + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + } + }, + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is changed." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Emitted when the beacon is changed.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\\n * does not implement this interface directly, and some of its functions are implemented by an internal dispatch\\n * mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\\n * include them in the ABI so this interface must be used to interact with it.\\n */\\ninterface ITransparentUpgradeableProxy is IERC1967 {\\n function admin() external view returns (address);\\n\\n function implementation() external view returns (address);\\n\\n function changeAdmin(address) external;\\n\\n function upgradeTo(address) external;\\n\\n function upgradeToAndCall(address, bytes memory) external payable;\\n}\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n *\\n * NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\\n * inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch\\n * mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\\n * fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\\n * implementation.\\n *\\n * WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler\\n * will not check that there are no selector conflicts, due to the note above. A selector clash between any new function\\n * and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could\\n * render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n *\\n * CAUTION: This modifier is deprecated, as it could cause issues if the modified function has arguments, and the\\n * implementation provides a function with the same selector.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior\\n */\\n function _fallback() internal virtual override {\\n if (msg.sender == _getAdmin()) {\\n bytes memory ret;\\n bytes4 selector = msg.sig;\\n if (selector == ITransparentUpgradeableProxy.upgradeTo.selector) {\\n ret = _dispatchUpgradeTo();\\n } else if (selector == ITransparentUpgradeableProxy.upgradeToAndCall.selector) {\\n ret = _dispatchUpgradeToAndCall();\\n } else if (selector == ITransparentUpgradeableProxy.changeAdmin.selector) {\\n ret = _dispatchChangeAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.admin.selector) {\\n ret = _dispatchAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.implementation.selector) {\\n ret = _dispatchImplementation();\\n } else {\\n revert(\\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n }\\n assembly {\\n return(add(ret, 0x20), mload(ret))\\n }\\n } else {\\n super._fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function _dispatchAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address admin = _getAdmin();\\n return abi.encode(admin);\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function _dispatchImplementation() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address implementation = _implementation();\\n return abi.encode(implementation);\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _dispatchChangeAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newAdmin = abi.decode(msg.data[4:], (address));\\n _changeAdmin(newAdmin);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n */\\n function _dispatchUpgradeTo() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newImplementation = abi.decode(msg.data[4:], (address));\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n */\\n function _dispatchUpgradeToAndCall() private returns (bytes memory) {\\n (address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));\\n _upgradeToAndCall(newImplementation, data, true);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * CAUTION: This function is deprecated. Use {ERC1967Upgrade-_getAdmin} instead.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev To keep this contract fully transparent, all `ifAdmin` functions must be payable. This helper is here to\\n * emulate some proxy functions being non-payable while still allowing value to pass through.\\n */\\n function _requireZeroValue() private {\\n require(msg.value == 0);\\n }\\n}\\n\",\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n struct StringSlot {\\n string value;\\n }\\n\\n struct BytesSlot {\\n bytes value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n */\\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n */\\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n */\\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n */\\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182502, + "numDeployments": 1, + "storageLayout": { + "storage": [], + "types": {} + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RNSReverseRegistrarLogic.json b/deployments/ronin-testnet/RNSReverseRegistrarLogic.json new file mode 100644 index 00000000..272f408c --- /dev/null +++ b/deployments/ronin-testnet/RNSReverseRegistrarLogic.json @@ -0,0 +1,567 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes1", + "name": "char", + "type": "bytes1" + } + ], + "name": "InvalidCharacter", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidConfig", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidId", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidStringLength", + "type": "error" + }, + { + "inputs": [], + "name": "NullAssignment", + "type": "error" + }, + { + "inputs": [], + "name": "Unauthorized", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "contract INameResolver", + "name": "resolver", + "type": "address" + } + ], + "name": "DefaultResolverChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "ReverseClaimed", + "type": "event" + }, + { + "inputs": [], + "name": "CONTROLLER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "claim", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "address", + "name": "resolver", + "type": "address" + } + ], + "name": "claimWithResolver", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "computeId", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDefaultResolver", + "outputs": [ + { + "internalType": "contract INameResolver", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRNSUnified", + "outputs": [ + { + "internalType": "contract INSUnified", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "contract INSUnified", + "name": "rnsUnified", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract INameResolver", + "name": "resolver", + "type": "address" + } + ], + "name": "setDefaultResolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "setName", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "setNameForAddr", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "address": "0x49E2f4aA6Edd7453a4D9C91CC8FB02fcbA68d7eA", + "args": "0x", + "blockNumber": 21224275, + "bytecode": "0x608060405261000d3361001a565b610015610075565b610134565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b600054610100900460ff16156100e15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614610132576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6113db806101436000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638c84331411610097578063c66485b211610066578063c66485b21461020d578063c911994114610220578063d472ad0414610233578063f2fde38b1461024657600080fd5b80638c843314146101bf5780638da5cb5b146101d0578063b93f9b0a146101e7578063c47f0027146101fa57600080fd5b80631e83409a116100d35780631e83409a1461016a5780633efa047f1461017d578063485cc955146101a2578063715018a6146101b757600080fd5b806301ffc9a7146100fa578063092c5b3b146101225780630f5a546614610157575b600080fd5b61010d610108366004610e5b565b610259565b60405190151581526020015b60405180910390f35b6101497f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335781565b604051908152602001610119565b610149610165366004610e9a565b6102ab565b610149610178366004610ed3565b6102d1565b6034546001600160a01b03165b6040516001600160a01b039091168152602001610119565b6101b56101b0366004610e9a565b6102eb565b005b6101b561041f565b6033546001600160a01b031661018a565b6000546201000090046001600160a01b031661018a565b61018a6101f5366004610ef0565b610433565b610149610208366004610f52565b6104f5565b6101b561021b366004610ed3565b610502565b61014961022e366004610f94565b61057b565b610149610241366004610ed3565b61073a565b6101b5610254366004610ed3565b610776565b60006001600160e01b0319821663d96a46ad60e01b148061028a57506001600160e01b031982166301ffc9a760e01b145b806102a557506001600160e01b0319821663d5a614db60e01b145b92915050565b60006102b56107ef565b826102bf8161098e565b6102c98484610acd565b949350505050565b6034546000906102a59083906001600160a01b03166102ab565b600054610100900460ff161580801561030b5750600054600160ff909116105b806103255750303b158015610325575060005460ff166001145b61038d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156103b0576000805461ff0019166101001790555b603380546001600160a01b0319166001600160a01b0384161790556103d483610bb4565b801561041a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610427610c0f565b6104316000610bb4565b565b6033546040516303e9e60960e01b81526004810183905260009182916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610481573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104a9919081019061114e565b805160200151909150600080516020611386833981519152146104df57604051631bf4348160e31b815260040160405180910390fd5b8051604001516104ee90610c70565b9392505050565b60006104ee33848461057b565b61050a610c0f565b6001600160a01b038116610531576040516362daafb160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf90600090a250565b60006105856107ef565b8361058f8161098e565b6105988561073a565b6033546040516331a9108f60e11b8152600481018390529193506001600160a01b03169030908290636352211e90602401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611271565b6001600160a01b031614610656576034546000906106329088906001600160a01b0316610acd565b905083811461065457604051631bf4348160e31b815260040160405180910390fd5b505b6040516303e9e60960e01b8152600481018490526000906001600160a01b038316906303e9e60990602401600060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c6919081019061114e565b602081015151604051637737221360e01b81529192506001600160a01b0316906377372213906106fe9087908a908a9060040161128e565b600060405180830381600087803b15801561071857600080fd5b505af115801561072c573d6000803e3d6000fd5b505050505050509392505050565b60006102a5600080516020611386833981519152610760846001600160a01b0316610d0a565b6000918252805160209182012090526040902090565b61077e610c0f565b6001600160a01b0381166107e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610384565b6107ec81610bb4565b50565b6033546040516331a9108f60e11b8152600080516020611386833981519152600482018190526001600160a01b0390921691906000908390636352211e90602401602060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190611271565b90506001600160a01b0381163014806108fb575060405163020604bf60e21b81526004810183905230906001600160a01b0385169063081812fc90602401602060405180830381865afa1580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f09190611271565b6001600160a01b0316145b80610971575060405163e985e9c560e01b81526001600160a01b03828116600483015230602483015284169063e985e9c590604401602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906112c4565b61041a576040516306b7c75960e31b815260040160405180910390fd5b60335433906001600160a01b03908116908316821480610a395750604051632474521560e21b81527f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335760048201526001600160a01b0383811660248301528216906391d1485490604401602060405180830381865afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3991906112c4565b80610ab1575060405163e985e9c560e01b81526001600160a01b038481166004830152838116602483015282169063e985e9c590604401602060405180830381865afa158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab191906112c4565b61041a576040516282b42960e81b815260040160405180910390fd5b600080610ae2846001600160a01b0316610d0a565b603354604051630570891f60e01b81529192506001600160a01b031690630570891f90610b31906000805160206113868339815191529085908890309067ffffffffffffffff906004016112df565b60408051808303816000875af1158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190611343565b6040519093508391506001600160a01b038616907f53591c13f73c953042ec59cc15c968c03041980e380816e0b08dfcead86c89ac90600090a35092915050565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6000546001600160a01b03620100009091041633146104315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b60008151602814610c9457604051638dc6ac0160e01b815260040160405180910390fd5b6000805b6028811015610d035761010082029150610cd1848281518110610cbd57610cbd61136f565b01602001516001600160f81b031916610d7b565b60ff1660100282019150610cf3848260010181518110610cbd57610cbd61136f565b60ff169190910190600201610c98565b5092915050565b6060602881526020810160285b8015610d74576001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a828201536010840493506001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a82820153601084049350610d17565b5050919050565b60006001600160f81b03198216606160f81b11801590610da95750603360f91b6001600160f81b0319831611155b15610db9575060f81c6056190190565b6001600160f81b03198216604160f81b11801590610de55750602360f91b6001600160f81b0319831611155b15610df5575060f81c6036190190565b6001600160f81b03198216600360fc1b11801590610e215750603960f81b6001600160f81b0319831611155b15610e31575060f81c602f190190565b604051633fd7c86760e01b81526001600160f81b031983166004820152602401610384565b919050565b600060208284031215610e6d57600080fd5b81356001600160e01b0319811681146104ee57600080fd5b6001600160a01b03811681146107ec57600080fd5b60008060408385031215610ead57600080fd5b8235610eb881610e85565b91506020830135610ec881610e85565b809150509250929050565b600060208284031215610ee557600080fd5b81356104ee81610e85565b600060208284031215610f0257600080fd5b5035919050565b60008083601f840112610f1b57600080fd5b50813567ffffffffffffffff811115610f3357600080fd5b602083019150836020828501011115610f4b57600080fd5b9250929050565b60008060208385031215610f6557600080fd5b823567ffffffffffffffff811115610f7c57600080fd5b610f8885828601610f09565b90969095509350505050565b600080600060408486031215610fa957600080fd5b8335610fb481610e85565b9250602084013567ffffffffffffffff811115610fd057600080fd5b610fdc86828701610f09565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561102257611022610fe9565b60405290565b6040516060810167ffffffffffffffff8111828210171561102257611022610fe9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561107457611074610fe9565b604052919050565b60005b8381101561109757818101518382015260200161107f565b50506000910152565b805167ffffffffffffffff81168114610e5657600080fd5b80518015158114610e5657600080fd5b6000608082840312156110da57600080fd5b6040516080810181811067ffffffffffffffff821117156110fd576110fd610fe9565b8060405250809150825161111081610e85565b8152602083015161112081610e85565b6020820152611131604084016110a0565b6040820152611142606084016110b8565b60608201525092915050565b6000602080838503121561116157600080fd5b825167ffffffffffffffff8082111561117957600080fd5b9084019060a0828703121561118d57600080fd5b611195610fff565b8251828111156111a457600080fd5b8301606081890312156111b657600080fd5b6111be611028565b815160ff811681146111cf57600080fd5b815281860151868201526040820151848111156111eb57600080fd5b80830192505088601f83011261120057600080fd5b81518481111561121257611212610fe9565b611224601f8201601f1916880161104b565b9450808552898782850101111561123a57600080fd5b6112498188870189860161107c565b5060408101849052825250611260878486016110c8565b848201528094505050505092915050565b60006020828403121561128357600080fd5b81516104ee81610e85565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156112d657600080fd5b6104ee826110b8565b85815260a06020820152600085518060a08401526113048160c0850160208a0161107c565b6001600160a01b03958616604084015293909416606082015267ffffffffffffffff91909116608082015260c0601f909201601f191601019392505050565b6000806040838503121561135657600080fd5b61135f836110a0565b9150602083015190509250929050565b634e487b7160e01b600052603260045260246000fdfe91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2a264697066735822122049d04f0a54497bd86795b9d36ef715d010bd0683d9b3512d8cfc1fae5778484f64736f6c63430008150033", + "chainId": 2021, + "contractName": "RNSReverseRegistrar", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638c84331411610097578063c66485b211610066578063c66485b21461020d578063c911994114610220578063d472ad0414610233578063f2fde38b1461024657600080fd5b80638c843314146101bf5780638da5cb5b146101d0578063b93f9b0a146101e7578063c47f0027146101fa57600080fd5b80631e83409a116100d35780631e83409a1461016a5780633efa047f1461017d578063485cc955146101a2578063715018a6146101b757600080fd5b806301ffc9a7146100fa578063092c5b3b146101225780630f5a546614610157575b600080fd5b61010d610108366004610e5b565b610259565b60405190151581526020015b60405180910390f35b6101497f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335781565b604051908152602001610119565b610149610165366004610e9a565b6102ab565b610149610178366004610ed3565b6102d1565b6034546001600160a01b03165b6040516001600160a01b039091168152602001610119565b6101b56101b0366004610e9a565b6102eb565b005b6101b561041f565b6033546001600160a01b031661018a565b6000546201000090046001600160a01b031661018a565b61018a6101f5366004610ef0565b610433565b610149610208366004610f52565b6104f5565b6101b561021b366004610ed3565b610502565b61014961022e366004610f94565b61057b565b610149610241366004610ed3565b61073a565b6101b5610254366004610ed3565b610776565b60006001600160e01b0319821663d96a46ad60e01b148061028a57506001600160e01b031982166301ffc9a760e01b145b806102a557506001600160e01b0319821663d5a614db60e01b145b92915050565b60006102b56107ef565b826102bf8161098e565b6102c98484610acd565b949350505050565b6034546000906102a59083906001600160a01b03166102ab565b600054610100900460ff161580801561030b5750600054600160ff909116105b806103255750303b158015610325575060005460ff166001145b61038d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156103b0576000805461ff0019166101001790555b603380546001600160a01b0319166001600160a01b0384161790556103d483610bb4565b801561041a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610427610c0f565b6104316000610bb4565b565b6033546040516303e9e60960e01b81526004810183905260009182916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610481573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104a9919081019061114e565b805160200151909150600080516020611386833981519152146104df57604051631bf4348160e31b815260040160405180910390fd5b8051604001516104ee90610c70565b9392505050565b60006104ee33848461057b565b61050a610c0f565b6001600160a01b038116610531576040516362daafb160e11b815260040160405180910390fd5b603480546001600160a01b0319166001600160a01b0383169081179091556040517feae17a84d9eb83d8c8eb317f9e7d64857bc363fa51674d996c023f4340c577cf90600090a250565b60006105856107ef565b8361058f8161098e565b6105988561073a565b6033546040516331a9108f60e11b8152600481018390529193506001600160a01b03169030908290636352211e90602401602060405180830381865afa1580156105e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060a9190611271565b6001600160a01b031614610656576034546000906106329088906001600160a01b0316610acd565b905083811461065457604051631bf4348160e31b815260040160405180910390fd5b505b6040516303e9e60960e01b8152600481018490526000906001600160a01b038316906303e9e60990602401600060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c6919081019061114e565b602081015151604051637737221360e01b81529192506001600160a01b0316906377372213906106fe9087908a908a9060040161128e565b600060405180830381600087803b15801561071857600080fd5b505af115801561072c573d6000803e3d6000fd5b505050505050509392505050565b60006102a5600080516020611386833981519152610760846001600160a01b0316610d0a565b6000918252805160209182012090526040902090565b61077e610c0f565b6001600160a01b0381166107e35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610384565b6107ec81610bb4565b50565b6033546040516331a9108f60e11b8152600080516020611386833981519152600482018190526001600160a01b0390921691906000908390636352211e90602401602060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190611271565b90506001600160a01b0381163014806108fb575060405163020604bf60e21b81526004810183905230906001600160a01b0385169063081812fc90602401602060405180830381865afa1580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f09190611271565b6001600160a01b0316145b80610971575060405163e985e9c560e01b81526001600160a01b03828116600483015230602483015284169063e985e9c590604401602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097191906112c4565b61041a576040516306b7c75960e31b815260040160405180910390fd5b60335433906001600160a01b03908116908316821480610a395750604051632474521560e21b81527f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335760048201526001600160a01b0383811660248301528216906391d1485490604401602060405180830381865afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3991906112c4565b80610ab1575060405163e985e9c560e01b81526001600160a01b038481166004830152838116602483015282169063e985e9c590604401602060405180830381865afa158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab191906112c4565b61041a576040516282b42960e81b815260040160405180910390fd5b600080610ae2846001600160a01b0316610d0a565b603354604051630570891f60e01b81529192506001600160a01b031690630570891f90610b31906000805160206113868339815191529085908890309067ffffffffffffffff906004016112df565b60408051808303816000875af1158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b739190611343565b6040519093508391506001600160a01b038616907f53591c13f73c953042ec59cc15c968c03041980e380816e0b08dfcead86c89ac90600090a35092915050565b600080546001600160a01b038381166201000081810262010000600160b01b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6000546001600160a01b03620100009091041633146104315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b60008151602814610c9457604051638dc6ac0160e01b815260040160405180910390fd5b6000805b6028811015610d035761010082029150610cd1848281518110610cbd57610cbd61136f565b01602001516001600160f81b031916610d7b565b60ff1660100282019150610cf3848260010181518110610cbd57610cbd61136f565b60ff169190910190600201610c98565b5092915050565b6060602881526020810160285b8015610d74576001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a828201536010840493506001810390506f181899199a1a9b1b9c1cb0b131b232b360811b600f85161a82820153601084049350610d17565b5050919050565b60006001600160f81b03198216606160f81b11801590610da95750603360f91b6001600160f81b0319831611155b15610db9575060f81c6056190190565b6001600160f81b03198216604160f81b11801590610de55750602360f91b6001600160f81b0319831611155b15610df5575060f81c6036190190565b6001600160f81b03198216600360fc1b11801590610e215750603960f81b6001600160f81b0319831611155b15610e31575060f81c602f190190565b604051633fd7c86760e01b81526001600160f81b031983166004820152602401610384565b919050565b600060208284031215610e6d57600080fd5b81356001600160e01b0319811681146104ee57600080fd5b6001600160a01b03811681146107ec57600080fd5b60008060408385031215610ead57600080fd5b8235610eb881610e85565b91506020830135610ec881610e85565b809150509250929050565b600060208284031215610ee557600080fd5b81356104ee81610e85565b600060208284031215610f0257600080fd5b5035919050565b60008083601f840112610f1b57600080fd5b50813567ffffffffffffffff811115610f3357600080fd5b602083019150836020828501011115610f4b57600080fd5b9250929050565b60008060208385031215610f6557600080fd5b823567ffffffffffffffff811115610f7c57600080fd5b610f8885828601610f09565b90969095509350505050565b600080600060408486031215610fa957600080fd5b8335610fb481610e85565b9250602084013567ffffffffffffffff811115610fd057600080fd5b610fdc86828701610f09565b9497909650939450505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561102257611022610fe9565b60405290565b6040516060810167ffffffffffffffff8111828210171561102257611022610fe9565b604051601f8201601f1916810167ffffffffffffffff8111828210171561107457611074610fe9565b604052919050565b60005b8381101561109757818101518382015260200161107f565b50506000910152565b805167ffffffffffffffff81168114610e5657600080fd5b80518015158114610e5657600080fd5b6000608082840312156110da57600080fd5b6040516080810181811067ffffffffffffffff821117156110fd576110fd610fe9565b8060405250809150825161111081610e85565b8152602083015161112081610e85565b6020820152611131604084016110a0565b6040820152611142606084016110b8565b60608201525092915050565b6000602080838503121561116157600080fd5b825167ffffffffffffffff8082111561117957600080fd5b9084019060a0828703121561118d57600080fd5b611195610fff565b8251828111156111a457600080fd5b8301606081890312156111b657600080fd5b6111be611028565b815160ff811681146111cf57600080fd5b815281860151868201526040820151848111156111eb57600080fd5b80830192505088601f83011261120057600080fd5b81518481111561121257611212610fe9565b611224601f8201601f1916880161104b565b9450808552898782850101111561123a57600080fd5b6112498188870189860161107c565b5060408101849052825250611260878486016110c8565b848201528094505050505092915050565b60006020828403121561128357600080fd5b81516104ee81610e85565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156112d657600080fd5b6104ee826110b8565b85815260a06020820152600085518060a08401526113048160c0850160208a0161107c565b6001600160a01b03958616604084015293909416606082015267ffffffffffffffff91909116608082015260c0601f909201601f191601019392505050565b6000806040838503121561135657600080fd5b61135f836110a0565b9150602083015190509250929050565b634e487b7160e01b600052603260045260246000fdfe91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2a264697066735822122049d04f0a54497bd86795b9d36ef715d010bd0683d9b3512d8cfc1fae5778484f64736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "The reverse registrar provides functions to claim a reverse record, as well as a convenience function to configure the record as it's most commonly used, as a way of specifying a canonical name for an address. The reverse registrar is specified in EIP 181 https://eips.ethereum.org/EIPS/eip-181.", + "methods": { + "claim(address)": { + "details": "Claims the name hex(addr) + '.addr.reverse' for addr.", + "params": { + "addr": "The address to set as the addr of the reverse record in INS." + }, + "returns": { + "id": "The INS node hash of the reverse record." + } + }, + "claimWithResolver(address,address)": { + "details": "Claims the name hex(owner) + '.addr.reverse' for owner and sets resolver.", + "params": { + "addr": "The address to set as the owner of the reverse record in INS.", + "resolver": "The address of the resolver to set; 0 to leave unchanged." + }, + "returns": { + "id": "The INS node hash of the reverse record." + } + }, + "computeId(address)": { + "details": "Returns the id hash for a given account's reverse records.", + "params": { + "addr": "The address to hash" + }, + "returns": { + "id": "The INS node hash." + } + }, + "getAddress(uint256)": { + "details": "Returns address that the reverse node resolves for. Eg. node namehash('{addr}.addr.reverse') will always resolve for `addr`." + }, + "getDefaultResolver()": { + "details": "Returns default resolver." + }, + "getRNSUnified()": { + "details": "Returns RNSUnified contract." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." + }, + "setDefaultResolver(address)": { + "details": "Sets default resolver. Requirement: - The method caller must be admin. Emitted an event {DefaultResolverChanged}." + }, + "setName(string)": { + "details": "Sets the name record for the reverse INS record associated with the calling account. First updates the resolver to the default reverse resolver if necessary.", + "params": { + "name": "The name to set for this address." + }, + "returns": { + "id": "The INS node hash of the reverse record." + } + }, + "setNameForAddr(address,string)": { + "details": "Same as {IERC181-setName}." + }, + "supportsInterface(bytes4)": { + "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "events": { + "DefaultResolverChanged(address)": { + "details": "Emitted when the default resolver is changed." + }, + "Initialized(uint8)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "ReverseClaimed(address,uint256)": { + "details": "Emitted when reverse node is claimed." + } + }, + "errors": { + "InvalidConfig()": [ + { + "details": "Error: The contract is not authorized for minting or modifying domain hex(addr) + '.addr.reverse'." + } + ], + "InvalidId()": [ + { + "details": "Error: The provided id is not child node of `ADDR_REVERSE_ID`" + } + ], + "NullAssignment()": [ + { + "details": "Error: The provided resolver address is null." + } + ], + "Unauthorized()": [ + { + "details": "Error: The sender lacks the necessary permissions." + } + ] + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes1\",\"name\":\"char\",\"type\":\"bytes1\"}],\"name\":\"InvalidCharacter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStringLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NullAssignment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract INameResolver\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"DefaultResolverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ReverseClaimed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CONTROLLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"claimWithResolver\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"computeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultResolver\",\"outputs\":[{\"internalType\":\"contract INameResolver\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRNSUnified\",\"outputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"contract INSUnified\",\"name\":\"rnsUnified\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract INameResolver\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setDefaultResolver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setNameForAddr\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The reverse registrar provides functions to claim a reverse record, as well as a convenience function to configure the record as it's most commonly used, as a way of specifying a canonical name for an address. The reverse registrar is specified in EIP 181 https://eips.ethereum.org/EIPS/eip-181.\",\"errors\":{\"InvalidConfig()\":[{\"details\":\"Error: The contract is not authorized for minting or modifying domain hex(addr) + '.addr.reverse'.\"}],\"InvalidId()\":[{\"details\":\"Error: The provided id is not child node of `ADDR_REVERSE_ID`\"}],\"NullAssignment()\":[{\"details\":\"Error: The provided resolver address is null.\"}],\"Unauthorized()\":[{\"details\":\"Error: The sender lacks the necessary permissions.\"}]},\"events\":{\"DefaultResolverChanged(address)\":{\"details\":\"Emitted when the default resolver is changed.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"ReverseClaimed(address,uint256)\":{\"details\":\"Emitted when reverse node is claimed.\"}},\"kind\":\"dev\",\"methods\":{\"claim(address)\":{\"details\":\"Claims the name hex(addr) + '.addr.reverse' for addr.\",\"params\":{\"addr\":\"The address to set as the addr of the reverse record in INS.\"},\"returns\":{\"id\":\"The INS node hash of the reverse record.\"}},\"claimWithResolver(address,address)\":{\"details\":\"Claims the name hex(owner) + '.addr.reverse' for owner and sets resolver.\",\"params\":{\"addr\":\"The address to set as the owner of the reverse record in INS.\",\"resolver\":\"The address of the resolver to set; 0 to leave unchanged.\"},\"returns\":{\"id\":\"The INS node hash of the reverse record.\"}},\"computeId(address)\":{\"details\":\"Returns the id hash for a given account's reverse records.\",\"params\":{\"addr\":\"The address to hash\"},\"returns\":{\"id\":\"The INS node hash.\"}},\"getAddress(uint256)\":{\"details\":\"Returns address that the reverse node resolves for. Eg. node namehash('{addr}.addr.reverse') will always resolve for `addr`.\"},\"getDefaultResolver()\":{\"details\":\"Returns default resolver.\"},\"getRNSUnified()\":{\"details\":\"Returns RNSUnified contract.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDefaultResolver(address)\":{\"details\":\"Sets default resolver. Requirement: - The method caller must be admin. Emitted an event {DefaultResolverChanged}.\"},\"setName(string)\":{\"details\":\"Sets the name record for the reverse INS record associated with the calling account. First updates the resolver to the default reverse resolver if necessary.\",\"params\":{\"name\":\"The name to set for this address.\"},\"returns\":{\"id\":\"The INS node hash of the reverse record.\"}},\"setNameForAddr(address,string)\":{\"details\":\"Same as {IERC181-setName}.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"CONTROLLER_ROLE\":{\"details\":\"This controller must equal to INSReverseRegistrar.CONTROLLER_ROLE()\"},\"____gap\":{\"details\":\"Gap for upgradeability.\"},\"_defaultResolver\":{\"details\":\"The default resolver.\"},\"_rnsUnified\":{\"details\":\"The rns unified contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Customized version of ReverseRegistrar: https://github.com/ensdomains/ens-contracts/blob/0c75ba23fae76165d51c9c80d76d22261e06179d/contracts/reverseRegistrar/ReverseRegistrar.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RNSReverseRegistrar.sol\":\"RNSReverseRegistrar\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"src/RNSReverseRegistrar.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { INameResolver } from \\\"./interfaces/resolvers/INameResolver.sol\\\";\\nimport { IERC165, IERC181, INSReverseRegistrar } from \\\"./interfaces/INSReverseRegistrar.sol\\\";\\nimport { INSUnified } from \\\"./interfaces/INSUnified.sol\\\";\\nimport { LibString } from \\\"./libraries/LibString.sol\\\";\\nimport { LibRNSDomain } from \\\"./libraries/LibRNSDomain.sol\\\";\\n\\n/**\\n * @notice Customized version of ReverseRegistrar: https://github.com/ensdomains/ens-contracts/blob/0c75ba23fae76165d51c9c80d76d22261e06179d/contracts/reverseRegistrar/ReverseRegistrar.sol\\n * @dev The reverse registrar provides functions to claim a reverse record, as well as a convenience function to\\n * configure the record as it's most commonly used, as a way of specifying a canonical name for an address.\\n * The reverse registrar is specified in EIP 181 https://eips.ethereum.org/EIPS/eip-181.\\n */\\ncontract RNSReverseRegistrar is Initializable, Ownable, INSReverseRegistrar {\\n using LibString for *;\\n\\n /// @dev This controller must equal to INSReverseRegistrar.CONTROLLER_ROLE()\\n bytes32 public constant CONTROLLER_ROLE = keccak256(\\\"CONTROLLER_ROLE\\\");\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n /// @dev The rns unified contract.\\n INSUnified internal _rnsUnified;\\n /// @dev The default resolver.\\n INameResolver internal _defaultResolver;\\n\\n modifier live() {\\n _requireLive();\\n _;\\n }\\n\\n modifier onlyAuthorized(address addr) {\\n _requireAuthorized(addr);\\n _;\\n }\\n\\n constructor() payable {\\n _disableInitializers();\\n }\\n\\n function initialize(address admin, INSUnified rnsUnified) external initializer {\\n _rnsUnified = rnsUnified;\\n _transferOwnership(admin);\\n }\\n\\n /**\\n * @inheritdoc INSReverseRegistrar\\n */\\n function getDefaultResolver() external view returns (INameResolver) {\\n return _defaultResolver;\\n }\\n\\n /**\\n * @inheritdoc INSReverseRegistrar\\n */\\n function getRNSUnified() external view returns (INSUnified) {\\n return _rnsUnified;\\n }\\n\\n /**\\n * @inheritdoc IERC165\\n */\\n function supportsInterface(bytes4 interfaceId) external pure returns (bool) {\\n return interfaceId == type(INSReverseRegistrar).interfaceId || interfaceId == type(IERC165).interfaceId\\n || interfaceId == type(IERC181).interfaceId;\\n }\\n\\n /**\\n * @inheritdoc INSReverseRegistrar\\n */\\n function setDefaultResolver(INameResolver resolver) external onlyOwner {\\n if (address(resolver) == address(0)) revert NullAssignment();\\n _defaultResolver = resolver;\\n emit DefaultResolverChanged(resolver);\\n }\\n\\n /**\\n * @inheritdoc IERC181\\n */\\n function claim(address addr) external returns (uint256 id) {\\n id = claimWithResolver(addr, address(_defaultResolver));\\n }\\n\\n /**\\n * @inheritdoc IERC181\\n */\\n function setName(string calldata name) external returns (uint256 id) {\\n id = setNameForAddr(_msgSender(), name);\\n }\\n\\n /**\\n * @inheritdoc INSReverseRegistrar\\n */\\n function getAddress(uint256 id) external view returns (address) {\\n INSUnified.Record memory record = _rnsUnified.getRecord(id);\\n if (record.immut.parentId != LibRNSDomain.ADDR_REVERSE_ID) revert InvalidId();\\n return record.immut.label.parseAddr();\\n }\\n\\n /**\\n * @inheritdoc IERC181\\n */\\n function claimWithResolver(address addr, address resolver) public live onlyAuthorized(addr) returns (uint256 id) {\\n id = _claimWithResolver(addr, resolver);\\n }\\n\\n /**\\n * @inheritdoc INSReverseRegistrar\\n */\\n function setNameForAddr(address addr, string calldata name) public live onlyAuthorized(addr) returns (uint256 id) {\\n id = computeId(addr);\\n INSUnified rnsUnified = _rnsUnified;\\n if (rnsUnified.ownerOf(id) != address(this)) {\\n uint256 claimedId = _claimWithResolver(addr, address(_defaultResolver));\\n if (claimedId != id) revert InvalidId();\\n }\\n\\n INSUnified.Record memory record = rnsUnified.getRecord(id);\\n INameResolver(record.mut.resolver).setName(bytes32(id), name);\\n }\\n\\n /**\\n * @inheritdoc INSReverseRegistrar\\n */\\n function computeId(address addr) public pure returns (uint256 id) {\\n id = LibRNSDomain.toId(LibRNSDomain.ADDR_REVERSE_ID, addr.toString());\\n }\\n\\n /**\\n * @dev Helper method to claim domain hex(addr) + '.addr.reverse' for addr.\\n * Emits an event {ReverseClaimed}.\\n */\\n function _claimWithResolver(address addr, address resolver) internal returns (uint256 id) {\\n string memory stringifiedAddr = addr.toString();\\n (, id) = _rnsUnified.mint(LibRNSDomain.ADDR_REVERSE_ID, stringifiedAddr, resolver, address(this), type(uint64).max);\\n emit ReverseClaimed(addr, id);\\n }\\n\\n /**\\n * @dev Helper method to ensure the contract can mint or modify domain hex(addr) + '.addr.reverse' for addr.\\n */\\n function _requireLive() internal view {\\n INSUnified rnsUnified = _rnsUnified;\\n uint256 addrReverseId = LibRNSDomain.ADDR_REVERSE_ID;\\n address owner = rnsUnified.ownerOf(addrReverseId);\\n if (\\n !(\\n owner == address(this) || rnsUnified.getApproved(addrReverseId) == address(this)\\n || rnsUnified.isApprovedForAll(owner, address(this))\\n )\\n ) {\\n revert InvalidConfig();\\n }\\n }\\n\\n /**\\n * @dev Helper method to ensure addr is authorized for claiming domain hex(addr) + '.addr.reverse' for addr.\\n */\\n function _requireAuthorized(address addr) internal view {\\n address sender = _msgSender();\\n INSUnified rnsUnified = _rnsUnified;\\n if (!(addr == sender || rnsUnified.hasRole(CONTROLLER_ROLE, sender) || rnsUnified.isApprovedForAll(addr, sender))) {\\n revert Unauthorized();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x110d52dd1dff7be521099a533bd39cb2c774b9c0fb1635090069415bf27ad2bc\",\"license\":\"MIT\"},\"src/interfaces/INSReverseRegistrar.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\nimport { INameResolver } from \\\"./resolvers/INameResolver.sol\\\";\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\n\\n/// @dev See https://eips.ethereum.org/EIPS/eip-181#registrar\\ninterface IERC181 {\\n /**\\n * @dev Claims the name hex(addr) + '.addr.reverse' for addr.\\n *\\n * @param addr The address to set as the addr of the reverse record in INS.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claim(address addr) external returns (uint256 id);\\n\\n /**\\n * @dev Claims the name hex(owner) + '.addr.reverse' for owner and sets resolver.\\n *\\n * @param addr The address to set as the owner of the reverse record in INS.\\n * @param resolver The address of the resolver to set; 0 to leave unchanged.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claimWithResolver(address addr, address resolver) external returns (uint256 id);\\n\\n /**\\n * @dev Sets the name record for the reverse INS record associated with the calling account. First updates the\\n * resolver to the default reverse resolver if necessary.\\n *\\n * @param name The name to set for this address.\\n * @return The INS node hash of the reverse record.\\n */\\n function setName(string memory name) external returns (uint256);\\n}\\n\\ninterface INSReverseRegistrar is IERC181, IERC165 {\\n /// @dev Error: The provided id is not child node of `ADDR_REVERSE_ID`\\n error InvalidId();\\n /// @dev Error: The contract is not authorized for minting or modifying domain hex(addr) + '.addr.reverse'.\\n error InvalidConfig();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: The provided resolver address is null.\\n error NullAssignment();\\n\\n /// @dev Emitted when reverse node is claimed.\\n event ReverseClaimed(address indexed addr, uint256 indexed id);\\n /// @dev Emitted when the default resolver is changed.\\n event DefaultResolverChanged(INameResolver indexed resolver);\\n\\n /**\\n * @dev Returns the controller role.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns default resolver.\\n */\\n function getDefaultResolver() external view returns (INameResolver);\\n\\n /**\\n * @dev Returns RNSUnified contract.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Sets default resolver.\\n *\\n * Requirement:\\n *\\n * - The method caller must be admin.\\n *\\n * Emitted an event {DefaultResolverChanged}.\\n *\\n */\\n function setDefaultResolver(INameResolver resolver) external;\\n\\n /**\\n * @dev Same as {IERC181-setName}.\\n */\\n function setNameForAddr(address addr, string memory name) external returns (uint256 id);\\n\\n /**\\n * @dev Returns address that the reverse node resolves for.\\n * Eg. node namehash('{addr}.addr.reverse') will always resolve for `addr`.\\n */\\n function getAddress(uint256 id) external view returns (address);\\n\\n /**\\n * @dev Returns the id hash for a given account's reverse records.\\n * @param addr The address to hash\\n * @return The INS node hash.\\n */\\n function computeId(address addr) external pure returns (uint256);\\n}\\n\",\"keccak256\":\"0x3b88e9ea1dd7c128244b5d0c69cee9dcadcb16b05a7e13416cc7b95c071b60a4\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0xaef1c58bb7c8688d6677a1c2739c0dc9e645ca5c64dd875be2f2b7a318a11406\",\"license\":\"MIT\"},\"src/interfaces/resolvers/INameResolver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\ninterface INameResolver {\\n /// @dev Emitted when a node name is changed.\\n event NameChanged(bytes32 indexed node, string name);\\n\\n /**\\n * @dev Sets the name associated with an INS node, for reverse records.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {NameChanged}.\\n *\\n * @param node The node to update.\\n */\\n function setName(bytes32 node, string calldata newName) external;\\n\\n /**\\n * @dev Returns the name associated with an INS node, for reverse records.\\n * @param node The INS node to query.\\n * @return The associated name.\\n */\\n function name(bytes32 node) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xf3dbbe3238d5f1e491a43dbccbd74755fcd325b5c6aef6b7f0819684bd1f9da3\",\"license\":\"UNLICENSED\"},\"src/libraries/LibRNSDomain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nlibrary LibRNSDomain {\\n /// @dev Value equals to namehash('ron')\\n uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688;\\n /// @dev Value equals to namehash('addr.reverse')\\n uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n /**\\n * @dev Calculate the corresponding id given parentId and label.\\n */\\n function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, parentId)\\n mstore(0x20, keccak256(add(label, 32), mload(label)))\\n id := keccak256(0x0, 64)\\n }\\n }\\n\\n /**\\n * @dev Calculates the hash of the label.\\n */\\n function hashLabel(string memory label) internal pure returns (bytes32 hashed) {\\n assembly (\\\"memory-safe\\\") {\\n hashed := keccak256(add(label, 32), mload(label))\\n }\\n }\\n\\n /**\\n * @dev Calculate the RNS namehash of a str.\\n */\\n function namehash(string memory str) internal pure returns (bytes32 hashed) {\\n // notice: this method is case-sensitive, ensure the string is lowercased before calling this method\\n assembly (\\\"memory-safe\\\") {\\n // load str length\\n let len := mload(str)\\n // returns bytes32(0x0) if length is zero\\n if iszero(iszero(len)) {\\n let hashedLen\\n // compute pointer to str[0]\\n let head := add(str, 32)\\n // compute pointer to str[length - 1]\\n let tail := add(head, sub(len, 1))\\n // cleanup dirty bytes if contains any\\n mstore(0x0, 0)\\n // loop backwards from `tail` to `head`\\n for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } {\\n // check if `i` is `head`\\n let isHead := eq(i, head)\\n // check if `str[i-1]` is \\\".\\\"\\n // `0x2e` == bytes1(\\\".\\\")\\n let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e)\\n if or(isHead, isDotNext) {\\n // size = distance(length, i) - hashedLength + 1\\n let size := add(sub(sub(tail, i), hashedLen), 1)\\n mstore(0x20, keccak256(i, size))\\n mstore(0x0, keccak256(0x0, 64))\\n // skip \\\".\\\" thereby + 1\\n hashedLen := add(hashedLen, add(size, 1))\\n }\\n }\\n }\\n hashed := mload(0x0)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x715029b2b420c6ec00bc1f939b837acf45d247fde8426089575b0e7b5e84518b\",\"license\":\"MIT\"},\"src/libraries/LibString.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nlibrary LibString {\\n error InvalidStringLength();\\n error InvalidCharacter(bytes1 char);\\n\\n /// @dev Lookup constant for method. See more detail at https://eips.ethereum.org/EIPS/eip-181\\n bytes32 private constant LOOKUP = 0x3031323334353637383961626364656600000000000000000000000000000000;\\n\\n /**\\n * @dev Returns the length of a given string\\n *\\n * @param s The string to measure the length of\\n * @return The length of the input string\\n */\\n function strlen(string memory s) internal pure returns (uint256) {\\n unchecked {\\n uint256 i;\\n uint256 len;\\n uint256 bytelength = bytes(s).length;\\n for (len; i < bytelength; len++) {\\n bytes1 b = bytes(s)[i];\\n if (b < 0x80) {\\n i += 1;\\n } else if (b < 0xE0) {\\n i += 2;\\n } else if (b < 0xF0) {\\n i += 3;\\n } else if (b < 0xF8) {\\n i += 4;\\n } else if (b < 0xFC) {\\n i += 5;\\n } else {\\n i += 6;\\n }\\n }\\n return len;\\n }\\n }\\n\\n /**\\n * @dev Converts an address to string.\\n */\\n function toString(address addr) internal pure returns (string memory stringifiedAddr) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(stringifiedAddr, 40)\\n let ptr := add(stringifiedAddr, 0x20)\\n for { let i := 40 } gt(i, 0) { } {\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n }\\n }\\n }\\n\\n /**\\n * @dev Converts string to address.\\n * Reverts if the string length is not equal to 40.\\n */\\n function parseAddr(string memory stringifiedAddr) internal pure returns (address) {\\n unchecked {\\n if (bytes(stringifiedAddr).length != 40) revert InvalidStringLength();\\n uint160 addr;\\n for (uint256 i = 0; i < 40; i += 2) {\\n addr *= 0x100;\\n addr += uint160(hexCharToDec(bytes(stringifiedAddr)[i])) * 0x10;\\n addr += hexCharToDec(bytes(stringifiedAddr)[i + 1]);\\n }\\n return address(addr);\\n }\\n }\\n\\n /**\\n * @dev Converts a hex char (0-9, a-f, A-F) to decimal number.\\n * Reverts if the char is invalid.\\n */\\n function hexCharToDec(bytes1 c) private pure returns (uint8 r) {\\n unchecked {\\n if ((bytes1(\\\"a\\\") <= c) && (c <= bytes1(\\\"f\\\"))) r = uint8(c) - 87;\\n else if ((bytes1(\\\"A\\\") <= c) && (c <= bytes1(\\\"F\\\"))) r = uint8(c) - 55;\\n else if ((bytes1(\\\"0\\\") <= c) && (c <= bytes1(\\\"9\\\"))) r = uint8(c) - 48;\\n else revert InvalidCharacter(c);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d456b294f0e44ccaabded43a3d96db6270761a167535155a762fe41e968b905\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0xe364b4d2e480a7f3e392a40f792303c0febf79c1a623eb4c2278f652210e2e6c\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182503, + "numDeployments": 1, + "storageLayout": { + "storage": [ + { + "astId": 50000, + "contract": "src/RNSReverseRegistrar.sol:RNSReverseRegistrar", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 50003, + "contract": "src/RNSReverseRegistrar.sol:RNSReverseRegistrar", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 48995, + "contract": "src/RNSReverseRegistrar.sol:RNSReverseRegistrar", + "label": "_owner", + "offset": 2, + "slot": "0", + "type": "t_address" + }, + { + "astId": 60947, + "contract": "src/RNSReverseRegistrar.sol:RNSReverseRegistrar", + "label": "____gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 60951, + "contract": "src/RNSReverseRegistrar.sol:RNSReverseRegistrar", + "label": "_rnsUnified", + "offset": 0, + "slot": "51", + "type": "t_contract(INSUnified)65128" + }, + { + "astId": 60955, + "contract": "src/RNSReverseRegistrar.sol:RNSReverseRegistrar", + "label": "_defaultResolver", + "offset": 0, + "slot": "52", + "type": "t_contract(INameResolver)65829" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(INSUnified)65128": { + "encoding": "inplace", + "label": "contract INSUnified", + "numberOfBytes": "20" + }, + "t_contract(INameResolver)65829": { + "encoding": "inplace", + "label": "contract INameResolver", + "numberOfBytes": "20" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user", + "notice": "Customized version of ReverseRegistrar: https://github.com/ensdomains/ens-contracts/blob/0c75ba23fae76165d51c9c80d76d22261e06179d/contracts/reverseRegistrar/ReverseRegistrar.sol" + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RNSReverseRegistrarProxy.json b/deployments/ronin-testnet/RNSReverseRegistrarProxy.json new file mode 100644 index 00000000..b9e93bc8 --- /dev/null +++ b/deployments/ronin-testnet/RNSReverseRegistrarProxy.json @@ -0,0 +1,120 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "address": "0x0CC07F120DFfDF507A6E983C54BcB402FC6bF716", + "args": "0x485cc955000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83", + "blockNumber": 21224275, + "bytecode": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "chainId": 2021, + "contractName": "TransparentUpgradeableProxy", + "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.", + "methods": { + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + } + }, + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is changed." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Emitted when the beacon is changed.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\\n * does not implement this interface directly, and some of its functions are implemented by an internal dispatch\\n * mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\\n * include them in the ABI so this interface must be used to interact with it.\\n */\\ninterface ITransparentUpgradeableProxy is IERC1967 {\\n function admin() external view returns (address);\\n\\n function implementation() external view returns (address);\\n\\n function changeAdmin(address) external;\\n\\n function upgradeTo(address) external;\\n\\n function upgradeToAndCall(address, bytes memory) external payable;\\n}\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n *\\n * NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\\n * inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch\\n * mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\\n * fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\\n * implementation.\\n *\\n * WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler\\n * will not check that there are no selector conflicts, due to the note above. A selector clash between any new function\\n * and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could\\n * render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n *\\n * CAUTION: This modifier is deprecated, as it could cause issues if the modified function has arguments, and the\\n * implementation provides a function with the same selector.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior\\n */\\n function _fallback() internal virtual override {\\n if (msg.sender == _getAdmin()) {\\n bytes memory ret;\\n bytes4 selector = msg.sig;\\n if (selector == ITransparentUpgradeableProxy.upgradeTo.selector) {\\n ret = _dispatchUpgradeTo();\\n } else if (selector == ITransparentUpgradeableProxy.upgradeToAndCall.selector) {\\n ret = _dispatchUpgradeToAndCall();\\n } else if (selector == ITransparentUpgradeableProxy.changeAdmin.selector) {\\n ret = _dispatchChangeAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.admin.selector) {\\n ret = _dispatchAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.implementation.selector) {\\n ret = _dispatchImplementation();\\n } else {\\n revert(\\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n }\\n assembly {\\n return(add(ret, 0x20), mload(ret))\\n }\\n } else {\\n super._fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function _dispatchAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address admin = _getAdmin();\\n return abi.encode(admin);\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function _dispatchImplementation() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address implementation = _implementation();\\n return abi.encode(implementation);\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _dispatchChangeAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newAdmin = abi.decode(msg.data[4:], (address));\\n _changeAdmin(newAdmin);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n */\\n function _dispatchUpgradeTo() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newImplementation = abi.decode(msg.data[4:], (address));\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n */\\n function _dispatchUpgradeToAndCall() private returns (bytes memory) {\\n (address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));\\n _upgradeToAndCall(newImplementation, data, true);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * CAUTION: This function is deprecated. Use {ERC1967Upgrade-_getAdmin} instead.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev To keep this contract fully transparent, all `ifAdmin` functions must be payable. This helper is here to\\n * emulate some proxy functions being non-payable while still allowing value to pass through.\\n */\\n function _requireZeroValue() private {\\n require(msg.value == 0);\\n }\\n}\\n\",\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n struct StringSlot {\\n string value;\\n }\\n\\n struct BytesSlot {\\n bytes value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n */\\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n */\\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n */\\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n */\\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182504, + "numDeployments": 1, + "storageLayout": { + "storage": [], + "types": {} + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RNSUnifiedLogic.json b/deployments/ronin-testnet/RNSUnifiedLogic.json new file mode 100644 index 00000000..bbd9894b --- /dev/null +++ b/deployments/ronin-testnet/RNSUnifiedLogic.json @@ -0,0 +1,18869 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [], + "name": "CannotSetImmutableField", + "type": "error" + }, + { + "inputs": [], + "name": "ExceedParentExpiry", + "type": "error" + }, + { + "inputs": [], + "name": "Expired", + "type": "error" + }, + { + "inputs": [], + "name": "ExpiryTimeMustBeLargerThanTheOldOne", + "type": "error" + }, + { + "inputs": [], + "name": "MissingControllerRole", + "type": "error" + }, + { + "inputs": [], + "name": "MissingProtectedSettlerRole", + "type": "error" + }, + { + "inputs": [], + "name": "NameMustBeRegisteredOrInGracePeriod", + "type": "error" + }, + { + "inputs": [], + "name": "ThirdLevelDomainUnallowed", + "type": "error" + }, + { + "inputs": [], + "name": "Unauthorized", + "type": "error" + }, + { + "inputs": [], + "name": "Unavailable", + "type": "error" + }, + { + "inputs": [], + "name": "Unexists", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "newURI", + "type": "string" + } + ], + "name": "BaseURIUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "newGracePeriod", + "type": "uint64" + } + ], + "name": "GracePeriodUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + } + ], + "name": "NonceUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "node", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "ModifyingIndicator", + "name": "indicator", + "type": "uint256" + }, + { + "components": [ + { + "components": [ + { + "internalType": "uint8", + "name": "depth", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "parentId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "label", + "type": "string" + } + ], + "internalType": "struct INSUnified.ImmutableRecord", + "name": "immut", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "resolver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint64", + "name": "expiry", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "protected", + "type": "bool" + } + ], + "internalType": "struct INSUnified.MutableRecord", + "name": "mut", + "type": "tuple" + } + ], + "indexed": false, + "internalType": "struct INSUnified.Record", + "name": "record", + "type": "tuple" + } + ], + "name": "RecordUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "CONTROLLER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_EXPIRY", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PROTECTED_SETTLER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "RESERVATION_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "available", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "protected", + "type": "bool" + } + ], + "name": "bulkSetProtected", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "requester", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "ModifyingIndicator", + "name": "indicator", + "type": "uint256" + } + ], + "name": "canSetRecord", + "outputs": [ + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + }, + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getDomain", + "outputs": [ + { + "internalType": "string", + "name": "domain", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getGracePeriod", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRecord", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint8", + "name": "depth", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "parentId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "label", + "type": "string" + } + ], + "internalType": "struct INSUnified.ImmutableRecord", + "name": "immut", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "resolver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint64", + "name": "expiry", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "protected", + "type": "bool" + } + ], + "internalType": "struct INSUnified.MutableRecord", + "name": "mut", + "type": "tuple" + } + ], + "internalType": "struct INSUnified.Record", + "name": "record", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "address", + "name": "pauser", + "type": "address" + }, + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "protectedSettler", + "type": "address" + }, + { + "internalType": "uint64", + "name": "gracePeriod", + "type": "uint64" + }, + { + "internalType": "string", + "name": "baseTokenURI", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "parentId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "label", + "type": "string" + }, + { + "internalType": "address", + "name": "resolver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint64", + "name": "duration", + "type": "uint64" + } + ], + "name": "mint", + "outputs": [ + { + "internalType": "uint64", + "name": "expiryTime", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "str", + "type": "string" + } + ], + "name": "namehash", + "outputs": [ + { + "internalType": "bytes32", + "name": "hashed", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "reclaim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "duration", + "type": "uint64" + } + ], + "name": "renew", + "outputs": [ + { + "internalType": "uint64", + "name": "expiry", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "baseTokenURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "expiry", + "type": "uint64" + } + ], + "name": "setExpiry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "gracePeriod", + "type": "uint64" + } + ], + "name": "setGracePeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "ModifyingIndicator", + "name": "indicator", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "resolver", + "type": "address" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint64", + "name": "expiry", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "protected", + "type": "bool" + } + ], + "internalType": "struct INSUnified.MutableRecord", + "name": "mutRecord", + "type": "tuple" + } + ], + "name": "setRecord", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "stateOf", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalMinted", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "address": "0x304FaeF4e3A3846A6d691202B6f2ab27E5e11A48", + "args": "0x", + "ast": { + "absolutePath": "src/RNSUnified.sol", + "id": 63452, + "exportedSymbols": { + "ALL_FIELDS_INDICATOR": [ + 70111 + ], + "ERC721": [ + 51340 + ], + "IERC721": [ + 51456 + ], + "IERC721State": [ + 501 + ], + "IMMUTABLE_FIELDS_INDICATOR": [ + 70091 + ], + "INSUnified": [ + 65672 + ], + "Initializable": [ + 50240 + ], + "LibModifyingField": [ + 66696 + ], + "LibRNSDomain": [ + 66739 + ], + "LibSafeRange": [ + 67283 + ], + "ModifyingField": [ + 66675 + ], + "ModifyingIndicator": [ + 70055 + ], + "RNSToken": [ + 62154 + ], + "RNSUnified": [ + 63451 + ], + "USER_FIELDS_INDICATOR": [ + 70099 + ] + }, + "nodeType": "SourceUnit", + "src": "32:12004:96", + "nodes": [ + { + "id": 62156, + "nodeType": "PragmaDirective", + "src": "32:24:96", + "nodes": [], + "literals": [ + "solidity", + "^", + "0.8", + ".19" + ] + }, + { + "id": 62158, + "nodeType": "ImportDirective", + "src": "58:86:96", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "nameLocation": "-1:-1:-1", + "scope": 63452, + "sourceUnit": 50241, + "symbolAliases": [ + { + "foreign": { + "id": 62157, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50240, + "src": "67:13:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62164, + "nodeType": "ImportDirective", + "src": "145:85:96", + "nodes": [], + "absolutePath": "src/RNSToken.sol", + "file": "./RNSToken.sol", + "nameLocation": "-1:-1:-1", + "scope": 63452, + "sourceUnit": 62155, + "symbolAliases": [ + { + "foreign": { + "id": 62159, + "name": "IERC721State", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 501, + "src": "154:12:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62160, + "name": "IERC721", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51456, + "src": "168:7:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62161, + "name": "ERC721", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51340, + "src": "177:6:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62162, + "name": "INSUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65672, + "src": "185:10:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62163, + "name": "RNSToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62154, + "src": "197:8:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62166, + "nodeType": "ImportDirective", + "src": "231:60:96", + "nodes": [], + "absolutePath": "src/libraries/LibRNSDomain.sol", + "file": "./libraries/LibRNSDomain.sol", + "nameLocation": "-1:-1:-1", + "scope": 63452, + "sourceUnit": 66740, + "symbolAliases": [ + { + "foreign": { + "id": 62165, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66739, + "src": "240:12:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62168, + "nodeType": "ImportDirective", + "src": "292:65:96", + "nodes": [], + "absolutePath": "src/libraries/math/LibSafeRange.sol", + "file": "./libraries/math/LibSafeRange.sol", + "nameLocation": "-1:-1:-1", + "scope": 63452, + "sourceUnit": 67284, + "symbolAliases": [ + { + "foreign": { + "id": 62167, + "name": "LibSafeRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67283, + "src": "301:12:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62171, + "nodeType": "ImportDirective", + "src": "358:86:96", + "nodes": [], + "absolutePath": "src/libraries/LibModifyingField.sol", + "file": "./libraries/LibModifyingField.sol", + "nameLocation": "-1:-1:-1", + "scope": 63452, + "sourceUnit": 66697, + "symbolAliases": [ + { + "foreign": { + "id": 62169, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "367:14:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62170, + "name": "LibModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66696, + "src": "383:17:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62176, + "nodeType": "ImportDirective", + "src": "445:149:96", + "nodes": [], + "absolutePath": "src/types/ModifyingIndicator.sol", + "file": "./types/ModifyingIndicator.sol", + "nameLocation": "-1:-1:-1", + "scope": 63452, + "sourceUnit": 70270, + "symbolAliases": [ + { + "foreign": { + "id": 62172, + "name": "ALL_FIELDS_INDICATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 70111, + "src": "456:20:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62173, + "name": "IMMUTABLE_FIELDS_INDICATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 70091, + "src": "480:26:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62174, + "name": "USER_FIELDS_INDICATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 70099, + "src": "510:21:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62175, + "name": "ModifyingIndicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 70055, + "src": "535:18:96", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 63451, + "nodeType": "ContractDefinition", + "src": "596:11439:96", + "nodes": [ + { + "id": 62183, + "nodeType": "UsingForDirective", + "src": "647:30:96", + "nodes": [], + "global": false, + "libraryName": { + "id": 62181, + "name": "LibRNSDomain", + "nameLocations": [ + "653:12:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66739, + "src": "653:12:96" + }, + "typeName": { + "id": 62182, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "670:6:96", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + { + "id": 62187, + "nodeType": "UsingForDirective", + "src": "680:43:96", + "nodes": [], + "global": false, + "libraryName": { + "id": 62184, + "name": "LibModifyingField", + "nameLocations": [ + "686:17:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66696, + "src": "686:17:96" + }, + "typeName": { + "id": 62186, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62185, + "name": "ModifyingField", + "nameLocations": [ + "708:14:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66675, + "src": "708:14:96" + }, + "referencedDeclaration": 66675, + "src": "708:14:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + } + }, + { + "id": 62192, + "nodeType": "VariableDeclaration", + "src": "727:70:96", + "nodes": [], + "baseFunctions": [ + 65516 + ], + "constant": true, + "functionSelector": "092c5b3b", + "mutability": "constant", + "name": "CONTROLLER_ROLE", + "nameLocation": "751:15:96", + "scope": 63451, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 62188, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "727:7:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "434f4e54524f4c4c45525f524f4c45", + "id": 62190, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "779:17:96", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357", + "typeString": "literal_string \"CONTROLLER_ROLE\"" + }, + "value": "CONTROLLER_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357", + "typeString": "literal_string \"CONTROLLER_ROLE\"" + } + ], + "id": 62189, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "769:9:96", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 62191, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "769:28:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 62197, + "nodeType": "VariableDeclaration", + "src": "801:72:96", + "nodes": [], + "baseFunctions": [ + 65528 + ], + "constant": true, + "functionSelector": "f1e37908", + "mutability": "constant", + "name": "RESERVATION_ROLE", + "nameLocation": "825:16:96", + "scope": 63451, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 62193, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "801:7:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "5245534552564154494f4e5f524f4c45", + "id": 62195, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "854:18:96", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2", + "typeString": "literal_string \"RESERVATION_ROLE\"" + }, + "value": "RESERVATION_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2", + "typeString": "literal_string \"RESERVATION_ROLE\"" + } + ], + "id": 62194, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "844:9:96", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 62196, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "844:29:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 62202, + "nodeType": "VariableDeclaration", + "src": "877:84:96", + "nodes": [], + "baseFunctions": [ + 65522 + ], + "constant": true, + "functionSelector": "33855d9f", + "mutability": "constant", + "name": "PROTECTED_SETTLER_ROLE", + "nameLocation": "901:22:96", + "scope": 63451, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 62198, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "877:7:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "50524f5445435445445f534554544c45525f524f4c45", + "id": 62200, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "936:24:96", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b108038", + "typeString": "literal_string \"PROTECTED_SETTLER_ROLE\"" + }, + "value": "PROTECTED_SETTLER_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b108038", + "typeString": "literal_string \"PROTECTED_SETTLER_ROLE\"" + } + ], + "id": 62199, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "926:9:96", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 62201, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "926:35:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 62209, + "nodeType": "VariableDeclaration", + "src": "965:52:96", + "nodes": [], + "baseFunctions": [ + 65534 + ], + "constant": true, + "functionSelector": "b9671690", + "mutability": "constant", + "name": "MAX_EXPIRY", + "nameLocation": "988:10:96", + "scope": 63451, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62203, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "965:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 62206, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1006:6:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 62205, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1006:6:96", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + } + ], + "id": 62204, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "1001:4:96", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 62207, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1001:12:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint64", + "typeString": "type(uint64)" + } + }, + "id": 62208, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1014:3:96", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "1001:16:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "public" + }, + { + "id": 62214, + "nodeType": "VariableDeclaration", + "src": "1057:27:96", + "nodes": [], + "constant": false, + "documentation": { + "id": 62210, + "nodeType": "StructuredDocumentation", + "src": "1022:32:96", + "text": "@dev Gap for upgradeability." + }, + "mutability": "mutable", + "name": "____gap", + "nameLocation": "1077:7:96", + "scope": 63451, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 62211, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1057:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 62213, + "length": { + "hexValue": "3530", + "id": 62212, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1065:2:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "1057:11:96", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + }, + { + "id": 62216, + "nodeType": "VariableDeclaration", + "src": "1089:28:96", + "nodes": [], + "constant": false, + "mutability": "mutable", + "name": "_gracePeriod", + "nameLocation": "1105:12:96", + "scope": 63451, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62215, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1089:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "id": 62222, + "nodeType": "VariableDeclaration", + "src": "1164:45:96", + "nodes": [], + "constant": false, + "documentation": { + "id": 62217, + "nodeType": "StructuredDocumentation", + "src": "1121:40:96", + "text": "@dev Mapping from token id => record" + }, + "mutability": "mutable", + "name": "_recordOf", + "nameLocation": "1200:9:96", + "scope": 63451, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record)" + }, + "typeName": { + "id": 62221, + "keyName": "", + "keyNameLocation": "-1:-1:-1", + "keyType": { + "id": 62218, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1172:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "1164:26:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 62220, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62219, + "name": "Record", + "nameLocations": [ + "1183:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "1183:6:96" + }, + "referencedDeclaration": 65485, + "src": "1183:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + } + }, + "visibility": "internal" + }, + { + "id": 62236, + "nodeType": "ModifierDefinition", + "src": "1214:117:96", + "nodes": [], + "body": { + "id": 62235, + "nodeType": "Block", + "src": "1280:51:96", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 62230, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62224, + "src": "1305:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62231, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62227, + "src": "1309:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "id": 62229, + "name": "_requireAuthorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63250, + "src": "1286:18:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$__$", + "typeString": "function (uint256,ModifyingIndicator) view" + } + }, + "id": 62232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1286:33:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62233, + "nodeType": "ExpressionStatement", + "src": "1286:33:96" + }, + { + "id": 62234, + "nodeType": "PlaceholderStatement", + "src": "1325:1:96" + } + ] + }, + "name": "onlyAuthorized", + "nameLocation": "1223:14:96", + "parameters": { + "id": 62228, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62224, + "mutability": "mutable", + "name": "id", + "nameLocation": "1246:2:96", + "nodeType": "VariableDeclaration", + "scope": 62236, + "src": "1238:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62223, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1238:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62227, + "mutability": "mutable", + "name": "indicator", + "nameLocation": "1269:9:96", + "nodeType": "VariableDeclaration", + "scope": 62236, + "src": "1250:28:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + "typeName": { + "id": 62226, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62225, + "name": "ModifyingIndicator", + "nameLocations": [ + "1250:18:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 70055, + "src": "1250:18:96" + }, + "referencedDeclaration": 70055, + "src": "1250:18:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "visibility": "internal" + } + ], + "src": "1237:42:96" + }, + "virtual": false, + "visibility": "internal" + }, + { + "id": 62247, + "nodeType": "FunctionDefinition", + "src": "1335:70:96", + "nodes": [], + "body": { + "id": 62246, + "nodeType": "Block", + "src": "1372:33:96", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 62243, + "name": "_disableInitializers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50221, + "src": "1378:20:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 62244, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1378:22:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62245, + "nodeType": "ExpressionStatement", + "src": "1378:22:96" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [ + { + "arguments": [ + { + "hexValue": "", + "id": 62239, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1364:2:96", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + }, + { + "hexValue": "", + "id": 62240, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1368:2:96", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "id": 62241, + "kind": "baseConstructorSpecifier", + "modifierName": { + "id": 62238, + "name": "ERC721", + "nameLocations": [ + "1357:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51340, + "src": "1357:6:96" + }, + "nodeType": "ModifierInvocation", + "src": "1357:14:96" + } + ], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 62237, + "nodeType": "ParameterList", + "parameters": [], + "src": "1346:2:96" + }, + "returnParameters": { + "id": 62242, + "nodeType": "ParameterList", + "parameters": [], + "src": "1372:0:96" + }, + "scope": 63451, + "stateMutability": "payable", + "virtual": false, + "visibility": "public" + }, + { + "id": 62323, + "nodeType": "FunctionDefinition", + "src": "1409:636:96", + "nodes": [], + "body": { + "id": 62322, + "nodeType": "Block", + "src": "1605:440:96", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 62265, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48554, + "src": "1622:18:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 62266, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62249, + "src": "1642:5:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 62264, + "name": "_grantRole", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 48942 + ], + "referencedDeclaration": 48942, + "src": "1611:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 62267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1611:37:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62268, + "nodeType": "ExpressionStatement", + "src": "1611:37:96" + }, + { + "expression": { + "arguments": [ + { + "id": 62270, + "name": "PAUSER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61919, + "src": "1665:11:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 62271, + "name": "pauser", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62251, + "src": "1678:6:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 62269, + "name": "_grantRole", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 48942 + ], + "referencedDeclaration": 48942, + "src": "1654:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 62272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1654:31:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62273, + "nodeType": "ExpressionStatement", + "src": "1654:31:96" + }, + { + "expression": { + "arguments": [ + { + "id": 62275, + "name": "CONTROLLER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62192, + "src": "1702:15:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 62276, + "name": "controller", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62253, + "src": "1719:10:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 62274, + "name": "_grantRole", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 48942 + ], + "referencedDeclaration": 48942, + "src": "1691:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 62277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1691:39:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62278, + "nodeType": "ExpressionStatement", + "src": "1691:39:96" + }, + { + "expression": { + "arguments": [ + { + "id": 62280, + "name": "PROTECTED_SETTLER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62202, + "src": "1747:22:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 62281, + "name": "protectedSettler", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62255, + "src": "1771:16:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 62279, + "name": "_grantRole", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 48942 + ], + "referencedDeclaration": 48942, + "src": "1736:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 62282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1736:52:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62283, + "nodeType": "ExpressionStatement", + "src": "1736:52:96" + }, + { + "expression": { + "arguments": [ + { + "id": 62285, + "name": "baseTokenURI", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62259, + "src": "1807:12:96", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + ], + "id": 62284, + "name": "_setBaseURI", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62116, + "src": "1795:11:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_calldata_ptr_$returns$__$", + "typeString": "function (string calldata)" + } + }, + "id": 62286, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1795:25:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62287, + "nodeType": "ExpressionStatement", + "src": "1795:25:96" + }, + { + "expression": { + "arguments": [ + { + "id": 62289, + "name": "gracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62257, + "src": "1842:11:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 62288, + "name": "_setGracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63339, + "src": "1826:15:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$", + "typeString": "function (uint64)" + } + }, + "id": 62290, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1826:28:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62291, + "nodeType": "ExpressionStatement", + "src": "1826:28:96" + }, + { + "expression": { + "arguments": [ + { + "id": 62293, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62249, + "src": "1867:5:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "hexValue": "307830", + "id": 62294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1874:3:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 62292, + "name": "_mint", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 62099 + ], + "referencedDeclaration": 62099, + "src": "1861:5:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 62295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1861:17:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62296, + "nodeType": "ExpressionStatement", + "src": "1861:17:96" + }, + { + "assignments": [ + 62299 + ], + "declarations": [ + { + "constant": false, + "id": 62299, + "mutability": "mutable", + "name": "record", + "nameLocation": "1898:6:96", + "nodeType": "VariableDeclaration", + "scope": 62322, + "src": "1884:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 62298, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62297, + "name": "Record", + "nameLocations": [ + "1884:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "1884:6:96" + }, + "referencedDeclaration": 65485, + "src": "1884:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "id": 62300, + "nodeType": "VariableDeclarationStatement", + "src": "1884:20:96" + }, + { + "expression": { + "id": 62311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "baseExpression": { + "id": 62301, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "1910:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62303, + "indexExpression": { + "hexValue": "307830", + "id": 62302, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1920:3:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "1910:14:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62304, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1925:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "1910:18:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 62305, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1929:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "1910:25:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 62306, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62299, + "src": "1938:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62307, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1945:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "1938:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62308, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "1949:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "1938:17:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62309, + "name": "MAX_EXPIRY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62209, + "src": "1958:10:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "1938:30:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "1910:58:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 62312, + "nodeType": "ExpressionStatement", + "src": "1910:58:96" + }, + { + "eventCall": { + "arguments": [ + { + "hexValue": "307830", + "id": 62314, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1993:3:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 62315, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "1998:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 62316, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2013:6:96", + "memberName": "Expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 66673, + "src": "1998:21:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 62317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2020:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "1998:31:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 62318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1998:33:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + { + "id": 62319, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62299, + "src": "2033:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + ], + "id": 62313, + "name": "RecordUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65510, + "src": "1979:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_struct$_Record_$65485_memory_ptr_$returns$__$", + "typeString": "function (uint256,ModifyingIndicator,struct INSUnified.Record memory)" + } + }, + "id": 62320, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1979:61:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62321, + "nodeType": "EmitStatement", + "src": "1974:66:96" + } + ] + }, + "functionSelector": "abfaf005", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 62262, + "kind": "modifierInvocation", + "modifierName": { + "id": 62261, + "name": "initializer", + "nameLocations": [ + "1593:11:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50142, + "src": "1593:11:96" + }, + "nodeType": "ModifierInvocation", + "src": "1593:11:96" + } + ], + "name": "initialize", + "nameLocation": "1418:10:96", + "parameters": { + "id": 62260, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62249, + "mutability": "mutable", + "name": "admin", + "nameLocation": "1442:5:96", + "nodeType": "VariableDeclaration", + "scope": 62323, + "src": "1434:13:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62248, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1434:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62251, + "mutability": "mutable", + "name": "pauser", + "nameLocation": "1461:6:96", + "nodeType": "VariableDeclaration", + "scope": 62323, + "src": "1453:14:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62250, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1453:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62253, + "mutability": "mutable", + "name": "controller", + "nameLocation": "1481:10:96", + "nodeType": "VariableDeclaration", + "scope": 62323, + "src": "1473:18:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62252, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1473:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62255, + "mutability": "mutable", + "name": "protectedSettler", + "nameLocation": "1505:16:96", + "nodeType": "VariableDeclaration", + "scope": 62323, + "src": "1497:24:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62254, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1497:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62257, + "mutability": "mutable", + "name": "gracePeriod", + "nameLocation": "1534:11:96", + "nodeType": "VariableDeclaration", + "scope": 62323, + "src": "1527:18:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62256, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "1527:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62259, + "mutability": "mutable", + "name": "baseTokenURI", + "nameLocation": "1567:12:96", + "nodeType": "VariableDeclaration", + "scope": 62323, + "src": "1551:28:96", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string" + }, + "typeName": { + "id": 62258, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1551:6:96", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "1428:155:96" + }, + "returnParameters": { + "id": 62263, + "nodeType": "ParameterList", + "parameters": [], + "src": "1605:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62343, + "nodeType": "FunctionDefinition", + "src": "2078:137:96", + "nodes": [], + "body": { + "id": 62342, + "nodeType": "Block", + "src": "2136:79:96", + "nodes": [], + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 62340, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 62331, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "2149:5:96", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 62332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2155:9:96", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "2149:15:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "arguments": [ + { + "arguments": [ + { + "id": 62336, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62326, + "src": "2192:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62335, + "name": "_expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63160, + "src": "2184:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$", + "typeString": "function (uint256) view returns (uint64)" + } + }, + "id": 62337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2184:11:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 62338, + "name": "_gracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62216, + "src": "2197:12:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 62333, + "name": "LibSafeRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67283, + "src": "2167:12:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibSafeRange_$67283_$", + "typeString": "type(library LibSafeRange)" + } + }, + "id": 62334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2180:3:96", + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 67246, + "src": "2167:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 62339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2167:43:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2149:61:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 62330, + "id": 62341, + "nodeType": "Return", + "src": "2142:68:96" + } + ] + }, + "baseFunctions": [ + 65550 + ], + "documentation": { + "id": 62324, + "nodeType": "StructuredDocumentation", + "src": "2049:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "96e494e8", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "available", + "nameLocation": "2087:9:96", + "parameters": { + "id": 62327, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62326, + "mutability": "mutable", + "name": "id", + "nameLocation": "2105:2:96", + "nodeType": "VariableDeclaration", + "scope": 62343, + "src": "2097:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62325, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2097:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2096:12:96" + }, + "returnParameters": { + "id": 62330, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62329, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 62343, + "src": "2130:4:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 62328, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2130:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2129:6:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 62352, + "nodeType": "FunctionDefinition", + "src": "2248:87:96", + "nodes": [], + "body": { + "id": 62351, + "nodeType": "Block", + "src": "2305:30:96", + "nodes": [], + "statements": [ + { + "expression": { + "id": 62349, + "name": "_gracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62216, + "src": "2318:12:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 62348, + "id": 62350, + "nodeType": "Return", + "src": "2311:19:96" + } + ] + }, + "baseFunctions": [ + 65556 + ], + "documentation": { + "id": 62344, + "nodeType": "StructuredDocumentation", + "src": "2219:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "dbd18388", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getGracePeriod", + "nameLocation": "2257:14:96", + "parameters": { + "id": 62345, + "nodeType": "ParameterList", + "parameters": [], + "src": "2271:2:96" + }, + "returnParameters": { + "id": 62348, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62347, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 62352, + "src": "2297:6:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62346, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2297:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "2296:8:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 62368, + "nodeType": "FunctionDefinition", + "src": "2368:132:96", + "nodes": [], + "body": { + "id": 62367, + "nodeType": "Block", + "src": "2461:39:96", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 62364, + "name": "gracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62355, + "src": "2483:11:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 62363, + "name": "_setGracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63339, + "src": "2467:15:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$", + "typeString": "function (uint64)" + } + }, + "id": 62365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2467:28:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62366, + "nodeType": "ExpressionStatement", + "src": "2467:28:96" + } + ] + }, + "baseFunctions": [ + 65568 + ], + "documentation": { + "id": 62353, + "nodeType": "StructuredDocumentation", + "src": "2339:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "55a5133b", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 62358, + "kind": "modifierInvocation", + "modifierName": { + "id": 62357, + "name": "whenNotPaused", + "nameLocations": [ + "2421:13:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50275, + "src": "2421:13:96" + }, + "nodeType": "ModifierInvocation", + "src": "2421:13:96" + }, + { + "arguments": [ + { + "id": 62360, + "name": "CONTROLLER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62192, + "src": "2444:15:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 62361, + "kind": "modifierInvocation", + "modifierName": { + "id": 62359, + "name": "onlyRole", + "nameLocations": [ + "2435:8:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "2435:8:96" + }, + "nodeType": "ModifierInvocation", + "src": "2435:25:96" + } + ], + "name": "setGracePeriod", + "nameLocation": "2377:14:96", + "parameters": { + "id": 62356, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62355, + "mutability": "mutable", + "name": "gracePeriod", + "nameLocation": "2399:11:96", + "nodeType": "VariableDeclaration", + "scope": 62368, + "src": "2392:18:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62354, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2392:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "2391:20:96" + }, + "returnParameters": { + "id": 62362, + "nodeType": "ParameterList", + "parameters": [], + "src": "2461:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62507, + "nodeType": "FunctionDefinition", + "src": "2533:1142:96", + "nodes": [], + "body": { + "id": 62506, + "nodeType": "Block", + "src": "2715:960:96", + "nodes": [], + "statements": [ + { + "condition": { + "id": 62393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "2725:41:96", + "subExpression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 62389, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "2743:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 62390, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2743:12:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 62391, + "name": "parentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62371, + "src": "2757:8:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62388, + "name": "_checkOwnerRules", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63224, + "src": "2726:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) view returns (bool)" + } + }, + "id": 62392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2726:40:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62397, + "nodeType": "IfStatement", + "src": "2721:68:96", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 62394, + "name": "Unauthorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65445, + "src": "2775:12:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 62395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2775:14:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62396, + "nodeType": "RevertStatement", + "src": "2768:21:96" + } + }, + { + "expression": { + "id": 62404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62398, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62386, + "src": "2795:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 62401, + "name": "parentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62371, + "src": "2818:8:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62402, + "name": "label", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62373, + "src": "2828:5:96", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + ], + "expression": { + "id": 62399, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66739, + "src": "2800:12:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$66739_$", + "typeString": "type(library LibRNSDomain)" + } + }, + "id": 62400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2813:4:96", + "memberName": "toId", + "nodeType": "MemberAccess", + "referencedDeclaration": 66718, + "src": "2800:17:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,string memory) pure returns (uint256)" + } + }, + "id": 62403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2800:34:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2795:39:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 62405, + "nodeType": "ExpressionStatement", + "src": "2795:39:96" + }, + { + "condition": { + "id": 62409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "2844:14:96", + "subExpression": { + "arguments": [ + { + "id": 62407, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62386, + "src": "2855:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62406, + "name": "available", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62343, + "src": "2845:9:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 62408, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2845:13:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62413, + "nodeType": "IfStatement", + "src": "2840:40:96", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 62410, + "name": "Unavailable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65442, + "src": "2867:11:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 62411, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2867:13:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62412, + "nodeType": "RevertStatement", + "src": "2860:20:96" + } + }, + { + "condition": { + "arguments": [ + { + "id": 62415, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62386, + "src": "2899:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62414, + "name": "_exists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50859, + "src": "2891:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 62416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2891:11:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62421, + "nodeType": "IfStatement", + "src": "2887:26:96", + "trueBody": { + "expression": { + "arguments": [ + { + "id": 62418, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62386, + "src": "2910:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62417, + "name": "_burn", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 63450 + ], + "referencedDeclaration": 63450, + "src": "2904:5:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 62419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2904:9:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62420, + "nodeType": "ExpressionStatement", + "src": "2904:9:96" + } + }, + { + "expression": { + "arguments": [ + { + "id": 62423, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62377, + "src": "2925:5:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 62424, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62386, + "src": "2932:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62422, + "name": "_mint", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 62099 + ], + "referencedDeclaration": 62099, + "src": "2919:5:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 62425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2919:16:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62426, + "nodeType": "ExpressionStatement", + "src": "2919:16:96" + }, + { + "expression": { + "id": 62438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62427, + "name": "expiryTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62384, + "src": "2942:10:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 62432, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "2993:5:96", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 62433, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2999:9:96", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "2993:15:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62434, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62379, + "src": "3010:8:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 62435, + "name": "MAX_EXPIRY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62209, + "src": "3020:10:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 62430, + "name": "LibSafeRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67283, + "src": "2962:12:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibSafeRange_$67283_$", + "typeString": "type(library LibSafeRange)" + } + }, + "id": 62431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2975:17:96", + "memberName": "addWithUpperbound", + "nodeType": "MemberAccess", + "referencedDeclaration": 67282, + "src": "2962:30:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 62436, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2962:69:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62429, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2955:6:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 62428, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2955:6:96", + "typeDescriptions": {} + } + }, + "id": 62437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2955:77:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "2942:90:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 62439, + "nodeType": "ExpressionStatement", + "src": "2942:90:96" + }, + { + "expression": { + "arguments": [ + { + "id": 62441, + "name": "parentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62371, + "src": "3058:8:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62442, + "name": "expiryTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62384, + "src": "3068:10:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 62440, + "name": "_requireValidExpiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63270, + "src": "3038:19:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint64_$returns$__$", + "typeString": "function (uint256,uint64) view" + } + }, + "id": 62443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3038:41:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62444, + "nodeType": "ExpressionStatement", + "src": "3038:41:96" + }, + { + "assignments": [ + 62447 + ], + "declarations": [ + { + "constant": false, + "id": 62447, + "mutability": "mutable", + "name": "record", + "nameLocation": "3099:6:96", + "nodeType": "VariableDeclaration", + "scope": 62506, + "src": "3085:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 62446, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62445, + "name": "Record", + "nameLocations": [ + "3085:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "3085:6:96" + }, + "referencedDeclaration": 65485, + "src": "3085:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "id": 62448, + "nodeType": "VariableDeclarationStatement", + "src": "3085:20:96" + }, + { + "expression": { + "id": 62462, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 62449, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62447, + "src": "3165:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62451, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3172:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "3165:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 62453, + "name": "resolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62375, + "src": "3210:8:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 62454, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62377, + "src": "3227:5:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 62455, + "name": "expiryTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62384, + "src": "3242:10:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "expression": { + "expression": { + "baseExpression": { + "id": 62456, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "3265:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62458, + "indexExpression": { + "id": 62457, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62386, + "src": "3275:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3265:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62459, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3279:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "3265:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 62460, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3283:9:96", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 65477, + "src": "3265:27:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 62452, + "name": "MutableRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65478, + "src": "3184:13:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_MutableRecord_$65478_storage_ptr_$", + "typeString": "type(struct INSUnified.MutableRecord storage pointer)" + } + }, + "id": 62461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "3200:8:96", + "3220:5:96", + "3234:6:96", + "3254:9:96" + ], + "names": [ + "resolver", + "owner", + "expiry", + "protected" + ], + "nodeType": "FunctionCall", + "src": "3184:111:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "src": "3165:130:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62463, + "nodeType": "ExpressionStatement", + "src": "3165:130:96" + }, + { + "expression": { + "id": 62478, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 62464, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62447, + "src": "3301:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62466, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3308:5:96", + "memberName": "immut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65481, + "src": "3301:12:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_memory_ptr", + "typeString": "struct INSUnified.ImmutableRecord memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "id": 62474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 62468, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "3341:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62470, + "indexExpression": { + "id": 62469, + "name": "parentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62371, + "src": "3351:8:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3341:19:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62471, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3361:5:96", + "memberName": "immut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65481, + "src": "3341:25:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage", + "typeString": "struct INSUnified.ImmutableRecord storage ref" + } + }, + "id": 62472, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3367:5:96", + "memberName": "depth", + "nodeType": "MemberAccess", + "referencedDeclaration": 65463, + "src": "3341:31:96", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "hexValue": "31", + "id": 62473, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3375:1:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "3341:35:96", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + { + "id": 62475, + "name": "parentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62371, + "src": "3388:8:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62476, + "name": "label", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62373, + "src": "3405:5:96", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + ], + "id": 62467, + "name": "ImmutableRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65468, + "src": "3316:15:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_ImmutableRecord_$65468_storage_ptr_$", + "typeString": "type(struct INSUnified.ImmutableRecord storage pointer)" + } + }, + "id": 62477, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "structConstructorCall", + "lValueRequested": false, + "nameLocations": [ + "3334:5:96", + "3378:8:96", + "3398:5:96" + ], + "names": [ + "depth", + "parentId", + "label" + ], + "nodeType": "FunctionCall", + "src": "3316:97:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_memory_ptr", + "typeString": "struct INSUnified.ImmutableRecord memory" + } + }, + "src": "3301:112:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_memory_ptr", + "typeString": "struct INSUnified.ImmutableRecord memory" + } + }, + "id": 62479, + "nodeType": "ExpressionStatement", + "src": "3301:112:96" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 62489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 62483, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 62480, + "name": "parentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62371, + "src": "3480:8:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "expression": { + "id": 62481, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66739, + "src": "3492:12:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$66739_$", + "typeString": "type(library LibRNSDomain)" + } + }, + "id": 62482, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3505:15:96", + "memberName": "ADDR_REVERSE_ID", + "nodeType": "MemberAccess", + "referencedDeclaration": 66706, + "src": "3492:28:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3480:40:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "id": 62488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 62484, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62447, + "src": "3524:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62485, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3531:5:96", + "memberName": "immut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65481, + "src": "3524:12:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_memory_ptr", + "typeString": "struct INSUnified.ImmutableRecord memory" + } + }, + "id": 62486, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3537:5:96", + "memberName": "depth", + "nodeType": "MemberAccess", + "referencedDeclaration": 65463, + "src": "3524:18:96", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "hexValue": "33", + "id": 62487, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3546:1:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "src": "3524:23:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "3480:67:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62493, + "nodeType": "IfStatement", + "src": "3476:107:96", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 62490, + "name": "ThirdLevelDomainUnallowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65436, + "src": "3556:25:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 62491, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3556:27:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62492, + "nodeType": "RevertStatement", + "src": "3549:34:96" + } + }, + { + "expression": { + "id": 62498, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 62494, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "3590:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62496, + "indexExpression": { + "id": 62495, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62386, + "src": "3600:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "3590:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62497, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62447, + "src": "3606:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "src": "3590:22:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62499, + "nodeType": "ExpressionStatement", + "src": "3590:22:96" + }, + { + "eventCall": { + "arguments": [ + { + "id": 62501, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62386, + "src": "3637:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62502, + "name": "ALL_FIELDS_INDICATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 70111, + "src": "3641:20:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + { + "id": 62503, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62447, + "src": "3663:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + ], + "id": 62500, + "name": "RecordUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65510, + "src": "3623:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_struct$_Record_$65485_memory_ptr_$returns$__$", + "typeString": "function (uint256,ModifyingIndicator,struct INSUnified.Record memory)" + } + }, + "id": 62504, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3623:47:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62505, + "nodeType": "EmitStatement", + "src": "3618:52:96" + } + ] + }, + "baseFunctions": [ + 65592 + ], + "documentation": { + "id": 62369, + "nodeType": "StructuredDocumentation", + "src": "2504:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "0570891f", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 62382, + "kind": "modifierInvocation", + "modifierName": { + "id": 62381, + "name": "whenNotPaused", + "nameLocations": [ + "2655:13:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50275, + "src": "2655:13:96" + }, + "nodeType": "ModifierInvocation", + "src": "2655:13:96" + } + ], + "name": "mint", + "nameLocation": "2542:4:96", + "parameters": { + "id": 62380, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62371, + "mutability": "mutable", + "name": "parentId", + "nameLocation": "2555:8:96", + "nodeType": "VariableDeclaration", + "scope": 62507, + "src": "2547:16:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2547:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62373, + "mutability": "mutable", + "name": "label", + "nameLocation": "2581:5:96", + "nodeType": "VariableDeclaration", + "scope": 62507, + "src": "2565:21:96", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string" + }, + "typeName": { + "id": 62372, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2565:6:96", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62375, + "mutability": "mutable", + "name": "resolver", + "nameLocation": "2596:8:96", + "nodeType": "VariableDeclaration", + "scope": 62507, + "src": "2588:16:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62374, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2588:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62377, + "mutability": "mutable", + "name": "owner", + "nameLocation": "2614:5:96", + "nodeType": "VariableDeclaration", + "scope": 62507, + "src": "2606:13:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62376, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2606:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62379, + "mutability": "mutable", + "name": "duration", + "nameLocation": "2628:8:96", + "nodeType": "VariableDeclaration", + "scope": 62507, + "src": "2621:15:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62378, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2621:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "2546:91:96" + }, + "returnParameters": { + "id": 62387, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62384, + "mutability": "mutable", + "name": "expiryTime", + "nameLocation": "2689:10:96", + "nodeType": "VariableDeclaration", + "scope": 62507, + "src": "2682:17:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62383, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "2682:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62386, + "mutability": "mutable", + "name": "id", + "nameLocation": "2709:2:96", + "nodeType": "VariableDeclaration", + "scope": 62507, + "src": "2701:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62385, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2701:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2681:31:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62522, + "nodeType": "FunctionDefinition", + "src": "3708:108:96", + "nodes": [], + "body": { + "id": 62521, + "nodeType": "Block", + "src": "3782:34:96", + "nodes": [], + "statements": [ + { + "expression": { + "id": 62519, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62515, + "name": "hashed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62513, + "src": "3788:6:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 62516, + "name": "str", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62510, + "src": "3797:3:96", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "id": 62517, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3801:8:96", + "memberName": "namehash", + "nodeType": "MemberAccess", + "referencedDeclaration": 66738, + "src": "3797:12:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$attached_to$_t_string_memory_ptr_$", + "typeString": "function (string memory) pure returns (bytes32)" + } + }, + "id": 62518, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3797:14:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "3788:23:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "id": 62520, + "nodeType": "ExpressionStatement", + "src": "3788:23:96" + } + ] + }, + "baseFunctions": [ + 65542 + ], + "documentation": { + "id": 62508, + "nodeType": "StructuredDocumentation", + "src": "3679:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "09879962", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "namehash", + "nameLocation": "3717:8:96", + "parameters": { + "id": 62511, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62510, + "mutability": "mutable", + "name": "str", + "nameLocation": "3740:3:96", + "nodeType": "VariableDeclaration", + "scope": 62522, + "src": "3726:17:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 62509, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "3726:6:96", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "3725:19:96" + }, + "returnParameters": { + "id": 62514, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62513, + "mutability": "mutable", + "name": "hashed", + "nameLocation": "3774:6:96", + "nodeType": "VariableDeclaration", + "scope": 62522, + "src": "3766:14:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 62512, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3766:7:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3765:16:96" + }, + "scope": 63451, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 62558, + "nodeType": "FunctionDefinition", + "src": "3849:182:96", + "nodes": [], + "body": { + "id": 62557, + "nodeType": "Block", + "src": "3925:106:96", + "nodes": [], + "statements": [ + { + "expression": { + "id": 62535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62531, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62529, + "src": "3931:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 62532, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "3940:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62534, + "indexExpression": { + "id": 62533, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62525, + "src": "3950:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "3940:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "src": "3931:22:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62536, + "nodeType": "ExpressionStatement", + "src": "3931:22:96" + }, + { + "expression": { + "id": 62545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 62537, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62529, + "src": "3959:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62540, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3966:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "3959:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62541, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "3970:5:96", + "memberName": "owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 65473, + "src": "3959:16:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 62543, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62525, + "src": "3986:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62542, + "name": "ownerOf", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 63096 + ], + "referencedDeclaration": 63096, + "src": "3978:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$", + "typeString": "function (uint256) view returns (address)" + } + }, + "id": 62544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3978:11:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "3959:30:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 62546, + "nodeType": "ExpressionStatement", + "src": "3959:30:96" + }, + { + "expression": { + "id": 62555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 62547, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62529, + "src": "3995:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62550, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4002:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "3995:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62551, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4006:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "3995:17:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 62553, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62525, + "src": "4023:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62552, + "name": "_expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63160, + "src": "4015:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$", + "typeString": "function (uint256) view returns (uint64)" + } + }, + "id": 62554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4015:11:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "3995:31:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 62556, + "nodeType": "ExpressionStatement", + "src": "3995:31:96" + } + ] + }, + "baseFunctions": [ + 65601 + ], + "documentation": { + "id": 62523, + "nodeType": "StructuredDocumentation", + "src": "3820:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "03e9e609", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRecord", + "nameLocation": "3858:9:96", + "parameters": { + "id": 62526, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62525, + "mutability": "mutable", + "name": "id", + "nameLocation": "3876:2:96", + "nodeType": "VariableDeclaration", + "scope": 62558, + "src": "3868:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62524, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3868:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3867:12:96" + }, + "returnParameters": { + "id": 62530, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62529, + "mutability": "mutable", + "name": "record", + "nameLocation": "3917:6:96", + "nodeType": "VariableDeclaration", + "scope": 62558, + "src": "3903:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 62528, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62527, + "name": "Record", + "nameLocations": [ + "3903:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "3903:6:96" + }, + "referencedDeclaration": 65485, + "src": "3903:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "src": "3902:22:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 62619, + "nodeType": "FunctionDefinition", + "src": "4064:376:96", + "nodes": [], + "body": { + "id": 62618, + "nodeType": "Block", + "src": "4140:300:96", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 62568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 62566, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62561, + "src": "4150:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 62567, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4156:1:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4150:7:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62571, + "nodeType": "IfStatement", + "src": "4146:22:96", + "trueBody": { + "expression": { + "hexValue": "", + "id": 62569, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4166:2:96", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + }, + "functionReturnParameters": 62565, + "id": 62570, + "nodeType": "Return", + "src": "4159:9:96" + } + }, + { + "assignments": [ + 62574 + ], + "declarations": [ + { + "constant": false, + "id": 62574, + "mutability": "mutable", + "name": "sRecord", + "nameLocation": "4199:7:96", + "nodeType": "VariableDeclaration", + "scope": 62618, + "src": "4175:31:96", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage_ptr", + "typeString": "struct INSUnified.ImmutableRecord" + }, + "typeName": { + "id": 62573, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62572, + "name": "ImmutableRecord", + "nameLocations": [ + "4175:15:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65468, + "src": "4175:15:96" + }, + "referencedDeclaration": 65468, + "src": "4175:15:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage_ptr", + "typeString": "struct INSUnified.ImmutableRecord" + } + }, + "visibility": "internal" + } + ], + "id": 62579, + "initialValue": { + "expression": { + "baseExpression": { + "id": 62575, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "4209:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62577, + "indexExpression": { + "id": 62576, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62561, + "src": "4219:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4209:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62578, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4223:5:96", + "memberName": "immut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65481, + "src": "4209:19:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage", + "typeString": "struct INSUnified.ImmutableRecord storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4175:53:96" + }, + { + "expression": { + "id": 62583, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62580, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62564, + "src": "4234:6:96", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 62581, + "name": "sRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62574, + "src": "4243:7:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage_ptr", + "typeString": "struct INSUnified.ImmutableRecord storage pointer" + } + }, + "id": 62582, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4251:5:96", + "memberName": "label", + "nodeType": "MemberAccess", + "referencedDeclaration": 65467, + "src": "4243:13:96", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + }, + "src": "4234:22:96", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "id": 62584, + "nodeType": "ExpressionStatement", + "src": "4234:22:96" + }, + { + "expression": { + "id": 62588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62585, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62561, + "src": "4262:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 62586, + "name": "sRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62574, + "src": "4267:7:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage_ptr", + "typeString": "struct INSUnified.ImmutableRecord storage pointer" + } + }, + "id": 62587, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4275:8:96", + "memberName": "parentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 65465, + "src": "4267:16:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4262:21:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 62589, + "nodeType": "ExpressionStatement", + "src": "4262:21:96" + }, + { + "body": { + "id": 62616, + "nodeType": "Block", + "src": "4305:131:96", + "statements": [ + { + "expression": { + "id": 62598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62593, + "name": "sRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62574, + "src": "4313:7:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage_ptr", + "typeString": "struct INSUnified.ImmutableRecord storage pointer" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "baseExpression": { + "id": 62594, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "4323:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62596, + "indexExpression": { + "id": 62595, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62561, + "src": "4333:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4323:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62597, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4337:5:96", + "memberName": "immut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65481, + "src": "4323:19:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage", + "typeString": "struct INSUnified.ImmutableRecord storage ref" + } + }, + "src": "4313:29:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage_ptr", + "typeString": "struct INSUnified.ImmutableRecord storage pointer" + } + }, + "id": 62599, + "nodeType": "ExpressionStatement", + "src": "4313:29:96" + }, + { + "expression": { + "id": 62609, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62600, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62564, + "src": "4350:6:96", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 62604, + "name": "domain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62564, + "src": "4373:6:96", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "hexValue": "2e", + "id": 62605, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4381:3:96", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf", + "typeString": "literal_string \".\"" + }, + "value": "." + }, + { + "expression": { + "id": 62606, + "name": "sRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62574, + "src": "4386:7:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage_ptr", + "typeString": "struct INSUnified.ImmutableRecord storage pointer" + } + }, + "id": 62607, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4394:5:96", + "memberName": "label", + "nodeType": "MemberAccess", + "referencedDeclaration": 65467, + "src": "4386:13:96", + "typeDescriptions": { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf", + "typeString": "literal_string \".\"" + }, + { + "typeIdentifier": "t_string_storage", + "typeString": "string storage ref" + } + ], + "expression": { + "id": 62602, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4359:6:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 62601, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4359:6:96", + "typeDescriptions": {} + } + }, + "id": 62603, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4366:6:96", + "memberName": "concat", + "nodeType": "MemberAccess", + "src": "4359:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$", + "typeString": "function () pure returns (string memory)" + } + }, + "id": 62608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4359:41:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "src": "4350:50:96", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "id": 62610, + "nodeType": "ExpressionStatement", + "src": "4350:50:96" + }, + { + "expression": { + "id": 62614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62611, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62561, + "src": "4408:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 62612, + "name": "sRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62574, + "src": "4413:7:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage_ptr", + "typeString": "struct INSUnified.ImmutableRecord storage pointer" + } + }, + "id": 62613, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4421:8:96", + "memberName": "parentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 65465, + "src": "4413:16:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4408:21:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 62615, + "nodeType": "ExpressionStatement", + "src": "4408:21:96" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 62592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 62590, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62561, + "src": "4296:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 62591, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4302:1:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "4296:7:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62617, + "nodeType": "WhileStatement", + "src": "4289:147:96" + } + ] + }, + "baseFunctions": [ + 65609 + ], + "documentation": { + "id": 62559, + "nodeType": "StructuredDocumentation", + "src": "4035:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "1a7a98e2", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDomain", + "nameLocation": "4073:9:96", + "parameters": { + "id": 62562, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62561, + "mutability": "mutable", + "name": "id", + "nameLocation": "4091:2:96", + "nodeType": "VariableDeclaration", + "scope": 62619, + "src": "4083:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62560, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4083:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4082:12:96" + }, + "returnParameters": { + "id": 62565, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62564, + "mutability": "mutable", + "name": "domain", + "nameLocation": "4132:6:96", + "nodeType": "VariableDeclaration", + "scope": 62619, + "src": "4118:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 62563, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4118:6:96", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "4117:22:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 62648, + "nodeType": "FunctionDefinition", + "src": "4473:198:96", + "nodes": [], + "body": { + "id": 62647, + "nodeType": "Block", + "src": "4607:64:96", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "expression": { + "baseExpression": { + "id": 62637, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "4627:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62639, + "indexExpression": { + "id": 62638, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62622, + "src": "4637:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4627:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62640, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4641:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "4627:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 62641, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4645:5:96", + "memberName": "owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 65473, + "src": "4627:23:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 62642, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62624, + "src": "4652:5:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 62643, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62622, + "src": "4659:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "", + "id": 62644, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4663:2:96", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "id": 62636, + "name": "_safeTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50828, + "src": "4613:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,address,uint256,bytes memory)" + } + }, + "id": 62645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4613:53:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62646, + "nodeType": "ExpressionStatement", + "src": "4613:53:96" + } + ] + }, + "baseFunctions": [ + 65644 + ], + "documentation": { + "id": 62620, + "nodeType": "StructuredDocumentation", + "src": "4444:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "28ed4f6c", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 62627, + "kind": "modifierInvocation", + "modifierName": { + "id": 62626, + "name": "whenNotPaused", + "nameLocations": [ + "4534:13:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50275, + "src": "4534:13:96" + }, + "nodeType": "ModifierInvocation", + "src": "4534:13:96" + }, + { + "arguments": [ + { + "id": 62629, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62622, + "src": "4567:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 62630, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "4571:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 62631, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "4586:5:96", + "memberName": "Owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 66672, + "src": "4571:20:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 62632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4592:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "4571:30:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 62633, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4571:32:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "id": 62634, + "kind": "modifierInvocation", + "modifierName": { + "id": 62628, + "name": "onlyAuthorized", + "nameLocations": [ + "4552:14:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 62236, + "src": "4552:14:96" + }, + "nodeType": "ModifierInvocation", + "src": "4552:52:96" + } + ], + "name": "reclaim", + "nameLocation": "4482:7:96", + "parameters": { + "id": 62625, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62622, + "mutability": "mutable", + "name": "id", + "nameLocation": "4498:2:96", + "nodeType": "VariableDeclaration", + "scope": 62648, + "src": "4490:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62621, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4490:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62624, + "mutability": "mutable", + "name": "owner", + "nameLocation": "4510:5:96", + "nodeType": "VariableDeclaration", + "scope": 62648, + "src": "4502:13:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62623, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4502:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4489:27:96" + }, + "returnParameters": { + "id": 62635, + "nodeType": "ParameterList", + "parameters": [], + "src": "4607:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62710, + "nodeType": "FunctionDefinition", + "src": "4704:402:96", + "nodes": [], + "body": { + "id": 62709, + "nodeType": "Block", + "src": "4821:285:96", + "nodes": [], + "statements": [ + { + "assignments": [ + 62665 + ], + "declarations": [ + { + "constant": false, + "id": 62665, + "mutability": "mutable", + "name": "record", + "nameLocation": "4841:6:96", + "nodeType": "VariableDeclaration", + "scope": 62709, + "src": "4827:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 62664, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62663, + "name": "Record", + "nameLocations": [ + "4827:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "4827:6:96" + }, + "referencedDeclaration": 65485, + "src": "4827:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "id": 62666, + "nodeType": "VariableDeclarationStatement", + "src": "4827:20:96" + }, + { + "expression": { + "id": 62685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 62667, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62665, + "src": "4853:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62670, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4860:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "4853:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62671, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4864:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "4853:17:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "expression": { + "baseExpression": { + "id": 62676, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "4911:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62678, + "indexExpression": { + "id": 62677, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62651, + "src": "4921:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4911:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62679, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4925:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "4911:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 62680, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4929:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "4911:24:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 62681, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62653, + "src": "4937:8:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 62682, + "name": "MAX_EXPIRY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62209, + "src": "4947:10:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 62674, + "name": "LibSafeRange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67283, + "src": "4880:12:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibSafeRange_$67283_$", + "typeString": "type(library LibSafeRange)" + } + }, + "id": 62675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4893:17:96", + "memberName": "addWithUpperbound", + "nodeType": "MemberAccess", + "referencedDeclaration": 67282, + "src": "4880:30:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (uint256,uint256,uint256) pure returns (uint256)" + } + }, + "id": 62683, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4880:78:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62673, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4873:6:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint64_$", + "typeString": "type(uint64)" + }, + "typeName": { + "id": 62672, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4873:6:96", + "typeDescriptions": {} + } + }, + "id": 62684, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4873:86:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "4853:106:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 62686, + "nodeType": "ExpressionStatement", + "src": "4853:106:96" + }, + { + "expression": { + "arguments": [ + { + "id": 62688, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62651, + "src": "4976:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 62689, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62665, + "src": "4980:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62690, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4987:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "4980:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62691, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4991:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "4980:17:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 62687, + "name": "_setExpiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63322, + "src": "4965:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint64_$returns$__$", + "typeString": "function (uint256,uint64)" + } + }, + "id": 62692, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4965:33:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62693, + "nodeType": "ExpressionStatement", + "src": "4965:33:96" + }, + { + "expression": { + "id": 62698, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62694, + "name": "expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62661, + "src": "5004:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "id": 62695, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62665, + "src": "5013:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62696, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5020:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "5013:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62697, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5024:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "5013:17:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "5004:26:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 62699, + "nodeType": "ExpressionStatement", + "src": "5004:26:96" + }, + { + "eventCall": { + "arguments": [ + { + "id": 62701, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62651, + "src": "5055:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 62702, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "5059:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 62703, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5074:6:96", + "memberName": "Expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 66673, + "src": "5059:21:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 62704, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5081:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "5059:31:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 62705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5059:33:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + { + "id": 62706, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62665, + "src": "5094:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + ], + "id": 62700, + "name": "RecordUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65510, + "src": "5041:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_struct$_Record_$65485_memory_ptr_$returns$__$", + "typeString": "function (uint256,ModifyingIndicator,struct INSUnified.Record memory)" + } + }, + "id": 62707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5041:60:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62708, + "nodeType": "EmitStatement", + "src": "5036:65:96" + } + ] + }, + "baseFunctions": [ + 65654 + ], + "documentation": { + "id": 62649, + "nodeType": "StructuredDocumentation", + "src": "4675:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "5569f33d", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 62656, + "kind": "modifierInvocation", + "modifierName": { + "id": 62655, + "name": "whenNotPaused", + "nameLocations": [ + "4757:13:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50275, + "src": "4757:13:96" + }, + "nodeType": "ModifierInvocation", + "src": "4757:13:96" + }, + { + "arguments": [ + { + "id": 62658, + "name": "CONTROLLER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62192, + "src": "4780:15:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 62659, + "kind": "modifierInvocation", + "modifierName": { + "id": 62657, + "name": "onlyRole", + "nameLocations": [ + "4771:8:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "4771:8:96" + }, + "nodeType": "ModifierInvocation", + "src": "4771:25:96" + } + ], + "name": "renew", + "nameLocation": "4713:5:96", + "parameters": { + "id": 62654, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62651, + "mutability": "mutable", + "name": "id", + "nameLocation": "4727:2:96", + "nodeType": "VariableDeclaration", + "scope": 62710, + "src": "4719:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62650, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4719:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62653, + "mutability": "mutable", + "name": "duration", + "nameLocation": "4738:8:96", + "nodeType": "VariableDeclaration", + "scope": 62710, + "src": "4731:15:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62652, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4731:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "4718:29:96" + }, + "returnParameters": { + "id": 62662, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62661, + "mutability": "mutable", + "name": "expiry", + "nameLocation": "4813:6:96", + "nodeType": "VariableDeclaration", + "scope": 62710, + "src": "4806:13:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62660, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4806:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "4805:15:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62746, + "nodeType": "FunctionDefinition", + "src": "5139:245:96", + "nodes": [], + "body": { + "id": 62745, + "nodeType": "Block", + "src": "5234:150:96", + "nodes": [], + "statements": [ + { + "assignments": [ + 62725 + ], + "declarations": [ + { + "constant": false, + "id": 62725, + "mutability": "mutable", + "name": "record", + "nameLocation": "5254:6:96", + "nodeType": "VariableDeclaration", + "scope": 62745, + "src": "5240:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 62724, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62723, + "name": "Record", + "nameLocations": [ + "5240:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "5240:6:96" + }, + "referencedDeclaration": 65485, + "src": "5240:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "id": 62726, + "nodeType": "VariableDeclarationStatement", + "src": "5240:20:96" + }, + { + "expression": { + "arguments": [ + { + "id": 62728, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62713, + "src": "5277:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 62729, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62725, + "src": "5281:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62730, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5288:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "5281:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62731, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "5292:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "5281:17:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62732, + "name": "expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62715, + "src": "5301:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "5281:26:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 62727, + "name": "_setExpiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63322, + "src": "5266:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint64_$returns$__$", + "typeString": "function (uint256,uint64)" + } + }, + "id": 62734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5266:42:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62735, + "nodeType": "ExpressionStatement", + "src": "5266:42:96" + }, + { + "eventCall": { + "arguments": [ + { + "id": 62737, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62713, + "src": "5333:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 62738, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "5337:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 62739, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5352:6:96", + "memberName": "Expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 66673, + "src": "5337:21:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 62740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5359:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "5337:31:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 62741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5337:33:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + { + "id": 62742, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62725, + "src": "5372:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + ], + "id": 62736, + "name": "RecordUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65510, + "src": "5319:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_struct$_Record_$65485_memory_ptr_$returns$__$", + "typeString": "function (uint256,ModifyingIndicator,struct INSUnified.Record memory)" + } + }, + "id": 62743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5319:60:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62744, + "nodeType": "EmitStatement", + "src": "5314:65:96" + } + ] + }, + "baseFunctions": [ + 65662 + ], + "documentation": { + "id": 62711, + "nodeType": "StructuredDocumentation", + "src": "5110:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "fc284d11", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 62718, + "kind": "modifierInvocation", + "modifierName": { + "id": 62717, + "name": "whenNotPaused", + "nameLocations": [ + "5194:13:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50275, + "src": "5194:13:96" + }, + "nodeType": "ModifierInvocation", + "src": "5194:13:96" + }, + { + "arguments": [ + { + "id": 62720, + "name": "CONTROLLER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62192, + "src": "5217:15:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 62721, + "kind": "modifierInvocation", + "modifierName": { + "id": 62719, + "name": "onlyRole", + "nameLocations": [ + "5208:8:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "5208:8:96" + }, + "nodeType": "ModifierInvocation", + "src": "5208:25:96" + } + ], + "name": "setExpiry", + "nameLocation": "5148:9:96", + "parameters": { + "id": 62716, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62713, + "mutability": "mutable", + "name": "id", + "nameLocation": "5166:2:96", + "nodeType": "VariableDeclaration", + "scope": 62746, + "src": "5158:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62712, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5158:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62715, + "mutability": "mutable", + "name": "expiry", + "nameLocation": "5177:6:96", + "nodeType": "VariableDeclaration", + "scope": 62746, + "src": "5170:13:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62714, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "5170:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "5157:27:96" + }, + "returnParameters": { + "id": 62722, + "nodeType": "ParameterList", + "parameters": [], + "src": "5234:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62824, + "nodeType": "FunctionDefinition", + "src": "5417:533:96", + "nodes": [], + "body": { + "id": 62823, + "nodeType": "Block", + "src": "5525:425:96", + "nodes": [], + "statements": [ + { + "assignments": [ + 62760 + ], + "declarations": [ + { + "constant": false, + "id": 62760, + "mutability": "mutable", + "name": "indicator", + "nameLocation": "5550:9:96", + "nodeType": "VariableDeclaration", + "scope": 62823, + "src": "5531:28:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + "typeName": { + "id": 62759, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62758, + "name": "ModifyingIndicator", + "nameLocations": [ + "5531:18:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 70055, + "src": "5531:18:96" + }, + "referencedDeclaration": 70055, + "src": "5531:18:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "visibility": "internal" + } + ], + "id": 62765, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 62761, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "5562:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 62762, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5577:9:96", + "memberName": "Protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 66674, + "src": "5562:24:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 62763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5587:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "5562:34:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 62764, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5562:36:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5531:67:96" + }, + { + "assignments": [ + 62767 + ], + "declarations": [ + { + "constant": false, + "id": 62767, + "mutability": "mutable", + "name": "id", + "nameLocation": "5612:2:96", + "nodeType": "VariableDeclaration", + "scope": 62823, + "src": "5604:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62766, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5604:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 62768, + "nodeType": "VariableDeclarationStatement", + "src": "5604:10:96" + }, + { + "assignments": [ + 62771 + ], + "declarations": [ + { + "constant": false, + "id": 62771, + "mutability": "mutable", + "name": "record", + "nameLocation": "5634:6:96", + "nodeType": "VariableDeclaration", + "scope": 62823, + "src": "5620:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 62770, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62769, + "name": "Record", + "nameLocations": [ + "5620:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "5620:6:96" + }, + "referencedDeclaration": 65485, + "src": "5620:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "id": 62772, + "nodeType": "VariableDeclarationStatement", + "src": "5620:20:96" + }, + { + "expression": { + "id": 62779, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 62773, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62771, + "src": "5646:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62776, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5653:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "5646:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62777, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "5657:9:96", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 65477, + "src": "5646:20:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62778, + "name": "protected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62752, + "src": "5669:9:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5646:32:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62780, + "nodeType": "ExpressionStatement", + "src": "5646:32:96" + }, + { + "body": { + "id": 62821, + "nodeType": "Block", + "src": "5718:228:96", + "statements": [ + { + "expression": { + "id": 62792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62788, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62767, + "src": "5726:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 62789, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62750, + "src": "5731:3:96", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 62791, + "indexExpression": { + "id": 62790, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62782, + "src": "5735:1:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5731:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5726:11:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 62793, + "nodeType": "ExpressionStatement", + "src": "5726:11:96" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 62800, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 62794, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "5749:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62796, + "indexExpression": { + "id": 62795, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62767, + "src": "5759:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5749:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62797, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5763:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "5749:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 62798, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5767:9:96", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 65477, + "src": "5749:27:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 62799, + "name": "protected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62752, + "src": "5780:9:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5749:40:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62816, + "nodeType": "IfStatement", + "src": "5745:155:96", + "trueBody": { + "id": 62815, + "nodeType": "Block", + "src": "5791:109:96", + "statements": [ + { + "expression": { + "id": 62807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "baseExpression": { + "id": 62801, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "5801:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62803, + "indexExpression": { + "id": 62802, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62767, + "src": "5811:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5801:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62804, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5815:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "5801:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 62805, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "5819:9:96", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 65477, + "src": "5801:27:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62806, + "name": "protected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62752, + "src": "5831:9:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5801:39:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62808, + "nodeType": "ExpressionStatement", + "src": "5801:39:96" + }, + { + "eventCall": { + "arguments": [ + { + "id": 62810, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62767, + "src": "5869:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62811, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62760, + "src": "5873:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + { + "id": 62812, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62771, + "src": "5884:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + ], + "id": 62809, + "name": "RecordUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65510, + "src": "5855:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_struct$_Record_$65485_memory_ptr_$returns$__$", + "typeString": "function (uint256,ModifyingIndicator,struct INSUnified.Record memory)" + } + }, + "id": 62813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5855:36:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62814, + "nodeType": "EmitStatement", + "src": "5850:41:96" + } + ] + } + }, + { + "id": 62820, + "nodeType": "UncheckedBlock", + "src": "5908:32:96", + "statements": [ + { + "expression": { + "id": 62818, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "5928:3:96", + "subExpression": { + "id": 62817, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62782, + "src": "5930:1:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 62819, + "nodeType": "ExpressionStatement", + "src": "5928:3:96" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 62787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 62784, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62782, + "src": "5701:1:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 62785, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62750, + "src": "5705:3:96", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 62786, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5709:6:96", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5705:10:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5701:14:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62822, + "initializationExpression": { + "assignments": [ + 62782 + ], + "declarations": [ + { + "constant": false, + "id": 62782, + "mutability": "mutable", + "name": "i", + "nameLocation": "5698:1:96", + "nodeType": "VariableDeclaration", + "scope": 62822, + "src": "5690:9:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62781, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5690:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 62783, + "nodeType": "VariableDeclarationStatement", + "src": "5690:9:96" + }, + "nodeType": "ForStatement", + "src": "5685:261:96" + } + ] + }, + "baseFunctions": [ + 65671 + ], + "documentation": { + "id": 62747, + "nodeType": "StructuredDocumentation", + "src": "5388:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "ec63b01f", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 62755, + "name": "PROTECTED_SETTLER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62202, + "src": "5501:22:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 62756, + "kind": "modifierInvocation", + "modifierName": { + "id": 62754, + "name": "onlyRole", + "nameLocations": [ + "5492:8:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48565, + "src": "5492:8:96" + }, + "nodeType": "ModifierInvocation", + "src": "5492:32:96" + } + ], + "name": "bulkSetProtected", + "nameLocation": "5426:16:96", + "parameters": { + "id": 62753, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62750, + "mutability": "mutable", + "name": "ids", + "nameLocation": "5462:3:96", + "nodeType": "VariableDeclaration", + "scope": 62824, + "src": "5443:22:96", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 62748, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5443:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 62749, + "nodeType": "ArrayTypeName", + "src": "5443:9:96", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62752, + "mutability": "mutable", + "name": "protected", + "nameLocation": "5472:9:96", + "nodeType": "VariableDeclaration", + "scope": 62824, + "src": "5467:14:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 62751, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5467:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5442:40:96" + }, + "returnParameters": { + "id": 62757, + "nodeType": "ParameterList", + "parameters": [], + "src": "5525:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62941, + "nodeType": "FunctionDefinition", + "src": "5983:940:96", + "nodes": [], + "body": { + "id": 62940, + "nodeType": "Block", + "src": "6145:778:96", + "nodes": [], + "statements": [ + { + "assignments": [ + 62844 + ], + "declarations": [ + { + "constant": false, + "id": 62844, + "mutability": "mutable", + "name": "record", + "nameLocation": "6165:6:96", + "nodeType": "VariableDeclaration", + "scope": 62940, + "src": "6151:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 62843, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62842, + "name": "Record", + "nameLocations": [ + "6151:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "6151:6:96" + }, + "referencedDeclaration": 65485, + "src": "6151:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "id": 62845, + "nodeType": "VariableDeclarationStatement", + "src": "6151:20:96" + }, + { + "assignments": [ + 62848 + ], + "declarations": [ + { + "constant": false, + "id": 62848, + "mutability": "mutable", + "name": "sMutRecord", + "nameLocation": "6199:10:96", + "nodeType": "VariableDeclaration", + "scope": 62940, + "src": "6177:32:96", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage_ptr", + "typeString": "struct INSUnified.MutableRecord" + }, + "typeName": { + "id": 62847, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62846, + "name": "MutableRecord", + "nameLocations": [ + "6177:13:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65478, + "src": "6177:13:96" + }, + "referencedDeclaration": 65478, + "src": "6177:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage_ptr", + "typeString": "struct INSUnified.MutableRecord" + } + }, + "visibility": "internal" + } + ], + "id": 62853, + "initialValue": { + "expression": { + "baseExpression": { + "id": 62849, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "6212:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62851, + "indexExpression": { + "id": 62850, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62827, + "src": "6222:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6212:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62852, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6226:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "6212:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6177:52:96" + }, + { + "condition": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 62856, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "6257:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 62857, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "6272:9:96", + "memberName": "Protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 66674, + "src": "6257:24:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 62858, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6282:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "6257:34:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 62859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6257:36:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "expression": { + "id": 62854, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62830, + "src": "6240:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "id": 62855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6250:6:96", + "memberName": "hasAny", + "nodeType": "MemberAccess", + "referencedDeclaration": 70269, + "src": "6240:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_ModifyingIndicator_$70055_$", + "typeString": "function (ModifyingIndicator,ModifyingIndicator) pure returns (bool)" + } + }, + "id": 62860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6240:54:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62873, + "nodeType": "IfStatement", + "src": "6236:140:96", + "trueBody": { + "id": 62872, + "nodeType": "Block", + "src": "6296:80:96", + "statements": [ + { + "expression": { + "id": 62870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 62861, + "name": "sMutRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62848, + "src": "6304:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage_ptr", + "typeString": "struct INSUnified.MutableRecord storage pointer" + } + }, + "id": 62863, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6315:9:96", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 65477, + "src": "6304:20:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 62864, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62844, + "src": "6327:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62865, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6334:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "6327:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62866, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6338:9:96", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 65477, + "src": "6327:20:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 62867, + "name": "mutRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62833, + "src": "6350:9:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_calldata_ptr", + "typeString": "struct INSUnified.MutableRecord calldata" + } + }, + "id": 62868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6360:9:96", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 65477, + "src": "6350:19:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6327:42:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "6304:65:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62871, + "nodeType": "ExpressionStatement", + "src": "6304:65:96" + } + ] + } + }, + { + "condition": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 62876, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "6402:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 62877, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "6417:6:96", + "memberName": "Expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 66673, + "src": "6402:21:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 62878, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6424:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "6402:31:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 62879, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6402:33:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "expression": { + "id": 62874, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62830, + "src": "6385:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "id": 62875, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6395:6:96", + "memberName": "hasAny", + "nodeType": "MemberAccess", + "referencedDeclaration": 70269, + "src": "6385:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_ModifyingIndicator_$70055_$", + "typeString": "function (ModifyingIndicator,ModifyingIndicator) pure returns (bool)" + } + }, + "id": 62880, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6385:51:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62892, + "nodeType": "IfStatement", + "src": "6381:124:96", + "trueBody": { + "id": 62891, + "nodeType": "Block", + "src": "6438:67:96", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 62882, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62827, + "src": "6457:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 62883, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62844, + "src": "6461:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62884, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6468:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "6461:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62885, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6472:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "6461:17:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 62886, + "name": "mutRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62833, + "src": "6481:9:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_calldata_ptr", + "typeString": "struct INSUnified.MutableRecord calldata" + } + }, + "id": 62887, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6491:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "6481:16:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "6461:36:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 62881, + "name": "_setExpiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63322, + "src": "6446:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint64_$returns$__$", + "typeString": "function (uint256,uint64)" + } + }, + "id": 62889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6446:52:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62890, + "nodeType": "ExpressionStatement", + "src": "6446:52:96" + } + ] + } + }, + { + "condition": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 62895, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "6531:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 62896, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "6546:8:96", + "memberName": "Resolver", + "nodeType": "MemberAccess", + "referencedDeclaration": 66671, + "src": "6531:23:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 62897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6555:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "6531:33:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 62898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6531:35:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "expression": { + "id": 62893, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62830, + "src": "6514:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "id": 62894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6524:6:96", + "memberName": "hasAny", + "nodeType": "MemberAccess", + "referencedDeclaration": 70269, + "src": "6514:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_ModifyingIndicator_$70055_$", + "typeString": "function (ModifyingIndicator,ModifyingIndicator) pure returns (bool)" + } + }, + "id": 62899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6514:53:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62912, + "nodeType": "IfStatement", + "src": "6510:136:96", + "trueBody": { + "id": 62911, + "nodeType": "Block", + "src": "6569:77:96", + "statements": [ + { + "expression": { + "id": 62909, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "id": 62900, + "name": "sMutRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62848, + "src": "6577:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage_ptr", + "typeString": "struct INSUnified.MutableRecord storage pointer" + } + }, + "id": 62902, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6588:8:96", + "memberName": "resolver", + "nodeType": "MemberAccess", + "referencedDeclaration": 65471, + "src": "6577:19:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 62903, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62844, + "src": "6599:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 62904, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6606:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "6599:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 62905, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "6610:8:96", + "memberName": "resolver", + "nodeType": "MemberAccess", + "referencedDeclaration": 65471, + "src": "6599:19:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 62906, + "name": "mutRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62833, + "src": "6621:9:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_calldata_ptr", + "typeString": "struct INSUnified.MutableRecord calldata" + } + }, + "id": 62907, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6631:8:96", + "memberName": "resolver", + "nodeType": "MemberAccess", + "referencedDeclaration": 65471, + "src": "6621:18:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6599:40:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "6577:62:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 62910, + "nodeType": "ExpressionStatement", + "src": "6577:62:96" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 62914, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62827, + "src": "6670:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62915, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62830, + "src": "6674:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + { + "id": 62916, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62844, + "src": "6685:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + ], + "id": 62913, + "name": "RecordUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65510, + "src": "6656:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_struct$_Record_$65485_memory_ptr_$returns$__$", + "typeString": "function (uint256,ModifyingIndicator,struct INSUnified.Record memory)" + } + }, + "id": 62917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6656:36:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62918, + "nodeType": "EmitStatement", + "src": "6651:41:96" + }, + { + "condition": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 62921, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "6806:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 62922, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "6821:5:96", + "memberName": "Owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 66672, + "src": "6806:20:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 62923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6827:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "6806:30:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 62924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6806:32:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "expression": { + "id": 62919, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62830, + "src": "6789:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "id": 62920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6799:6:96", + "memberName": "hasAny", + "nodeType": "MemberAccess", + "referencedDeclaration": 70269, + "src": "6789:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_ModifyingIndicator_$70055_$", + "typeString": "function (ModifyingIndicator,ModifyingIndicator) pure returns (bool)" + } + }, + "id": 62925, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6789:50:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62939, + "nodeType": "IfStatement", + "src": "6785:134:96", + "trueBody": { + "id": 62938, + "nodeType": "Block", + "src": "6841:78:96", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "expression": { + "baseExpression": { + "id": 62927, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "6863:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62929, + "indexExpression": { + "id": 62928, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62827, + "src": "6873:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "6863:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 62930, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6877:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "6863:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 62931, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6881:5:96", + "memberName": "owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 65473, + "src": "6863:23:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 62932, + "name": "mutRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62833, + "src": "6888:9:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_calldata_ptr", + "typeString": "struct INSUnified.MutableRecord calldata" + } + }, + "id": 62933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6898:5:96", + "memberName": "owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 65473, + "src": "6888:15:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 62934, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62827, + "src": "6905:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "", + "id": 62935, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6909:2:96", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "id": 62926, + "name": "_safeTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50828, + "src": "6849:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,address,uint256,bytes memory)" + } + }, + "id": 62936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6849:63:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62937, + "nodeType": "ExpressionStatement", + "src": "6849:63:96" + } + ] + } + } + ] + }, + "baseFunctions": [ + 65636 + ], + "documentation": { + "id": 62825, + "nodeType": "StructuredDocumentation", + "src": "5954:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "1cfa6ec0", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 62836, + "kind": "modifierInvocation", + "modifierName": { + "id": 62835, + "name": "whenNotPaused", + "nameLocations": [ + "6095:13:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50275, + "src": "6095:13:96" + }, + "nodeType": "ModifierInvocation", + "src": "6095:13:96" + }, + { + "arguments": [ + { + "id": 62838, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62827, + "src": "6128:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62839, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62830, + "src": "6132:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "id": 62840, + "kind": "modifierInvocation", + "modifierName": { + "id": 62837, + "name": "onlyAuthorized", + "nameLocations": [ + "6113:14:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 62236, + "src": "6113:14:96" + }, + "nodeType": "ModifierInvocation", + "src": "6113:29:96" + } + ], + "name": "setRecord", + "nameLocation": "5992:9:96", + "parameters": { + "id": 62834, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62827, + "mutability": "mutable", + "name": "id", + "nameLocation": "6010:2:96", + "nodeType": "VariableDeclaration", + "scope": 62941, + "src": "6002:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62826, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6002:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62830, + "mutability": "mutable", + "name": "indicator", + "nameLocation": "6033:9:96", + "nodeType": "VariableDeclaration", + "scope": 62941, + "src": "6014:28:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + "typeName": { + "id": 62829, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62828, + "name": "ModifyingIndicator", + "nameLocations": [ + "6014:18:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 70055, + "src": "6014:18:96" + }, + "referencedDeclaration": 70055, + "src": "6014:18:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62833, + "mutability": "mutable", + "name": "mutRecord", + "nameLocation": "6067:9:96", + "nodeType": "VariableDeclaration", + "scope": 62941, + "src": "6044:32:96", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_calldata_ptr", + "typeString": "struct INSUnified.MutableRecord" + }, + "typeName": { + "id": 62832, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62831, + "name": "MutableRecord", + "nameLocations": [ + "6044:13:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65478, + "src": "6044:13:96" + }, + "referencedDeclaration": 65478, + "src": "6044:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage_ptr", + "typeString": "struct INSUnified.MutableRecord" + } + }, + "visibility": "internal" + } + ], + "src": "6001:76:96" + }, + "returnParameters": { + "id": 62841, + "nodeType": "ParameterList", + "parameters": [], + "src": "6145:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62965, + "nodeType": "FunctionDefinition", + "src": "6969:182:96", + "nodes": [], + "body": { + "id": 62964, + "nodeType": "Block", + "src": "7077:74:96", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 62955, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "7101:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 62957, + "indexExpression": { + "id": 62956, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62944, + "src": "7111:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7101:18:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + { + "baseExpression": { + "id": 62958, + "name": "nonces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 439, + "src": "7121:6:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", + "typeString": "mapping(uint256 => uint256)" + } + }, + "id": 62960, + "indexExpression": { + "id": 62959, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62944, + "src": "7128:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7121:15:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62961, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62944, + "src": "7138:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 62953, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "7090:3:96", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 62954, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7094:6:96", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "7090:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 62962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7090:56:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 62952, + "id": 62963, + "nodeType": "Return", + "src": "7083:63:96" + } + ] + }, + "baseFunctions": [ + 500 + ], + "documentation": { + "id": 62942, + "nodeType": "StructuredDocumentation", + "src": "6927:39:96", + "text": " @inheritdoc IERC721State" + }, + "functionSelector": "131a7e24", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 62948, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62944, + "src": "7045:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 62949, + "kind": "modifierInvocation", + "modifierName": { + "id": 62947, + "name": "onlyMinted", + "nameLocations": [ + "7034:10:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 61938, + "src": "7034:10:96" + }, + "nodeType": "ModifierInvocation", + "src": "7034:19:96" + } + ], + "name": "stateOf", + "nameLocation": "6978:7:96", + "overrides": { + "id": 62946, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "7025:8:96" + }, + "parameters": { + "id": 62945, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62944, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "6994:7:96", + "nodeType": "VariableDeclaration", + "scope": 62965, + "src": "6986:15:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62943, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6986:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6985:17:96" + }, + "returnParameters": { + "id": 62952, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62951, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 62965, + "src": "7063:12:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 62950, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7063:5:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "7062:14:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": true, + "visibility": "external" + }, + { + "id": 63070, + "nodeType": "FunctionDefinition", + "src": "7184:896:96", + "nodes": [], + "body": { + "id": 63069, + "nodeType": "Block", + "src": "7324:756:96", + "nodes": [], + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 62982, + "name": "IMMUTABLE_FIELDS_INDICATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 70091, + "src": "7351:26:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "expression": { + "id": 62980, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62973, + "src": "7334:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "id": 62981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7344:6:96", + "memberName": "hasAny", + "nodeType": "MemberAccess", + "referencedDeclaration": 70269, + "src": "7334:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_ModifyingIndicator_$70055_$", + "typeString": "function (ModifyingIndicator,ModifyingIndicator) pure returns (bool)" + } + }, + "id": 62983, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7334:44:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 62990, + "nodeType": "IfStatement", + "src": "7330:113:96", + "trueBody": { + "id": 62989, + "nodeType": "Block", + "src": "7380:63:96", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 62984, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7396:5:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "expression": { + "id": 62985, + "name": "CannotSetImmutableField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65451, + "src": "7403:23:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 62986, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7427:8:96", + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "7403:32:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "id": 62987, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7395:41:96", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes4_$", + "typeString": "tuple(bool,bytes4)" + } + }, + "functionReturnParameters": 62979, + "id": 62988, + "nodeType": "Return", + "src": "7388:48:96" + } + ] + } + }, + { + "condition": { + "id": 62994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7452:12:96", + "subExpression": { + "arguments": [ + { + "id": 62992, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62970, + "src": "7461:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62991, + "name": "_exists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50859, + "src": "7453:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 62993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7453:11:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63000, + "nodeType": "IfStatement", + "src": "7448:51:96", + "trueBody": { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 62995, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7474:5:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "expression": { + "id": 62996, + "name": "Unexists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65433, + "src": "7481:8:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 62997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7490:8:96", + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "7481:17:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "id": 62998, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7473:26:96", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes4_$", + "typeString": "tuple(bool,bytes4)" + } + }, + "functionReturnParameters": 62979, + "id": 62999, + "nodeType": "Return", + "src": "7466:33:96" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63013, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 63003, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "7526:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 63004, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7541:9:96", + "memberName": "Protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 66674, + "src": "7526:24:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 63005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7551:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "7526:34:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 63006, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7526:36:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "expression": { + "id": 63001, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62973, + "src": "7509:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "id": 63002, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7519:6:96", + "memberName": "hasAny", + "nodeType": "MemberAccess", + "referencedDeclaration": 70269, + "src": "7509:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_ModifyingIndicator_$70055_$", + "typeString": "function (ModifyingIndicator,ModifyingIndicator) pure returns (bool)" + } + }, + "id": 63007, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7509:54:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 63012, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7567:43:96", + "subExpression": { + "arguments": [ + { + "id": 63009, + "name": "PROTECTED_SETTLER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62202, + "src": "7576:22:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 63010, + "name": "requester", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62968, + "src": "7600:9:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 63008, + "name": "hasRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48606, + "src": "7568:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 63011, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7568:42:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7509:101:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63020, + "nodeType": "IfStatement", + "src": "7505:174:96", + "trueBody": { + "id": 63019, + "nodeType": "Block", + "src": "7612:67:96", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 63014, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7628:5:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "expression": { + "id": 63015, + "name": "MissingProtectedSettlerRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65454, + "src": "7635:27:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7663:8:96", + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "7635:36:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "id": 63017, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7627:45:96", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes4_$", + "typeString": "tuple(bool,bytes4)" + } + }, + "functionReturnParameters": 62979, + "id": 63018, + "nodeType": "Return", + "src": "7620:52:96" + } + ] + } + }, + { + "assignments": [ + 63022 + ], + "declarations": [ + { + "constant": false, + "id": 63022, + "mutability": "mutable", + "name": "hasControllerRole", + "nameLocation": "7689:17:96", + "nodeType": "VariableDeclaration", + "scope": 63069, + "src": "7684:22:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63021, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7684:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 63027, + "initialValue": { + "arguments": [ + { + "id": 63024, + "name": "CONTROLLER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62192, + "src": "7717:15:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 63025, + "name": "requester", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62968, + "src": "7734:9:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 63023, + "name": "hasRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48606, + "src": "7709:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 63026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7709:35:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7684:60:96" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 63030, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "7771:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 63031, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7786:6:96", + "memberName": "Expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 66673, + "src": "7771:21:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 63032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7793:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "7771:31:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 63033, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7771:33:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "expression": { + "id": 63028, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62973, + "src": "7754:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "id": 63029, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7764:6:96", + "memberName": "hasAny", + "nodeType": "MemberAccess", + "referencedDeclaration": 70269, + "src": "7754:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_ModifyingIndicator_$70055_$", + "typeString": "function (ModifyingIndicator,ModifyingIndicator) pure returns (bool)" + } + }, + "id": 63034, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7754:51:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 63036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7809:18:96", + "subExpression": { + "id": 63035, + "name": "hasControllerRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63022, + "src": "7810:17:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7754:73:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63044, + "nodeType": "IfStatement", + "src": "7750:140:96", + "trueBody": { + "id": 63043, + "nodeType": "Block", + "src": "7829:61:96", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 63038, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7845:5:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "expression": { + "id": 63039, + "name": "MissingControllerRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65448, + "src": "7852:21:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63040, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7874:8:96", + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "7852:30:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "id": 63041, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7844:39:96", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes4_$", + "typeString": "tuple(bool,bytes4)" + } + }, + "functionReturnParameters": 62979, + "id": 63042, + "nodeType": "Return", + "src": "7837:46:96" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 63047, + "name": "USER_FIELDS_INDICATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 70099, + "src": "7916:21:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "expression": { + "id": 63045, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62973, + "src": "7899:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "id": 63046, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7909:6:96", + "memberName": "hasAny", + "nodeType": "MemberAccess", + "referencedDeclaration": 70269, + "src": "7899:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_ModifyingIndicator_$70055_$", + "typeString": "function (ModifyingIndicator,ModifyingIndicator) pure returns (bool)" + } + }, + "id": 63048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7899:39:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 63056, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7942:55:96", + "subExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63049, + "name": "hasControllerRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63022, + "src": "7944:17:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "arguments": [ + { + "id": 63051, + "name": "requester", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62968, + "src": "7982:9:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63052, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62970, + "src": "7993:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63050, + "name": "_checkOwnerRules", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63224, + "src": "7965:16:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) view returns (bool)" + } + }, + "id": 63053, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7965:31:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7944:52:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "id": 63055, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "7943:54:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7899:98:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63064, + "nodeType": "IfStatement", + "src": "7895:156:96", + "trueBody": { + "id": 63063, + "nodeType": "Block", + "src": "7999:52:96", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 63058, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8015:5:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "expression": { + "id": 63059, + "name": "Unauthorized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65445, + "src": "8022:12:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63060, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8035:8:96", + "memberName": "selector", + "nodeType": "MemberAccess", + "src": "8022:21:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + } + ], + "id": 63061, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "8014:30:96", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes4_$", + "typeString": "tuple(bool,bytes4)" + } + }, + "functionReturnParameters": 62979, + "id": 63062, + "nodeType": "Return", + "src": "8007:37:96" + } + ] + } + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 63065, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8065:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "hexValue": "307830", + "id": 63066, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8071:3:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + } + ], + "id": 63067, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "8064:11:96", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0)" + } + }, + "functionReturnParameters": 62979, + "id": 63068, + "nodeType": "Return", + "src": "8057:18:96" + } + ] + }, + "baseFunctions": [ + 65624 + ], + "documentation": { + "id": 62966, + "nodeType": "StructuredDocumentation", + "src": "7155:26:96", + "text": "@inheritdoc INSUnified" + }, + "functionSelector": "fd3fa919", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "canSetRecord", + "nameLocation": "7193:12:96", + "parameters": { + "id": 62974, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62968, + "mutability": "mutable", + "name": "requester", + "nameLocation": "7214:9:96", + "nodeType": "VariableDeclaration", + "scope": 63070, + "src": "7206:17:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62967, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7206:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62970, + "mutability": "mutable", + "name": "id", + "nameLocation": "7233:2:96", + "nodeType": "VariableDeclaration", + "scope": 63070, + "src": "7225:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62969, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7225:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62973, + "mutability": "mutable", + "name": "indicator", + "nameLocation": "7256:9:96", + "nodeType": "VariableDeclaration", + "scope": 63070, + "src": "7237:28:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + "typeName": { + "id": 62972, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62971, + "name": "ModifyingIndicator", + "nameLocations": [ + "7237:18:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 70055, + "src": "7237:18:96" + }, + "referencedDeclaration": 70055, + "src": "7237:18:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "visibility": "internal" + } + ], + "src": "7205:61:96" + }, + "returnParameters": { + "id": 62979, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62976, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "7305:7:96", + "nodeType": "VariableDeclaration", + "scope": 63070, + "src": "7300:12:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 62975, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7300:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62978, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63070, + "src": "7314:6:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 62977, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "7314:6:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "src": "7299:22:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 63096, + "nodeType": "FunctionDefinition", + "src": "8122:180:96", + "nodes": [], + "body": { + "id": 63095, + "nodeType": "Block", + "src": "8212:90:96", + "nodes": [], + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 63082, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63073, + "src": "8233:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63081, + "name": "_isExpired", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63136, + "src": "8222:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 63083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8222:19:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63089, + "nodeType": "IfStatement", + "src": "8218:44:96", + "trueBody": { + "expression": { + "arguments": [ + { + "hexValue": "307830", + "id": 63086, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8258:3:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0x0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 63085, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8250:7:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 63084, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8250:7:96", + "typeDescriptions": {} + } + }, + "id": 63087, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8250:12:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 63080, + "id": 63088, + "nodeType": "Return", + "src": "8243:19:96" + } + }, + { + "expression": { + "arguments": [ + { + "id": 63092, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63073, + "src": "8289:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63090, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "8275:5:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_super$_RNSUnified_$63451_$", + "typeString": "type(contract super RNSUnified)" + } + }, + "id": 63091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8281:7:96", + "memberName": "ownerOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 50559, + "src": "8275:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$", + "typeString": "function (uint256) view returns (address)" + } + }, + "id": 63093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8275:22:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 63080, + "id": 63094, + "nodeType": "Return", + "src": "8268:29:96" + } + ] + }, + "baseFunctions": [ + 50559, + 51389 + ], + "documentation": { + "id": 63071, + "nodeType": "StructuredDocumentation", + "src": "8084:35:96", + "text": "@dev Override {ERC721-ownerOf}." + }, + "functionSelector": "6352211e", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "ownerOf", + "nameLocation": "8131:7:96", + "overrides": { + "id": 63077, + "nodeType": "OverrideSpecifier", + "overrides": [ + { + "id": 63075, + "name": "ERC721", + "nameLocations": [ + "8177:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51340, + "src": "8177:6:96" + }, + { + "id": 63076, + "name": "IERC721", + "nameLocations": [ + "8185:7:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51456, + "src": "8185:7:96" + } + ], + "src": "8168:25:96" + }, + "parameters": { + "id": 63074, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63073, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "8147:7:96", + "nodeType": "VariableDeclaration", + "scope": 63096, + "src": "8139:15:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63072, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8139:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8138:17:96" + }, + "returnParameters": { + "id": 63080, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63079, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63096, + "src": "8203:7:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63078, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8203:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8202:9:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 63120, + "nodeType": "FunctionDefinition", + "src": "8355:211:96", + "nodes": [], + "body": { + "id": 63119, + "nodeType": "Block", + "src": "8463:103:96", + "nodes": [], + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 63108, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63101, + "src": "8484:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63107, + "name": "_isExpired", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63136, + "src": "8473:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 63109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8473:19:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63112, + "nodeType": "IfStatement", + "src": "8469:37:96", + "trueBody": { + "expression": { + "hexValue": "66616c7365", + "id": 63110, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8501:5:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 63106, + "id": 63111, + "nodeType": "Return", + "src": "8494:12:96" + } + }, + { + "expression": { + "arguments": [ + { + "id": 63115, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63099, + "src": "8544:7:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63116, + "name": "tokenId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63101, + "src": "8553:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63113, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "8519:5:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_super$_RNSUnified_$63451_$", + "typeString": "type(contract super RNSUnified)" + } + }, + "id": 63114, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8525:18:96", + "memberName": "_isApprovedOrOwner", + "nodeType": "MemberAccess", + "referencedDeclaration": 50893, + "src": "8519:24:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) view returns (bool)" + } + }, + "id": 63117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8519:42:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 63106, + "id": 63118, + "nodeType": "Return", + "src": "8512:49:96" + } + ] + }, + "baseFunctions": [ + 50893 + ], + "documentation": { + "id": 63097, + "nodeType": "StructuredDocumentation", + "src": "8306:46:96", + "text": "@dev Override {ERC721-_isApprovedOrOwner}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isApprovedOrOwner", + "nameLocation": "8364:18:96", + "overrides": { + "id": 63103, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "8439:8:96" + }, + "parameters": { + "id": 63102, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63099, + "mutability": "mutable", + "name": "spender", + "nameLocation": "8391:7:96", + "nodeType": "VariableDeclaration", + "scope": 63120, + "src": "8383:15:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63098, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8383:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63101, + "mutability": "mutable", + "name": "tokenId", + "nameLocation": "8408:7:96", + "nodeType": "VariableDeclaration", + "scope": 63120, + "src": "8400:15:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63100, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8400:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8382:34:96" + }, + "returnParameters": { + "id": 63106, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63105, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63120, + "src": "8457:4:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63104, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8457:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8456:6:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "id": 63136, + "nodeType": "FunctionDefinition", + "src": "8642:108:96", + "nodes": [], + "body": { + "id": 63135, + "nodeType": "Block", + "src": "8703:47:96", + "nodes": [], + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63133, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63128, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "8716:5:96", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 63129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8722:9:96", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "8716:15:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "arguments": [ + { + "id": 63131, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63123, + "src": "8742:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63130, + "name": "_expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63160, + "src": "8734:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$", + "typeString": "function (uint256) view returns (uint64)" + } + }, + "id": 63132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8734:11:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "8716:29:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 63127, + "id": 63134, + "nodeType": "Return", + "src": "8709:36:96" + } + ] + }, + "documentation": { + "id": 63121, + "nodeType": "StructuredDocumentation", + "src": "8570:69:96", + "text": " @dev Helper method to check whether the id is expired." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isExpired", + "nameLocation": "8651:10:96", + "parameters": { + "id": 63124, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63123, + "mutability": "mutable", + "name": "id", + "nameLocation": "8670:2:96", + "nodeType": "VariableDeclaration", + "scope": 63136, + "src": "8662:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63122, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8662:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8661:12:96" + }, + "returnParameters": { + "id": 63127, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63126, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63136, + "src": "8697:4:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63125, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8697:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8696:6:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63160, + "nodeType": "FunctionDefinition", + "src": "8832:170:96", + "nodes": [], + "body": { + "id": 63159, + "nodeType": "Block", + "src": "8892:110:96", + "nodes": [], + "statements": [ + { + "condition": { + "arguments": [ + { + "id": 63145, + "name": "RESERVATION_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62197, + "src": "8910:16:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 63147, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63139, + "src": "8937:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63146, + "name": "_ownerOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50841, + "src": "8928:8:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$", + "typeString": "function (uint256) view returns (address)" + } + }, + "id": 63148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8928:12:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 63144, + "name": "hasRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48606, + "src": "8902:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 63149, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8902:39:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63152, + "nodeType": "IfStatement", + "src": "8898:62:96", + "trueBody": { + "expression": { + "id": 63150, + "name": "MAX_EXPIRY", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62209, + "src": "8950:10:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 63143, + "id": 63151, + "nodeType": "Return", + "src": "8943:17:96" + } + }, + { + "expression": { + "expression": { + "expression": { + "baseExpression": { + "id": 63153, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "8973:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63155, + "indexExpression": { + "id": 63154, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63139, + "src": "8983:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8973:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63156, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8987:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "8973:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 63157, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8991:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "8973:24:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "functionReturnParameters": 63143, + "id": 63158, + "nodeType": "Return", + "src": "8966:31:96" + } + ] + }, + "documentation": { + "id": 63137, + "nodeType": "StructuredDocumentation", + "src": "8754:75:96", + "text": " @dev Helper method to calculate expiry time for specific id." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_expiry", + "nameLocation": "8841:7:96", + "parameters": { + "id": 63140, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63139, + "mutability": "mutable", + "name": "id", + "nameLocation": "8857:2:96", + "nodeType": "VariableDeclaration", + "scope": 63160, + "src": "8849:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63138, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8849:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "8848:12:96" + }, + "returnParameters": { + "id": 63143, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63142, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63160, + "src": "8884:6:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63141, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "8884:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "8883:8:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63203, + "nodeType": "FunctionDefinition", + "src": "9097:278:96", + "nodes": [], + "body": { + "id": 63202, + "nodeType": "Block", + "src": "9182:193:96", + "nodes": [], + "statements": [ + { + "assignments": [ + 63171 + ], + "declarations": [ + { + "constant": false, + "id": 63171, + "mutability": "mutable", + "name": "owner", + "nameLocation": "9196:5:96", + "nodeType": "VariableDeclaration", + "scope": 63202, + "src": "9188:13:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63170, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9188:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 63172, + "nodeType": "VariableDeclarationStatement", + "src": "9188:13:96" + }, + { + "body": { + "id": 63198, + "nodeType": "Block", + "src": "9224:128:96", + "statements": [ + { + "expression": { + "id": 63182, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63176, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63171, + "src": "9232:5:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "baseExpression": { + "id": 63177, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "9240:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63179, + "indexExpression": { + "id": 63178, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63165, + "src": "9250:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9240:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63180, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9254:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "9240:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 63181, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9258:5:96", + "memberName": "owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 65473, + "src": "9240:23:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "9232:31:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 63183, + "nodeType": "ExpressionStatement", + "src": "9232:31:96" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 63186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63184, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63171, + "src": "9275:5:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "id": 63185, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63163, + "src": "9284:7:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "9275:16:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63189, + "nodeType": "IfStatement", + "src": "9271:33:96", + "trueBody": { + "expression": { + "hexValue": "74727565", + "id": 63187, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9300:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 63169, + "id": 63188, + "nodeType": "Return", + "src": "9293:11:96" + } + }, + { + "expression": { + "id": 63196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63190, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63165, + "src": "9312:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "expression": { + "baseExpression": { + "id": 63191, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "9317:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63193, + "indexExpression": { + "id": 63192, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63165, + "src": "9327:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9317:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63194, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9331:5:96", + "memberName": "immut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65481, + "src": "9317:19:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage", + "typeString": "struct INSUnified.ImmutableRecord storage ref" + } + }, + "id": 63195, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9337:8:96", + "memberName": "parentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 65465, + "src": "9317:28:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9312:33:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63197, + "nodeType": "ExpressionStatement", + "src": "9312:33:96" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63173, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63165, + "src": "9215:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 63174, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9221:1:96", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "9215:7:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63199, + "nodeType": "WhileStatement", + "src": "9208:144:96" + }, + { + "expression": { + "hexValue": "66616c7365", + "id": 63200, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9365:5:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 63169, + "id": 63201, + "nodeType": "Return", + "src": "9358:12:96" + } + ] + }, + "documentation": { + "id": 63161, + "nodeType": "StructuredDocumentation", + "src": "9006:88:96", + "text": " @dev Helper method to check whether the address is owner of parent token." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_isHierarchyOwner", + "nameLocation": "9106:17:96", + "parameters": { + "id": 63166, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63163, + "mutability": "mutable", + "name": "spender", + "nameLocation": "9132:7:96", + "nodeType": "VariableDeclaration", + "scope": 63203, + "src": "9124:15:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63162, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9124:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63165, + "mutability": "mutable", + "name": "id", + "nameLocation": "9149:2:96", + "nodeType": "VariableDeclaration", + "scope": 63203, + "src": "9141:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63164, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9141:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9123:29:96" + }, + "returnParameters": { + "id": 63169, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63168, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63203, + "src": "9176:4:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63167, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9176:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "9175:6:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63224, + "nodeType": "FunctionDefinition", + "src": "9542:167:96", + "nodes": [], + "body": { + "id": 63223, + "nodeType": "Block", + "src": "9626:83:96", + "nodes": [], + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 63214, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63206, + "src": "9658:7:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63215, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63208, + "src": "9667:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63213, + "name": "_isApprovedOrOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 63120 + ], + "referencedDeclaration": 63120, + "src": "9639:18:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) view returns (bool)" + } + }, + "id": 63216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9639:31:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "arguments": [ + { + "id": 63218, + "name": "spender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63206, + "src": "9692:7:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63219, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63208, + "src": "9701:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63217, + "name": "_isHierarchyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63203, + "src": "9674:17:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) view returns (bool)" + } + }, + "id": 63220, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9674:30:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9639:65:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 63212, + "id": 63222, + "nodeType": "Return", + "src": "9632:72:96" + } + ] + }, + "documentation": { + "id": 63204, + "nodeType": "StructuredDocumentation", + "src": "9379:160:96", + "text": " @dev Returns whether the owner rules is satisfied.\n Returns true only if the spender is owner, or approved spender, or owner of parent token." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_checkOwnerRules", + "nameLocation": "9551:16:96", + "parameters": { + "id": 63209, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63206, + "mutability": "mutable", + "name": "spender", + "nameLocation": "9576:7:96", + "nodeType": "VariableDeclaration", + "scope": 63224, + "src": "9568:15:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63205, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9568:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63208, + "mutability": "mutable", + "name": "id", + "nameLocation": "9593:2:96", + "nodeType": "VariableDeclaration", + "scope": 63224, + "src": "9585:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63207, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9585:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9567:29:96" + }, + "returnParameters": { + "id": 63212, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63211, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63224, + "src": "9620:4:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63210, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9620:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "9619:6:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63250, + "nodeType": "FunctionDefinition", + "src": "9818:295:96", + "nodes": [], + "body": { + "id": 63249, + "nodeType": "Block", + "src": "9902:211:96", + "nodes": [], + "statements": [ + { + "assignments": [ + 63234, + 63236 + ], + "declarations": [ + { + "constant": false, + "id": 63234, + "mutability": "mutable", + "name": "allowed", + "nameLocation": "9914:7:96", + "nodeType": "VariableDeclaration", + "scope": 63249, + "src": "9909:12:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63233, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9909:4:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63236, + "mutability": "mutable", + "name": "errorCode", + "nameLocation": "9930:9:96", + "nodeType": "VariableDeclaration", + "scope": 63249, + "src": "9923:16:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 63235, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "9923:6:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "id": 63243, + "initialValue": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63238, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "9956:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 63239, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9956:12:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63240, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63227, + "src": "9970:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63241, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63230, + "src": "9974:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + ], + "id": 63237, + "name": "canSetRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63070, + "src": "9943:12:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$returns$_t_bool_$_t_bytes4_$", + "typeString": "function (address,uint256,ModifyingIndicator) view returns (bool,bytes4)" + } + }, + "id": 63242, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9943:41:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes4_$", + "typeString": "tuple(bool,bytes4)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9908:76:96" + }, + { + "condition": { + "id": 63245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9994:8:96", + "subExpression": { + "id": 63244, + "name": "allowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63234, + "src": "9995:7:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63248, + "nodeType": "IfStatement", + "src": "9990:119:96", + "trueBody": { + "id": 63247, + "nodeType": "Block", + "src": "10004:105:96", + "statements": [ + { + "AST": { + "nativeSrc": "10037:66:96", + "nodeType": "YulBlock", + "src": "10037:66:96", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10054:3:96", + "nodeType": "YulLiteral", + "src": "10054:3:96", + "type": "", + "value": "0x0" + }, + { + "name": "errorCode", + "nativeSrc": "10059:9:96", + "nodeType": "YulIdentifier", + "src": "10059:9:96" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "10047:6:96", + "nodeType": "YulIdentifier", + "src": "10047:6:96" + }, + "nativeSrc": "10047:22:96", + "nodeType": "YulFunctionCall", + "src": "10047:22:96" + }, + "nativeSrc": "10047:22:96", + "nodeType": "YulExpressionStatement", + "src": "10047:22:96" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "10085:3:96", + "nodeType": "YulLiteral", + "src": "10085:3:96", + "type": "", + "value": "0x0" + }, + { + "kind": "number", + "nativeSrc": "10090:4:96", + "nodeType": "YulLiteral", + "src": "10090:4:96", + "type": "", + "value": "0x04" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "10078:6:96", + "nodeType": "YulIdentifier", + "src": "10078:6:96" + }, + "nativeSrc": "10078:17:96", + "nodeType": "YulFunctionCall", + "src": "10078:17:96" + }, + "nativeSrc": "10078:17:96", + "nodeType": "YulExpressionStatement", + "src": "10078:17:96" + } + ] + }, + "evmVersion": "istanbul", + "externalReferences": [ + { + "declaration": 63236, + "isOffset": false, + "isSlot": false, + "src": "10059:9:96", + "valueSize": 1 + } + ], + "flags": [ + "memory-safe" + ], + "id": 63246, + "nodeType": "InlineAssembly", + "src": "10012:91:96" + } + ] + } + } + ] + }, + "documentation": { + "id": 63225, + "nodeType": "StructuredDocumentation", + "src": "9713:102:96", + "text": " @dev Helper method to ensure msg.sender is authorized to modify record of the token id." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_requireAuthorized", + "nameLocation": "9827:18:96", + "parameters": { + "id": 63231, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63227, + "mutability": "mutable", + "name": "id", + "nameLocation": "9854:2:96", + "nodeType": "VariableDeclaration", + "scope": 63250, + "src": "9846:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63226, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9846:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63230, + "mutability": "mutable", + "name": "indicator", + "nameLocation": "9877:9:96", + "nodeType": "VariableDeclaration", + "scope": 63250, + "src": "9858:28:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + "typeName": { + "id": 63229, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63228, + "name": "ModifyingIndicator", + "nameLocations": [ + "9858:18:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 70055, + "src": "9858:18:96" + }, + "referencedDeclaration": 70055, + "src": "9858:18:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "visibility": "internal" + } + ], + "src": "9845:42:96" + }, + "returnParameters": { + "id": 63232, + "nodeType": "ParameterList", + "parameters": [], + "src": "9902:0:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63270, + "nodeType": "FunctionDefinition", + "src": "10218:159:96", + "nodes": [], + "body": { + "id": 63269, + "nodeType": "Block", + "src": "10294:83:96", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 63264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63258, + "name": "expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63255, + "src": "10304:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 63259, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "10313:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63261, + "indexExpression": { + "id": 63260, + "name": "parentId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63253, + "src": "10323:8:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10313:19:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63262, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10333:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "10313:23:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 63263, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10337:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "10313:30:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "10304:39:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63268, + "nodeType": "IfStatement", + "src": "10300:72:96", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63265, + "name": "ExceedParentExpiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65439, + "src": "10352:18:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10352:20:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63267, + "nodeType": "RevertStatement", + "src": "10345:27:96" + } + } + ] + }, + "documentation": { + "id": 63251, + "nodeType": "StructuredDocumentation", + "src": "10117:98:96", + "text": " @dev Helper method to ensure expiry of an id is lower or equal expiry of parent id." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_requireValidExpiry", + "nameLocation": "10227:19:96", + "parameters": { + "id": 63256, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63253, + "mutability": "mutable", + "name": "parentId", + "nameLocation": "10255:8:96", + "nodeType": "VariableDeclaration", + "scope": 63270, + "src": "10247:16:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63252, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10247:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63255, + "mutability": "mutable", + "name": "expiry", + "nameLocation": "10272:6:96", + "nodeType": "VariableDeclaration", + "scope": 63270, + "src": "10265:13:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63254, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "10265:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "10246:33:96" + }, + "returnParameters": { + "id": 63257, + "nodeType": "ParameterList", + "parameters": [], + "src": "10294:0:96" + }, + "scope": 63451, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63322, + "nodeType": "FunctionDefinition", + "src": "10621:369:96", + "nodes": [], + "body": { + "id": 63321, + "nodeType": "Block", + "src": "10677:313:96", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "expression": { + "baseExpression": { + "id": 63279, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "10703:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63281, + "indexExpression": { + "id": 63280, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63273, + "src": "10713:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10703:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63282, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10717:5:96", + "memberName": "immut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65481, + "src": "10703:19:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ImmutableRecord_$65468_storage", + "typeString": "struct INSUnified.ImmutableRecord storage ref" + } + }, + "id": 63283, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10723:8:96", + "memberName": "parentId", + "nodeType": "MemberAccess", + "referencedDeclaration": 65465, + "src": "10703:28:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63284, + "name": "expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63275, + "src": "10733:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 63278, + "name": "_requireValidExpiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63270, + "src": "10683:19:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint64_$returns$__$", + "typeString": "function (uint256,uint64) view" + } + }, + "id": 63285, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10683:57:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63286, + "nodeType": "ExpressionStatement", + "src": "10683:57:96" + }, + { + "condition": { + "arguments": [ + { + "id": 63288, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63273, + "src": "10760:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63287, + "name": "available", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62343, + "src": "10750:9:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view returns (bool)" + } + }, + "id": 63289, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10750:13:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63293, + "nodeType": "IfStatement", + "src": "10746:63:96", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63290, + "name": "NameMustBeRegisteredOrInGracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65460, + "src": "10772:35:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10772:37:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63292, + "nodeType": "RevertStatement", + "src": "10765:44:96" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "id": 63300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63294, + "name": "expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63275, + "src": "10819:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 63295, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "10829:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63297, + "indexExpression": { + "id": 63296, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63273, + "src": "10839:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10829:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63298, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10843:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "10829:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 63299, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10847:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "10829:24:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "10819:34:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63304, + "nodeType": "IfStatement", + "src": "10815:84:96", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63301, + "name": "ExpiryTimeMustBeLargerThanTheOldOne", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65457, + "src": "10862:35:96", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10862:37:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63303, + "nodeType": "RevertStatement", + "src": "10855:44:96" + } + }, + { + "assignments": [ + 63307 + ], + "declarations": [ + { + "constant": false, + "id": 63307, + "mutability": "mutable", + "name": "record", + "nameLocation": "10920:6:96", + "nodeType": "VariableDeclaration", + "scope": 63321, + "src": "10906:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 63306, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63305, + "name": "Record", + "nameLocations": [ + "10906:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "10906:6:96" + }, + "referencedDeclaration": 65485, + "src": "10906:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "id": 63308, + "nodeType": "VariableDeclarationStatement", + "src": "10906:20:96" + }, + { + "expression": { + "id": 63319, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "baseExpression": { + "id": 63309, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "10932:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63311, + "indexExpression": { + "id": 63310, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63273, + "src": "10942:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "10932:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63312, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10946:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "10932:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 63313, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "10950:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "10932:24:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 63314, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63307, + "src": "10959:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 63315, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10966:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "10959:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 63316, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "10970:6:96", + "memberName": "expiry", + "nodeType": "MemberAccess", + "referencedDeclaration": 65475, + "src": "10959:17:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63317, + "name": "expiry", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63275, + "src": "10979:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "10959:26:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "10932:53:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 63320, + "nodeType": "ExpressionStatement", + "src": "10932:53:96" + } + ] + }, + "documentation": { + "id": 63271, + "nodeType": "StructuredDocumentation", + "src": "10381:237:96", + "text": " @dev Helper method to set expiry time of a token.\n Requirement:\n - The token must be registered or in grace period.\n - Expiry time must be larger than the old one.\n Emits an event {RecordUpdated}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setExpiry", + "nameLocation": "10630:10:96", + "parameters": { + "id": 63276, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63273, + "mutability": "mutable", + "name": "id", + "nameLocation": "10649:2:96", + "nodeType": "VariableDeclaration", + "scope": 63322, + "src": "10641:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63272, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10641:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63275, + "mutability": "mutable", + "name": "expiry", + "nameLocation": "10660:6:96", + "nodeType": "VariableDeclaration", + "scope": 63322, + "src": "10653:13:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63274, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "10653:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "10640:27:96" + }, + "returnParameters": { + "id": 63277, + "nodeType": "ParameterList", + "parameters": [], + "src": "10677:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63339, + "nodeType": "FunctionDefinition", + "src": "11098:147:96", + "nodes": [], + "body": { + "id": 63338, + "nodeType": "Block", + "src": "11152:93:96", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63328, + "name": "_gracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62216, + "src": "11158:12:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63329, + "name": "gracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63325, + "src": "11173:11:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "src": "11158:26:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "id": 63331, + "nodeType": "ExpressionStatement", + "src": "11158:26:96" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63333, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "11214:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 63334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11214:12:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63335, + "name": "gracePeriod", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63325, + "src": "11228:11:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 63332, + "name": "GracePeriodUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65499, + "src": "11195:18:96", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint64_$returns$__$", + "typeString": "function (address,uint64)" + } + }, + "id": 63336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11195:45:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63337, + "nodeType": "EmitStatement", + "src": "11190:50:96" + } + ] + }, + "documentation": { + "id": 63323, + "nodeType": "StructuredDocumentation", + "src": "10994:101:96", + "text": " @dev Helper method to set grace period.\n Emits an event {GracePeriodUpdated}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setGracePeriod", + "nameLocation": "11107:15:96", + "parameters": { + "id": 63326, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63325, + "mutability": "mutable", + "name": "gracePeriod", + "nameLocation": "11130:11:96", + "nodeType": "VariableDeclaration", + "scope": 63339, + "src": "11123:18:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63324, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "11123:6:96", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "11122:20:96" + }, + "returnParameters": { + "id": 63327, + "nodeType": "ParameterList", + "parameters": [], + "src": "11152:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63420, + "nodeType": "FunctionDefinition", + "src": "11289:518:96", + "nodes": [], + "body": { + "id": 63419, + "nodeType": "Block", + "src": "11364:443:96", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 63353, + "name": "from", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63342, + "src": "11386:4:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63354, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63344, + "src": "11392:2:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63355, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63346, + "src": "11396:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63350, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "11370:5:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_super$_RNSUnified_$63451_$", + "typeString": "type(contract super RNSUnified)" + } + }, + "id": 63352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11376:9:96", + "memberName": "_transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 51166, + "src": "11370:15:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256)" + } + }, + "id": 63356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11370:29:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63357, + "nodeType": "ExpressionStatement", + "src": "11370:29:96" + }, + { + "assignments": [ + 63360 + ], + "declarations": [ + { + "constant": false, + "id": 63360, + "mutability": "mutable", + "name": "record", + "nameLocation": "11420:6:96", + "nodeType": "VariableDeclaration", + "scope": 63419, + "src": "11406:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 63359, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63358, + "name": "Record", + "nameLocations": [ + "11406:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "11406:6:96" + }, + "referencedDeclaration": 65485, + "src": "11406:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "id": 63361, + "nodeType": "VariableDeclarationStatement", + "src": "11406:20:96" + }, + { + "assignments": [ + 63364 + ], + "declarations": [ + { + "constant": false, + "id": 63364, + "mutability": "mutable", + "name": "indicator", + "nameLocation": "11451:9:96", + "nodeType": "VariableDeclaration", + "scope": 63419, + "src": "11432:28:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + "typeName": { + "id": 63363, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63362, + "name": "ModifyingIndicator", + "nameLocations": [ + "11432:18:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 70055, + "src": "11432:18:96" + }, + "referencedDeclaration": 70055, + "src": "11432:18:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "visibility": "internal" + } + ], + "id": 63369, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 63365, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "11463:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 63366, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "11478:5:96", + "memberName": "Owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 66672, + "src": "11463:20:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 63367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11484:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "11463:30:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 63368, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11463:32:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11432:63:96" + }, + { + "expression": { + "id": 63380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "baseExpression": { + "id": 63370, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "11502:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63372, + "indexExpression": { + "id": 63371, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63346, + "src": "11512:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11502:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63373, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11516:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "11502:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 63374, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "11520:5:96", + "memberName": "owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 65473, + "src": "11502:23:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63379, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "id": 63375, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63360, + "src": "11528:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 63376, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11535:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "11528:10:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 63377, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "11539:5:96", + "memberName": "owner", + "nodeType": "MemberAccess", + "referencedDeclaration": 65473, + "src": "11528:16:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63378, + "name": "to", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63344, + "src": "11547:2:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "11528:21:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "11502:47:96", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 63381, + "nodeType": "ExpressionStatement", + "src": "11502:47:96" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "11559:46:96", + "subExpression": { + "arguments": [ + { + "id": 63383, + "name": "PROTECTED_SETTLER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62202, + "src": "11568:22:96", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63384, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 52298, + "src": "11592:10:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 63385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11592:12:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 63382, + "name": "hasRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48606, + "src": "11560:7:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) view returns (bool)" + } + }, + "id": 63386, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11560:45:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "expression": { + "expression": { + "baseExpression": { + "id": 63388, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "11609:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63390, + "indexExpression": { + "id": 63389, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63346, + "src": "11619:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11609:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63391, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11623:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "11609:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 63392, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11627:9:96", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 65477, + "src": "11609:27:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "11559:77:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63412, + "nodeType": "IfStatement", + "src": "11555:201:96", + "trueBody": { + "id": 63411, + "nodeType": "Block", + "src": "11638:118:96", + "statements": [ + { + "expression": { + "id": 63400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "expression": { + "baseExpression": { + "id": 63394, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "11646:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63396, + "indexExpression": { + "id": 63395, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63346, + "src": "11656:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11646:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63397, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11660:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "11646:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "id": 63398, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "11664:9:96", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 65477, + "src": "11646:27:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "hexValue": "66616c7365", + "id": 63399, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11676:5:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "src": "11646:35:96", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63401, + "nodeType": "ExpressionStatement", + "src": "11646:35:96" + }, + { + "expression": { + "id": 63409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63402, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63364, + "src": "11689:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + "function": 70222, + "id": 63408, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63403, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63364, + "src": "11701:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "expression": { + "id": 63404, + "name": "ModifyingField", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66675, + "src": "11713:14:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_ModifyingField_$66675_$", + "typeString": "type(enum ModifyingField)" + } + }, + "id": 63405, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "11728:9:96", + "memberName": "Protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 66674, + "src": "11713:24:96", + "typeDescriptions": { + "typeIdentifier": "t_enum$_ModifyingField_$66675", + "typeString": "enum ModifyingField" + } + }, + "id": 63406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11738:9:96", + "memberName": "indicator", + "nodeType": "MemberAccess", + "referencedDeclaration": 66695, + "src": "11713:34:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_ModifyingField_$66675_$returns$_t_userDefinedValueType$_ModifyingIndicator_$70055_$attached_to$_t_enum$_ModifyingField_$66675_$", + "typeString": "function (enum ModifyingField) pure returns (ModifyingIndicator)" + } + }, + "id": 63407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11713:36:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "src": "11701:48:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "src": "11689:60:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + "id": 63410, + "nodeType": "ExpressionStatement", + "src": "11689:60:96" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 63414, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63346, + "src": "11780:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63415, + "name": "indicator", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63364, + "src": "11784:9:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + { + "id": 63416, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63360, + "src": "11795:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + ], + "id": 63413, + "name": "RecordUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65510, + "src": "11766:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_struct$_Record_$65485_memory_ptr_$returns$__$", + "typeString": "function (uint256,ModifyingIndicator,struct INSUnified.Record memory)" + } + }, + "id": 63417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11766:36:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63418, + "nodeType": "EmitStatement", + "src": "11761:41:96" + } + ] + }, + "baseFunctions": [ + 51166 + ], + "documentation": { + "id": 63340, + "nodeType": "StructuredDocumentation", + "src": "11249:37:96", + "text": "@dev Override {ERC721-_transfer}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transfer", + "nameLocation": "11298:9:96", + "overrides": { + "id": 63348, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11355:8:96" + }, + "parameters": { + "id": 63347, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63342, + "mutability": "mutable", + "name": "from", + "nameLocation": "11316:4:96", + "nodeType": "VariableDeclaration", + "scope": 63420, + "src": "11308:12:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63341, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11308:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63344, + "mutability": "mutable", + "name": "to", + "nameLocation": "11330:2:96", + "nodeType": "VariableDeclaration", + "scope": 63420, + "src": "11322:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63343, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11322:7:96", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63346, + "mutability": "mutable", + "name": "id", + "nameLocation": "11342:2:96", + "nodeType": "VariableDeclaration", + "scope": 63420, + "src": "11334:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63345, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11334:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11307:38:96" + }, + "returnParameters": { + "id": 63349, + "nodeType": "ParameterList", + "parameters": [], + "src": "11364:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63450, + "nodeType": "FunctionDefinition", + "src": "11847:186:96", + "nodes": [], + "body": { + "id": 63449, + "nodeType": "Block", + "src": "11892:141:96", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 63430, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63423, + "src": "11910:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63427, + "name": "super", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -25, + "src": "11898:5:96", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_super$_RNSUnified_$63451_$", + "typeString": "type(contract super RNSUnified)" + } + }, + "id": 63429, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11904:5:96", + "memberName": "_burn", + "nodeType": "MemberAccess", + "referencedDeclaration": 51081, + "src": "11898:11:96", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 63431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11898:15:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63432, + "nodeType": "ExpressionStatement", + "src": "11898:15:96" + }, + { + "expression": { + "id": 63437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "11919:24:96", + "subExpression": { + "expression": { + "baseExpression": { + "id": 63433, + "name": "_recordOf", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62222, + "src": "11926:9:96", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_Record_$65485_storage_$", + "typeString": "mapping(uint256 => struct INSUnified.Record storage ref)" + } + }, + "id": 63435, + "indexExpression": { + "id": 63434, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63423, + "src": "11936:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11926:13:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage", + "typeString": "struct INSUnified.Record storage ref" + } + }, + "id": 63436, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "11940:3:96", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 65484, + "src": "11926:17:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$65478_storage", + "typeString": "struct INSUnified.MutableRecord storage ref" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63438, + "nodeType": "ExpressionStatement", + "src": "11919:24:96" + }, + { + "assignments": [ + 63441 + ], + "declarations": [ + { + "constant": false, + "id": 63441, + "mutability": "mutable", + "name": "record", + "nameLocation": "11963:6:96", + "nodeType": "VariableDeclaration", + "scope": 63449, + "src": "11949:20:96", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record" + }, + "typeName": { + "id": 63440, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63439, + "name": "Record", + "nameLocations": [ + "11949:6:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65485, + "src": "11949:6:96" + }, + "referencedDeclaration": 65485, + "src": "11949:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_storage_ptr", + "typeString": "struct INSUnified.Record" + } + }, + "visibility": "internal" + } + ], + "id": 63442, + "nodeType": "VariableDeclarationStatement", + "src": "11949:20:96" + }, + { + "eventCall": { + "arguments": [ + { + "id": 63444, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63423, + "src": "11994:2:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63445, + "name": "USER_FIELDS_INDICATOR", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 70099, + "src": "11998:21:96", + "typeDescriptions": { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + } + }, + { + "id": 63446, + "name": "record", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63441, + "src": "12021:6:96", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_userDefinedValueType$_ModifyingIndicator_$70055", + "typeString": "ModifyingIndicator" + }, + { + "typeIdentifier": "t_struct$_Record_$65485_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + ], + "id": 63443, + "name": "RecordUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65510, + "src": "11980:13:96", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_userDefinedValueType$_ModifyingIndicator_$70055_$_t_struct$_Record_$65485_memory_ptr_$returns$__$", + "typeString": "function (uint256,ModifyingIndicator,struct INSUnified.Record memory)" + } + }, + "id": 63447, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11980:48:96", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63448, + "nodeType": "EmitStatement", + "src": "11975:53:96" + } + ] + }, + "baseFunctions": [ + 51081 + ], + "documentation": { + "id": 63421, + "nodeType": "StructuredDocumentation", + "src": "11811:33:96", + "text": "@dev Override {ERC721-_burn}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_burn", + "nameLocation": "11856:5:96", + "overrides": { + "id": 63425, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "11883:8:96" + }, + "parameters": { + "id": 63424, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63423, + "mutability": "mutable", + "name": "id", + "nameLocation": "11870:2:96", + "nodeType": "VariableDeclaration", + "scope": 63450, + "src": "11862:10:96", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63422, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11862:7:96", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11861:12:96" + }, + "returnParameters": { + "id": 63426, + "nodeType": "ParameterList", + "parameters": [], + "src": "11892:0:96" + }, + "scope": 63451, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 62177, + "name": "Initializable", + "nameLocations": [ + "619:13:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50240, + "src": "619:13:96" + }, + "id": 62178, + "nodeType": "InheritanceSpecifier", + "src": "619:13:96" + }, + { + "baseName": { + "id": 62179, + "name": "RNSToken", + "nameLocations": [ + "634:8:96" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 62154, + "src": "634:8:96" + }, + "id": 62180, + "nodeType": "InheritanceSpecifier", + "src": "634:8:96" + } + ], + "canonicalName": "RNSUnified", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 63451, + 62154, + 65672, + 501, + 51858, + 51929, + 51898, + 50348, + 51504, + 490, + 51340, + 51956, + 51456, + 48967, + 48842, + 52671, + 52683, + 49065, + 49040, + 52308, + 50240 + ], + "name": "RNSUnified", + "nameLocation": "605:10:96", + "scope": 63452, + "usedErrors": [ + 65430, + 65433, + 65436, + 65439, + 65442, + 65445, + 65448, + 65451, + 65454, + 65457, + 65460 + ], + "usedEvents": [ + 434, + 48979, + 48988, + 48997, + 50086, + 50251, + 50256, + 51355, + 51364, + 51373, + 65492, + 65499, + 65510 + ] + } + ], + "license": "MIT" + }, + "blockNumber": 21502535, + "bytecode": "0x6000608081815260c060405260a09182529060036200001f8382620001b1565b5060046200002e8282620001b1565b5050603c805460ff1916905550620000456200004b565b6200027d565b600054610100900460ff1615620000b85760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146200010a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200013757607f821691505b6020821081036200015857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001ac57600081815260208120601f850160051c81016020861015620001875750805b601f850160051c820191505b81811015620001a85782815560010162000193565b5050505b505050565b81516001600160401b03811115620001cd57620001cd6200010c565b620001e581620001de845462000122565b846200015e565b602080601f8311600181146200021d5760008415620002045750858301515b600019600386901b1c1916600185901b178555620001a8565b600085815260208120601f198616915b828110156200024e578886015182559484019460019091019084016200022d565b50858210156200026d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b614376806200028d6000396000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b61030961030436600461351d565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c36600461353a565b6107d7565b6040516103159190613627565b61035161034c3660046136b5565b61094a565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b6040516103159190613732565b6103ba6103b536600461353a565b610c57565b6040516001600160a01b039091168152602001610315565b6103e760008051602061430183398151915281565b604051908152602001610315565b610408610403366004613745565b610c7e565b005b6103e76104183660046137fa565b610d98565b61039a61042b36600461353a565b610da3565b6103e761043e36600461353a565b60096020526000908152604090205481565b603f546103e7565b61039a61046636600461353a565b610df0565b610408610479366004613842565b610efc565b61040861048c366004613883565b611091565b6103e761049f36600461353a565b6000908152600160208190526040909120015490565b6104086104c33660046138bf565b6110c3565b6104086104d63660046138bf565b61111d565b6103e76104e9366004613745565b611143565b6103e76000805160206142e183398151915281565b6104086105113660046138bf565b6111d9565b610408611257565b61040861052c366004613883565b61127a565b61040861053f36600461353a565b611295565b6103e761055236600461353a565b6112c3565b61056a6105653660046138eb565b611356565b6040516001600160401b039091168152602001610315565b61040861059036600461390e565b61141b565b6104086105a3366004613929565b611444565b603c5460ff16610309565b6103ba6105c136600461353a565b611459565b6103e76105d436600461396a565b61147a565b610408611500565b6103ba6105ef366004613985565b611520565b6103096106023660046138bf565b61153f565b604080518082019091526003815262524e5360e81b602082015261039a565b61030961063436600461353a565b61156a565b6103e7600081565b61040861064f3660046139b7565b611595565b6073546103e7565b61040861066a3660046139e1565b6115a0565b61040861067d366004613a77565b6117b8565b61056a6001600160401b0381565b61039a61069e36600461353a565b6117ea565b6103e76106b136600461353a565b61185d565b6104086106c43660046138bf565b611874565b60a7546001600160401b031661056a565b6103e760008051602061432183398151915281565b6103096106fd366004613af2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613b1c565b61189a565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b6104086107733660046138eb565b611984565b61078b610786366004613b9f565b611a05565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611b46565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df6134ab565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613bd2565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611459565b6020808301516001600160a01b0390921691015261092f82611b6b565b60208201516001600160401b03909116604090910152919050565b600080610955611be7565b61095f3389611c2f565b61097b576040516282b42960e81b815260040160405180910390fd5b6109bb8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4b92505050565b90506109c68161156a565b6109e35760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031615610a0957610a0981611c61565b610a138482611cd0565b610a28426001600160401b0380861690611ce3565b9150610a348883611d19565b610a3c6134ab565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610abc91166001613c1c565b60ff1681526020018a815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e28914801590610b3c5750805151600360ff90911610155b15610b5a576040516378a0027360e11b815260040160405180910390fd5b600082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610ba09082613c83565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206142c183398151915290610c4390600019908590613d42565b60405180910390a250965096945050505050565b6000610c6282611d5f565b506000908152600760205260409020546001600160a01b031690565b6000610c8982611dbe565b9050806001600160a01b0316836001600160a01b031603610cfb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610d175750610d1781336106fd565b610d895760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610cf2565b610d938383611e1e565b505050565b60006107d182611e8c565b606081610daf81611d5f565b600083815260a8602090815260408083206009835292819020549051610dd89392879101613d5b565b60405160208183030381529060405291505b50919050565b606081600003610e0e57505060408051602081019091526000815290565b600082815260a860205260409020600281018054610e2b90613bd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5790613bd2565b8015610ea45780601f10610e7957610100808354040283529160200191610ea4565b820191906000526020600020905b815481529060010190602001808311610e8757829003601f168201915b50505050509150806001015492505b8215610dea5750600082815260a860209081526040918290209151610edf918491600285019101613e69565b604051602081830303815290604052915080600101549250610eb3565b610f04611be7565b8282610f108282611eff565b610f186134ab565b600086815260a860205260409020600301610f3d610f366006611f20565b8790611f42565b15610f7e57610f526080860160608701613f1b565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f8b610f366005611f20565b15610fc157610fc187610fa4606088016040890161390e565b60208501516001600160401b039091166040909101819052611f4e565b610fce610f366003611f20565b1561100457610fe0602086018661396a565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206142c18339815191528784604051611024929190613d42565b60405180910390a2611039610f366004611f20565b1561108857600087815260a8602090815260409182902060040154611088926001600160a01b039091169161107291890190890161396a565b8960405180602001604052806000815250612027565b50505050505050565b61109c335b8261205a565b6110b85760405162461bcd60e51b8152600401610cf290613f36565b610d9383838361207c565b6110cb611be7565b816110d66004611f20565b6110e08282611eff565b600084815260a860209081526040808320600401548151928301909152918152611117916001600160a01b03169085908790612027565b50505050565b6000828152600160208190526040909120015461113981612178565b610d938383612182565b600061114e8361147a565b82106111b05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610cf2565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146112495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cf2565b61125382826121a4565b5050565b60008051602061432183398151915261126f81612178565b6112776121c6565b50565b610d93838383604051806020016040528060008152506117b8565b61129e33611096565b6112ba5760405162461bcd60e51b8152600401610cf290613f36565b61127781611c61565b60006112ce603f5490565b82106113315760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610cf2565b603f828154811061134457611344613f83565b90600052602060002001549050919050565b6000611360611be7565b60008051602061430183398151915261137881612178565b6113806134ab565b600085815260a860205260409020600401546113b2906001600160401b03600160a01b90910481169086811690611ce3565b6020820180516001600160401b039092166040928301525101516113d7908690611f4e565b6020810151604001519250846000805160206142c18339815191526113fc6005611f20565b8360405161140b929190613d42565b60405180910390a2505092915050565b611423611be7565b60008051602061430183398151915261143b81612178565b61125382612218565b600061144f81612178565b610d938383612270565b6000611464826122b9565b1561147157506000919050565b6107d182611dbe565b60006001600160a01b0382166114e45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cf2565b506001600160a01b031660009081526006602052604090205490565b60008051602061432183398151915261151881612178565b6112776122d5565b60008281526002602052604081206115389083612312565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061158d61157883611b6b565b60a7546001600160401b03918216911661231e565b421192915050565b611253338383612332565b600054610100900460ff16158080156115c05750600054600160ff909116105b806115da5750303b1580156115da575060005460ff166001145b61163d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cf2565b6000805460ff191660011790558015611660576000805461ff0019166101001790555b61166b600089612182565b61168360008051602061432183398151915288612182565b61169b60008051602061430183398151915287612182565b6116b36000805160206142e183398151915286612182565b6116bd8383612270565b6116c684612218565b6116d1886000611cd0565b6116d96134ab565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206142c18339815191526117506005611f20565b8360405161175f929190613d42565b60405180910390a25080156117ae576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117c2338361205a565b6117de5760405162461bcd60e51b8152600401610cf290613f36565b61111784848484612027565b6060816117f681611d5f565b6000611800612400565b905060008151116118205760405180602001604052806000815250611855565b8061182a30612492565b611833866124a8565b60405160200161184593929190613f99565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d19061253a565b6000828152600160208190526040909120015461189081612178565b610d9383836121a4565b6000805160206142e18339815191526118b281612178565b60006118be6006611f20565b905060006118ca6134ab565b602081015185151560609091015260005b868110156117ae578787828181106118f5576118f5613f83565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461197c57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206142c1833981519152906119739087908690613d42565b60405180910390a25b6001016118db565b61198c611be7565b6000805160206143018339815191526119a481612178565b6119ac6134ab565b60208101516001600160401b03841660409091018190526119ce908590611f4e565b836000805160206142c18339815191526119e86005611f20565b836040516119f7929190613d42565b60405180910390a250505050565b600080611a13836007611f42565b15611a2a57506000905063da698a4d60e01b611b3e565b6000848152600560205260409020546001600160a01b0316611a585750600090506304a3dbd560e51b611b3e565b611a6c611a656006611f20565b8490611f42565b8015611a8d5750611a8b6000805160206142e18339815191528661153f565b155b15611aa457506000905063c24b0f3f60e01b611b3e565b6000611abe6000805160206143018339815191528761153f565b9050611ad4611acd6005611f20565b8590611f42565b8015611ade575080155b15611af757506000915063ed4b948760e01b9050611b3e565b611b02846018611f42565b8015611b1c57508080611b1a5750611b1a8686611c2f565b155b15611b345750600091506282b42960e81b9050611b3e565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d182612544565b600081815260056020526040812054611bae907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b031661153f565b15611bc157506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611c2d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610cf2565b565b6000611c3b838361205a565b8061153857506115388383612584565b6000918252805160209182012090526040902090565b611c6a816125e2565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611ca36134ab565b816000805160206142c1833981519152601883604051611cc4929190613d42565b60405180910390a25050565b6073805460010190556112538282612685565b600081841180611cf257508183115b15611cfe575080611538565b611d08848461231e565b905081811115611538575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156112535760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b03166112775760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e5382611dbe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611ef55760006020840160018303810160008052805b828110611ef057828114602e600183035160f81c1480821715611ee557600186848603030180842060205260406000206000526001810187019650505b505060001901611ea8565b505050505b5050600051919050565b600080611f0d338585611a05565b9150915081611117578060005260046000fd5b6000816006811115611f3457611f34613f05565b60ff166001901b9050919050565b60008282161515611538565b600082815260a86020526040902060010154611f6a9082611d19565b611f738261156a565b15611f9157604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611fd657604051631c21962760e11b815260040160405180910390fd5b611fde6134ab565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b61203284848461207c565b61203e8484848461281e565b6111175760405162461bcd60e51b8152600401610cf290613fe9565b6000612065826122b9565b15612072575060006107d1565b611538838361291f565b61208783838361299d565b61208f6134ab565b600061209b6004611f20565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b031916909117905590506120ee6000805160206142e18339815191523361153f565b1580156121135750600083815260a86020526040902060040154600160e01b900460ff165b1561214957600083815260a860205260409020600401805460ff60e01b19169055612146816121426006611f20565b1790565b90505b826000805160206142c18339815191528284604051612169929190613d42565b60405180910390a25050505050565b6112778133612b0e565b61218c8282612b67565b6000828152600260205260409020610d939082612bd2565b6121ae8282612be7565b6000828152600260205260409020610d939082612c4e565b6121ce612c63565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461227d82848361403b565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611cc49291906140fa565b60006122c482611b6b565b6001600160401b0316421192915050565b6122dd611be7565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121fb3390565b60006115388383612cac565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123935760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cf2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461240f90613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461243b90613bd2565b80156124885780601f1061245d57610100808354040283529160200191612488565b820191906000526020600020905b81548152906001019060200180831161246b57829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612cd6565b606060006124b583612e71565b60010190506000816001600160401b038111156124d4576124d461376f565b6040519080825280601f01601f1916602001820160405280156124fe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461250857509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061257557506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612f49565b6000805b82156125d85750600082815260a860205260409020600401546001600160a01b0390811690841681036125bf5760019150506107d1565b600092835260a860205260409092206001015491612588565b5060009392505050565b60006125ed82611dbe565b90506125fd816000846001612f6e565b61260682611dbe565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126db5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cf2565b6000818152600560205260409020546001600160a01b0316156127405760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b61274e600083836001612f6e565b6000818152600560205260409020546001600160a01b0316156127b35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561291457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612862903390899088908890600401614129565b6020604051808303816000875af192505050801561289d575060408051601f3d908101601f1916820190925261289a91810190614166565b60015b6128fa573d8080156128cb576040519150601f19603f3d011682016040523d82523d6000602084013e6128d0565b606091505b5080516000036128f25760405162461bcd60e51b8152600401610cf290613fe9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611855565b506001949350505050565b60008061292b83611dbe565b9050806001600160a01b0316846001600160a01b0316148061297257506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118555750836001600160a01b031661298b84610c57565b6001600160a01b031614949350505050565b826001600160a01b03166129b082611dbe565b6001600160a01b0316146129d65760405162461bcd60e51b8152600401610cf290614183565b6001600160a01b038216612a385760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf2565b612a458383836001612f6e565b826001600160a01b0316612a5882611dbe565b6001600160a01b031614612a7e5760405162461bcd60e51b8152600401610cf290614183565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612b18828261153f565b61125357612b2581612492565b612b30836020612cd6565b604051602001612b419291906141c8565b60408051601f198184030181529082905262461bcd60e51b8252610cf291600401613732565b612b71828261153f565b6112535760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611538836001600160a01b038416612f7a565b612bf1828261153f565b156112535760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611538836001600160a01b038416612fc9565b603c5460ff16611c2d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610cf2565b6000826000018281548110612cc357612cc3613f83565b9060005260206000200154905092915050565b60606000612ce583600261423d565b612cf0906002614254565b6001600160401b03811115612d0757612d0761376f565b6040519080825280601f01601f191660200182016040528015612d31576020820181803683370190505b509050600360fc1b81600081518110612d4c57612d4c613f83565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d7b57612d7b613f83565b60200101906001600160f81b031916908160001a9053506000612d9f84600261423d565b612daa906001614254565b90505b6001811115612e22576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dde57612dde613f83565b1a60f81b828281518110612df457612df4613f83565b60200101906001600160f81b031916908160001a90535060049490941c93612e1b81614267565b9050612dad565b5083156115385760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cf2565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612eb05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612edc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612efa57662386f26fc10000830492506010015b6305f5e1008310612f12576305f5e100830492506008015b6127108310612f2657612710830492506004015b60648310612f38576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826130bc565b611117848484846130f1565b6000818152600183016020526040812054612fc1575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b600081815260018301602052604081205480156130b2576000612fed60018361427e565b85549091506000906130019060019061427e565b905081811461306657600086600001828154811061302157613021613f83565b906000526020600020015490508087600001848154811061304457613044613f83565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061307757613077614291565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b6130fd84848484613231565b600181111561316c5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610cf2565b816001600160a01b0385166131c8576131c381603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b6131eb565b836001600160a01b0316856001600160a01b0316146131eb576131eb85826132a4565b6001600160a01b0384166132075761320281613341565b61322a565b846001600160a01b0316846001600160a01b03161461322a5761322a84826133f0565b5050505050565b61323d84848484613434565b603c5460ff16156111175760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610cf2565b600060016132b18461147a565b6132bb919061427e565b6000838152603e602052604090205490915080821461330e576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f546000906133539060019061427e565b600083815260406020819052812054603f805493945090928490811061337b5761337b613f83565b9060005260206000200154905080603f838154811061339c5761339c613f83565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133d4576133d4614291565b6001900381819060005260206000200160009055905550505050565b60006133fb8361147a565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6134408284614254565b8110156134a55760008181526009602052604081208054909190613463906142a7565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a38061349d816142a7565b915050613436565b50611117565b60405180604001604052806134dd6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461127757600080fd5b60006020828403121561352f57600080fd5b813561153881613507565b60006020828403121561354c57600080fd5b5035919050565b60005b8381101561356e578181015183820152602001613556565b50506000910152565b6000815180845261358f816020860160208601613553565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135d9610100850182613577565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061153860208301846135a3565b60008083601f84011261364c57600080fd5b5081356001600160401b0381111561366357600080fd5b60208301915083602082850101111561367b57600080fd5b9250929050565b80356001600160a01b038116811461369957600080fd5b919050565b80356001600160401b038116811461369957600080fd5b60008060008060008060a087890312156136ce57600080fd5b8635955060208701356001600160401b038111156136eb57600080fd5b6136f789828a0161363a565b909650945061370a905060408801613682565b925061371860608801613682565b91506137266080880161369e565b90509295509295509295565b6020815260006115386020830184613577565b6000806040838503121561375857600080fd5b61376183613682565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561379f5761379f61376f565b604051601f8501601f19908116603f011681019082821181831017156137c7576137c761376f565b816040528093508581528686860111156137e057600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561380c57600080fd5b81356001600160401b0381111561382257600080fd5b8201601f8101841361383357600080fd5b61185584823560208401613785565b600080600083850360c081121561385857600080fd5b84359350602085013592506080603f198201121561387557600080fd5b506040840190509250925092565b60008060006060848603121561389857600080fd5b6138a184613682565b92506138af60208501613682565b9150604084013590509250925092565b600080604083850312156138d257600080fd5b823591506138e260208401613682565b90509250929050565b600080604083850312156138fe57600080fd5b823591506138e26020840161369e565b60006020828403121561392057600080fd5b6115388261369e565b6000806020838503121561393c57600080fd5b82356001600160401b0381111561395257600080fd5b61395e8582860161363a565b90969095509350505050565b60006020828403121561397c57600080fd5b61153882613682565b6000806040838503121561399857600080fd5b50508035926020909101359150565b8035801515811461369957600080fd5b600080604083850312156139ca57600080fd5b6139d383613682565b91506138e2602084016139a7565b600080600080600080600060c0888a0312156139fc57600080fd5b613a0588613682565b9650613a1360208901613682565b9550613a2160408901613682565b9450613a2f60608901613682565b9350613a3d6080890161369e565b925060a08801356001600160401b03811115613a5857600080fd5b613a648a828b0161363a565b989b979a50959850939692959293505050565b60008060008060808587031215613a8d57600080fd5b613a9685613682565b9350613aa460208601613682565b92506040850135915060608501356001600160401b03811115613ac657600080fd5b8501601f81018713613ad757600080fd5b613ae687823560208401613785565b91505092959194509250565b60008060408385031215613b0557600080fd5b613b0e83613682565b91506138e260208401613682565b600080600060408486031215613b3157600080fd5b83356001600160401b0380821115613b4857600080fd5b818601915086601f830112613b5c57600080fd5b813581811115613b6b57600080fd5b8760208260051b8501011115613b8057600080fd5b602092830195509350613b9691860190506139a7565b90509250925092565b600080600060608486031215613bb457600080fd5b613bbd84613682565b95602085013595506040909401359392505050565b600181811c90821680613be657607f821691505b602082108103610dea57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613c06565b601f821115610d9357600081815260208120601f850160051c81016020861015613c5c5750805b601f850160051c820191505b81811015613c7b57828155600101613c68565b505050505050565b81516001600160401b03811115613c9c57613c9c61376f565b613cb081613caa8454613bd2565b84613c35565b602080601f831160018114613ce55760008415613ccd5750858301515b600019600386901b1c1916600185901b178555613c7b565b600085815260208120601f198616915b82811015613d1457888601518255948401946001909101908401613cf5565b5085821015613d325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b82815260406020820152600061185560408301846135a3565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d9881613bd2565b8061016088015261018085831660008114613dba5760018114613dd457613e05565b60ff1984168983015282151560051b890182019450613e05565b8560005260208060002060005b85811015613dfc5781548c8201860152908901908201613de1565b8b018401965050505b50505050613e556080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e7c8285838901613553565b8184019150601760f91b8252600160008654613e9781613bd2565b8184168015613ead5760018114613ec657613ef6565b60ff198316878601528115158202870185019350613ef6565b896000528560002060005b83811015613eec578154898201880152908601908701613ed1565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613f2d57600080fd5b611538826139a7565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613fab818460208901613553565b845190830190613fbf818360208901613553565b602f60f81b91019081528351613fdc816001840160208801613553565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b038311156140525761405261376f565b614066836140608354613bd2565b83613c35565b6000601f84116001811461409a57600085156140825750838201355b600019600387901b1c1916600186901b17835561322a565b600083815260209020601f19861690835b828110156140cb57868501358255602094850194600190920191016140ab565b50868210156140e85760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061415c90830184613577565b9695505050505050565b60006020828403121561417857600080fd5b815161153881613507565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614200816017850160208801613553565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614231816028840160208801613553565b01602801949350505050565b80820281158282048414176107d1576107d1613c06565b808201808211156107d1576107d1613c06565b60008161427657614276613c06565b506000190190565b818103818111156107d1576107d1613c06565b634e487b7160e01b600052603160045260246000fd5b6000600182016142b9576142b9613c06565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212203af37aa4cc902ad4452525f14c8a6ffb435cb935af71e1d9efae7639ca2d3e8b64736f6c63430008150033", + "chainId": 2021, + "contractName": "RNSUnified", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102f15760003560e01c806355a5133b1161019d578063abfaf005116100e9578063dbd18388116100a2578063ec63b01f1161007c578063ec63b01f1461072b578063f1e379081461073e578063fc284d1114610765578063fd3fa9191461077857600080fd5b8063dbd18388146106c9578063e63ab1e9146106da578063e985e9c5146106ef57600080fd5b8063abfaf0051461065c578063b88d4fde1461066f578063b967169014610682578063c87b56dd14610690578063ca15c873146106a3578063d547741f146106b657600080fd5b80639010d07c1161015657806396e494e81161013057806396e494e814610626578063a217fddf14610639578063a22cb46514610641578063a2309ff81461065457600080fd5b80639010d07c146105e157806391d14854146105f457806395d89b411461060757600080fd5b806355a5133b1461058257806355f804b3146105955780635c975abb146105a85780636352211e146105b357806370a08231146105c65780638456cb59146105d957600080fd5b80631cfa6ec01161025c57806333855d9f1161021557806342842e0e116101ef57806342842e0e1461051e57806342966c68146105315780634f6ccce7146105445780635569f33d1461055757600080fd5b806333855d9f146104ee57806336568abe146105035780633f4ba83a1461051657600080fd5b80631cfa6ec01461046b57806323b872dd1461047e578063248a9ca31461049157806328ed4f6c146104b55780632f2ff15d146104c85780632f745c59146104db57600080fd5b8063095ea7b3116102ae578063095ea7b3146103f5578063098799621461040a578063131a7e241461041d578063141a468c1461043057806318160ddd146104505780631a7a98e21461045857600080fd5b806301ffc9a7146102f657806303e9e6091461031e5780630570891f1461033e57806306fdde0314610370578063081812fc146103a7578063092c5b3b146103d2575b600080fd5b61030961030436600461351d565b6107ab565b60405190151581526020015b60405180910390f35b61033161032c36600461353a565b6107d7565b6040516103159190613627565b61035161034c3660046136b5565b61094a565b604080516001600160401b039093168352602083019190915201610315565b604080518082019091526012815271526f6e696e204e616d65205365727669636560701b60208201525b6040516103159190613732565b6103ba6103b536600461353a565b610c57565b6040516001600160a01b039091168152602001610315565b6103e760008051602061430183398151915281565b604051908152602001610315565b610408610403366004613745565b610c7e565b005b6103e76104183660046137fa565b610d98565b61039a61042b36600461353a565b610da3565b6103e761043e36600461353a565b60096020526000908152604090205481565b603f546103e7565b61039a61046636600461353a565b610df0565b610408610479366004613842565b610efc565b61040861048c366004613883565b611091565b6103e761049f36600461353a565b6000908152600160208190526040909120015490565b6104086104c33660046138bf565b6110c3565b6104086104d63660046138bf565b61111d565b6103e76104e9366004613745565b611143565b6103e76000805160206142e183398151915281565b6104086105113660046138bf565b6111d9565b610408611257565b61040861052c366004613883565b61127a565b61040861053f36600461353a565b611295565b6103e761055236600461353a565b6112c3565b61056a6105653660046138eb565b611356565b6040516001600160401b039091168152602001610315565b61040861059036600461390e565b61141b565b6104086105a3366004613929565b611444565b603c5460ff16610309565b6103ba6105c136600461353a565b611459565b6103e76105d436600461396a565b61147a565b610408611500565b6103ba6105ef366004613985565b611520565b6103096106023660046138bf565b61153f565b604080518082019091526003815262524e5360e81b602082015261039a565b61030961063436600461353a565b61156a565b6103e7600081565b61040861064f3660046139b7565b611595565b6073546103e7565b61040861066a3660046139e1565b6115a0565b61040861067d366004613a77565b6117b8565b61056a6001600160401b0381565b61039a61069e36600461353a565b6117ea565b6103e76106b136600461353a565b61185d565b6104086106c43660046138bf565b611874565b60a7546001600160401b031661056a565b6103e760008051602061432183398151915281565b6103096106fd366004613af2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b610408610739366004613b1c565b61189a565b6103e77f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b281565b6104086107733660046138eb565b611984565b61078b610786366004613b9f565b611a05565b6040805192151583526001600160e01b0319909116602083015201610315565b60006107b682611b46565b806107d157506001600160e01b03198216630106c78f60e21b145b92915050565b6107df6134ab565b600082815260a8602052604090819020815160a081018352815460ff1692810192835260018201546060820152600282018054919384929091849160808501919061082990613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461085590613bd2565b80156108a25780601f10610877576101008083540402835291602001916108a2565b820191906000526020600020905b81548152906001019060200180831161088557829003601f168201915b5050509190925250505081526040805160808101825260038401546001600160a01b039081168252600490940154938416602080830191909152600160a01b85046001600160401b031692820192909252600160e01b90930460ff16151560608401520152905061091282611459565b6020808301516001600160a01b0390921691015261092f82611b6b565b60208201516001600160401b03909116604090910152919050565b600080610955611be7565b61095f3389611c2f565b61097b576040516282b42960e81b815260040160405180910390fd5b6109bb8888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4b92505050565b90506109c68161156a565b6109e35760405163a3b8915f60e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031615610a0957610a0981611c61565b610a138482611cd0565b610a28426001600160401b0380861690611ce3565b9150610a348883611d19565b610a3c6134ab565b604080516080810182526001600160a01b03808916825287166020808301919091526001600160401b03861682840152600085815260a88083528482206004015460ff600160e01b9091048116151560608087019190915287850195909552855194850186528e83529252929092205490918291610abc91166001613c1c565b60ff1681526020018a815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081527f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e28914801590610b3c5750805151600360ff90911610155b15610b5a576040516378a0027360e11b815260040160405180910390fd5b600082815260a8602090815260409182902083518051825460ff191660ff909116178255918201516001820155918101518392919082906002820190610ba09082613c83565b50505060209182015180516003830180546001600160a01b039283166001600160a01b031990911617905592810151600490920180546040808401516060909401511515600160e01b0260ff60e01b196001600160401b03909516600160a01b026001600160e01b031990931695909616949094171791909116929092179091555182906000805160206142c183398151915290610c4390600019908590613d42565b60405180910390a250965096945050505050565b6000610c6282611d5f565b506000908152600760205260409020546001600160a01b031690565b6000610c8982611dbe565b9050806001600160a01b0316836001600160a01b031603610cfb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610d175750610d1781336106fd565b610d895760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610cf2565b610d938383611e1e565b505050565b60006107d182611e8c565b606081610daf81611d5f565b600083815260a8602090815260408083206009835292819020549051610dd89392879101613d5b565b60405160208183030381529060405291505b50919050565b606081600003610e0e57505060408051602081019091526000815290565b600082815260a860205260409020600281018054610e2b90613bd2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5790613bd2565b8015610ea45780601f10610e7957610100808354040283529160200191610ea4565b820191906000526020600020905b815481529060010190602001808311610e8757829003601f168201915b50505050509150806001015492505b8215610dea5750600082815260a860209081526040918290209151610edf918491600285019101613e69565b604051602081830303815290604052915080600101549250610eb3565b610f04611be7565b8282610f108282611eff565b610f186134ab565b600086815260a860205260409020600301610f3d610f366006611f20565b8790611f42565b15610f7e57610f526080860160608701613f1b565b6020830151901515606090910181905260018201805460ff60e01b1916600160e01b9092029190911790555b610f8b610f366005611f20565b15610fc157610fc187610fa4606088016040890161390e565b60208501516001600160401b039091166040909101819052611f4e565b610fce610f366003611f20565b1561100457610fe0602086018661396a565b60208301516001600160a01b039091169081905281546001600160a01b0319161781555b866000805160206142c18339815191528784604051611024929190613d42565b60405180910390a2611039610f366004611f20565b1561108857600087815260a8602090815260409182902060040154611088926001600160a01b039091169161107291890190890161396a565b8960405180602001604052806000815250612027565b50505050505050565b61109c335b8261205a565b6110b85760405162461bcd60e51b8152600401610cf290613f36565b610d9383838361207c565b6110cb611be7565b816110d66004611f20565b6110e08282611eff565b600084815260a860209081526040808320600401548151928301909152918152611117916001600160a01b03169085908790612027565b50505050565b6000828152600160208190526040909120015461113981612178565b610d938383612182565b600061114e8361147a565b82106111b05760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610cf2565b506001600160a01b03919091166000908152603d60209081526040808320938352929052205490565b6001600160a01b03811633146112495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610cf2565b61125382826121a4565b5050565b60008051602061432183398151915261126f81612178565b6112776121c6565b50565b610d93838383604051806020016040528060008152506117b8565b61129e33611096565b6112ba5760405162461bcd60e51b8152600401610cf290613f36565b61127781611c61565b60006112ce603f5490565b82106113315760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610cf2565b603f828154811061134457611344613f83565b90600052602060002001549050919050565b6000611360611be7565b60008051602061430183398151915261137881612178565b6113806134ab565b600085815260a860205260409020600401546113b2906001600160401b03600160a01b90910481169086811690611ce3565b6020820180516001600160401b039092166040928301525101516113d7908690611f4e565b6020810151604001519250846000805160206142c18339815191526113fc6005611f20565b8360405161140b929190613d42565b60405180910390a2505092915050565b611423611be7565b60008051602061430183398151915261143b81612178565b61125382612218565b600061144f81612178565b610d938383612270565b6000611464826122b9565b1561147157506000919050565b6107d182611dbe565b60006001600160a01b0382166114e45760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610cf2565b506001600160a01b031660009081526006602052604090205490565b60008051602061432183398151915261151881612178565b6112776122d5565b60008281526002602052604081206115389083612312565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061158d61157883611b6b565b60a7546001600160401b03918216911661231e565b421192915050565b611253338383612332565b600054610100900460ff16158080156115c05750600054600160ff909116105b806115da5750303b1580156115da575060005460ff166001145b61163d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610cf2565b6000805460ff191660011790558015611660576000805461ff0019166101001790555b61166b600089612182565b61168360008051602061432183398151915288612182565b61169b60008051602061430183398151915287612182565b6116b36000805160206142e183398151915286612182565b6116bd8383612270565b6116c684612218565b6116d1886000611cd0565b6116d96134ab565b6020808201516001600160401b03604090910152600080805260a89091527f89f57ae4d64764caecd045b845cfc13a5b86ba807e4a61f32108661671e72867805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790556000805160206142c18339815191526117506005611f20565b8360405161175f929190613d42565b60405180910390a25080156117ae576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6117c2338361205a565b6117de5760405162461bcd60e51b8152600401610cf290613f36565b61111784848484612027565b6060816117f681611d5f565b6000611800612400565b905060008151116118205760405180602001604052806000815250611855565b8061182a30612492565b611833866124a8565b60405160200161184593929190613f99565b6040516020818303038152906040525b949350505050565b60008181526002602052604081206107d19061253a565b6000828152600160208190526040909120015461189081612178565b610d9383836121a4565b6000805160206142e18339815191526118b281612178565b60006118be6006611f20565b905060006118ca6134ab565b602081015185151560609091015260005b868110156117ae578787828181106118f5576118f5613f83565b60209081029290920135600081815260a89093526040909220600401549194505060ff600160e01b9091041615158615151461197c57600083815260a8602052604090819020600401805460ff60e01b1916600160e01b891515021790555183906000805160206142c1833981519152906119739087908690613d42565b60405180910390a25b6001016118db565b61198c611be7565b6000805160206143018339815191526119a481612178565b6119ac6134ab565b60208101516001600160401b03841660409091018190526119ce908590611f4e565b836000805160206142c18339815191526119e86005611f20565b836040516119f7929190613d42565b60405180910390a250505050565b600080611a13836007611f42565b15611a2a57506000905063da698a4d60e01b611b3e565b6000848152600560205260409020546001600160a01b0316611a585750600090506304a3dbd560e51b611b3e565b611a6c611a656006611f20565b8490611f42565b8015611a8d5750611a8b6000805160206142e18339815191528661153f565b155b15611aa457506000905063c24b0f3f60e01b611b3e565b6000611abe6000805160206143018339815191528761153f565b9050611ad4611acd6005611f20565b8590611f42565b8015611ade575080155b15611af757506000915063ed4b948760e01b9050611b3e565b611b02846018611f42565b8015611b1c57508080611b1a5750611b1a8686611c2f565b155b15611b345750600091506282b42960e81b9050611b3e565b5060019150600090505b935093915050565b60006001600160e01b0319821663780e9d6360e01b14806107d157506107d182612544565b600081815260056020526040812054611bae907f87a2b33e0b98030e29c3d23d732aa654f29b298e3891758d5f02a8b01c4840b2906001600160a01b031661153f565b15611bc157506001600160401b03919050565b50600090815260a86020526040902060040154600160a01b90046001600160401b031690565b603c5460ff1615611c2d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610cf2565b565b6000611c3b838361205a565b8061153857506115388383612584565b6000918252805160209182012090526040902090565b611c6a816125e2565b600081815260a8602052604090206003810180546001600160a01b031916905560040180546001600160e81b0319169055611ca36134ab565b816000805160206142c1833981519152601883604051611cc4929190613d42565b60405180910390a25050565b6073805460010190556112538282612685565b600081841180611cf257508183115b15611cfe575080611538565b611d08848461231e565b905081811115611538575092915050565b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611156112535760405163da87d84960e01b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b03166112775760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b6000818152600560205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610cf2565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e5382611dbe565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081518015611ef55760006020840160018303810160008052805b828110611ef057828114602e600183035160f81c1480821715611ee557600186848603030180842060205260406000206000526001810187019650505b505060001901611ea8565b505050505b5050600051919050565b600080611f0d338585611a05565b9150915081611117578060005260046000fd5b6000816006811115611f3457611f34613f05565b60ff166001901b9050919050565b60008282161515611538565b600082815260a86020526040902060010154611f6a9082611d19565b611f738261156a565b15611f9157604051631395a92360e01b815260040160405180910390fd5b600082815260a860205260409020600401546001600160401b03600160a01b909104811690821611611fd657604051631c21962760e11b815260040160405180910390fd5b611fde6134ab565b6020908101516001600160401b03929092166040928301819052600093845260a89091529120600401805467ffffffffffffffff60a01b1916600160a01b909202919091179055565b61203284848461207c565b61203e8484848461281e565b6111175760405162461bcd60e51b8152600401610cf290613fe9565b6000612065826122b9565b15612072575060006107d1565b611538838361291f565b61208783838361299d565b61208f6134ab565b600061209b6004611f20565b6020838101516001600160a01b038716908201819052600086815260a8909252604090912060040180546001600160a01b031916909117905590506120ee6000805160206142e18339815191523361153f565b1580156121135750600083815260a86020526040902060040154600160e01b900460ff165b1561214957600083815260a860205260409020600401805460ff60e01b19169055612146816121426006611f20565b1790565b90505b826000805160206142c18339815191528284604051612169929190613d42565b60405180910390a25050505050565b6112778133612b0e565b61218c8282612b67565b6000828152600260205260409020610d939082612bd2565b6121ae8282612be7565b6000828152600260205260409020610d939082612c4e565b6121ce612c63565b603c805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60a780546001600160401b03831667ffffffffffffffff199091168117909155604080519182525133917f2f8e6689e76cebc7cf99a782594bd18a73b8d1a0fe640c99fc580dcd4de7cd1d919081900360200190a250565b607461227d82848361403b565b50336001600160a01b03167ff765b68b6ff897de964353a0eb194e46ecea8772879eb880b4b0fd277124922c8383604051611cc49291906140fa565b60006122c482611b6b565b6001600160401b0316421192915050565b6122dd611be7565b603c805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121fb3390565b60006115388383612cac565b818101828110156107d157506000196107d1565b816001600160a01b0316836001600160a01b0316036123935760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610cf2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606074805461240f90613bd2565b80601f016020809104026020016040519081016040528092919081815260200182805461243b90613bd2565b80156124885780601f1061245d57610100808354040283529160200191612488565b820191906000526020600020905b81548152906001019060200180831161246b57829003601f168201915b5050505050905090565b60606107d16001600160a01b0383166014612cd6565b606060006124b583612e71565b60010190506000816001600160401b038111156124d4576124d461376f565b6040519080825280601f01601f1916602001820160405280156124fe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461250857509392505050565b60006107d1825490565b60006001600160e01b031982166380ac58cd60e01b148061257557506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612f49565b6000805b82156125d85750600082815260a860205260409020600401546001600160a01b0390811690841681036125bf5760019150506107d1565b600092835260a860205260409092206001015491612588565b5060009392505050565b60006125ed82611dbe565b90506125fd816000846001612f6e565b61260682611dbe565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0382166126db5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610cf2565b6000818152600560205260409020546001600160a01b0316156127405760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b61274e600083836001612f6e565b6000818152600560205260409020546001600160a01b0316156127b35760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610cf2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561291457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612862903390899088908890600401614129565b6020604051808303816000875af192505050801561289d575060408051601f3d908101601f1916820190925261289a91810190614166565b60015b6128fa573d8080156128cb576040519150601f19603f3d011682016040523d82523d6000602084013e6128d0565b606091505b5080516000036128f25760405162461bcd60e51b8152600401610cf290613fe9565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611855565b506001949350505050565b60008061292b83611dbe565b9050806001600160a01b0316846001600160a01b0316148061297257506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118555750836001600160a01b031661298b84610c57565b6001600160a01b031614949350505050565b826001600160a01b03166129b082611dbe565b6001600160a01b0316146129d65760405162461bcd60e51b8152600401610cf290614183565b6001600160a01b038216612a385760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610cf2565b612a458383836001612f6e565b826001600160a01b0316612a5882611dbe565b6001600160a01b031614612a7e5760405162461bcd60e51b8152600401610cf290614183565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612b18828261153f565b61125357612b2581612492565b612b30836020612cd6565b604051602001612b419291906141c8565b60408051601f198184030181529082905262461bcd60e51b8252610cf291600401613732565b612b71828261153f565b6112535760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611538836001600160a01b038416612f7a565b612bf1828261153f565b156112535760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611538836001600160a01b038416612fc9565b603c5460ff16611c2d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610cf2565b6000826000018281548110612cc357612cc3613f83565b9060005260206000200154905092915050565b60606000612ce583600261423d565b612cf0906002614254565b6001600160401b03811115612d0757612d0761376f565b6040519080825280601f01601f191660200182016040528015612d31576020820181803683370190505b509050600360fc1b81600081518110612d4c57612d4c613f83565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d7b57612d7b613f83565b60200101906001600160f81b031916908160001a9053506000612d9f84600261423d565b612daa906001614254565b90505b6001811115612e22576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dde57612dde613f83565b1a60f81b828281518110612df457612df4613f83565b60200101906001600160f81b031916908160001a90535060049490941c93612e1b81614267565b9050612dad565b5083156115385760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610cf2565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612eb05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612edc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612efa57662386f26fc10000830492506010015b6305f5e1008310612f12576305f5e100830492506008015b6127108310612f2657612710830492506004015b60648310612f38576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826130bc565b611117848484846130f1565b6000818152600183016020526040812054612fc1575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b600081815260018301602052604081205480156130b2576000612fed60018361427e565b85549091506000906130019060019061427e565b905081811461306657600086600001828154811061302157613021613f83565b906000526020600020015490508087600001848154811061304457613044613f83565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061307757613077614291565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b6130fd84848484613231565b600181111561316c5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610cf2565b816001600160a01b0385166131c8576131c381603f80546000838152604060208190528120829055600182018355919091527fc03004e3ce0784bf68186394306849f9b7b1200073105cd9aeb554a1802b58fd0155565b6131eb565b836001600160a01b0316856001600160a01b0316146131eb576131eb85826132a4565b6001600160a01b0384166132075761320281613341565b61322a565b846001600160a01b0316846001600160a01b03161461322a5761322a84826133f0565b5050505050565b61323d84848484613434565b603c5460ff16156111175760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610cf2565b600060016132b18461147a565b6132bb919061427e565b6000838152603e602052604090205490915080821461330e576001600160a01b0384166000908152603d602090815260408083208584528252808320548484528184208190558352603e90915290208190555b506000918252603e602090815260408084208490556001600160a01b039094168352603d81528383209183525290812055565b603f546000906133539060019061427e565b600083815260406020819052812054603f805493945090928490811061337b5761337b613f83565b9060005260206000200154905080603f838154811061339c5761339c613f83565b600091825260208083209091019290925582815260409182905281812084905585815290812055603f8054806133d4576133d4614291565b6001900381819060005260206000200160009055905550505050565b60006133fb8361147a565b6001600160a01b039093166000908152603d602090815260408083208684528252808320859055938252603e9052919091209190915550565b815b6134408284614254565b8110156134a55760008181526009602052604081208054909190613463906142a7565b918290555060405182907fcc2c68164f9f7f0c063ba98bcf89498c0f3f5e3acc32bf4ab46195ecb489c13b90600090a38061349d816142a7565b915050613436565b50611117565b60405180604001604052806134dd6040518060600160405280600060ff16815260200160008152602001606081525090565b81526040805160808101825260008082526020828101829052928201819052606082015291015290565b6001600160e01b03198116811461127757600080fd5b60006020828403121561352f57600080fd5b813561153881613507565b60006020828403121561354c57600080fd5b5035919050565b60005b8381101561356e578181015183820152602001613556565b50506000910152565b6000815180845261358f816020860160208601613553565b601f01601f19169290920160200192915050565b805160a0808452815160ff1690840152602081015160c084015260400151606060e08401526000906135d9610100850182613577565b9050602083015160018060a01b03808251166020870152806020830151166040870152506001600160401b036040820151166060860152606081015115156080860152508091505092915050565b60208152600061153860208301846135a3565b60008083601f84011261364c57600080fd5b5081356001600160401b0381111561366357600080fd5b60208301915083602082850101111561367b57600080fd5b9250929050565b80356001600160a01b038116811461369957600080fd5b919050565b80356001600160401b038116811461369957600080fd5b60008060008060008060a087890312156136ce57600080fd5b8635955060208701356001600160401b038111156136eb57600080fd5b6136f789828a0161363a565b909650945061370a905060408801613682565b925061371860608801613682565b91506137266080880161369e565b90509295509295509295565b6020815260006115386020830184613577565b6000806040838503121561375857600080fd5b61376183613682565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561379f5761379f61376f565b604051601f8501601f19908116603f011681019082821181831017156137c7576137c761376f565b816040528093508581528686860111156137e057600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561380c57600080fd5b81356001600160401b0381111561382257600080fd5b8201601f8101841361383357600080fd5b61185584823560208401613785565b600080600083850360c081121561385857600080fd5b84359350602085013592506080603f198201121561387557600080fd5b506040840190509250925092565b60008060006060848603121561389857600080fd5b6138a184613682565b92506138af60208501613682565b9150604084013590509250925092565b600080604083850312156138d257600080fd5b823591506138e260208401613682565b90509250929050565b600080604083850312156138fe57600080fd5b823591506138e26020840161369e565b60006020828403121561392057600080fd5b6115388261369e565b6000806020838503121561393c57600080fd5b82356001600160401b0381111561395257600080fd5b61395e8582860161363a565b90969095509350505050565b60006020828403121561397c57600080fd5b61153882613682565b6000806040838503121561399857600080fd5b50508035926020909101359150565b8035801515811461369957600080fd5b600080604083850312156139ca57600080fd5b6139d383613682565b91506138e2602084016139a7565b600080600080600080600060c0888a0312156139fc57600080fd5b613a0588613682565b9650613a1360208901613682565b9550613a2160408901613682565b9450613a2f60608901613682565b9350613a3d6080890161369e565b925060a08801356001600160401b03811115613a5857600080fd5b613a648a828b0161363a565b989b979a50959850939692959293505050565b60008060008060808587031215613a8d57600080fd5b613a9685613682565b9350613aa460208601613682565b92506040850135915060608501356001600160401b03811115613ac657600080fd5b8501601f81018713613ad757600080fd5b613ae687823560208401613785565b91505092959194509250565b60008060408385031215613b0557600080fd5b613b0e83613682565b91506138e260208401613682565b600080600060408486031215613b3157600080fd5b83356001600160401b0380821115613b4857600080fd5b818601915086601f830112613b5c57600080fd5b813581811115613b6b57600080fd5b8760208260051b8501011115613b8057600080fd5b602092830195509350613b9691860190506139a7565b90509250925092565b600080600060608486031215613bb457600080fd5b613bbd84613682565b95602085013595506040909401359392505050565b600181811c90821680613be657607f821691505b602082108103610dea57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156107d1576107d1613c06565b601f821115610d9357600081815260208120601f850160051c81016020861015613c5c5750805b601f850160051c820191505b81811015613c7b57828155600101613c68565b505050505050565b81516001600160401b03811115613c9c57613c9c61376f565b613cb081613caa8454613bd2565b84613c35565b602080601f831160018114613ce55760008415613ccd5750858301515b600019600386901b1c1916600185901b178555613c7b565b600085815260208120601f198616915b82811015613d1457888601518255948401946001909101908401613cf5565b5085821015613d325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b82815260406020820152600061185560408301846135a3565b6060815260a0606082015260ff845416610100820152600060018086015461012084015260028601606061014085015260008154613d9881613bd2565b8061016088015261018085831660008114613dba5760018114613dd457613e05565b60ff1984168983015282151560051b890182019450613e05565b8560005260208060002060005b85811015613dfc5781548c8201860152908901908201613de1565b8b018401965050505b50505050613e556080860160038a0180546001600160a01b03908116835260019190910154908116602083015260a081901c6001600160401b0316604083015260e01c60ff161515606090910152565b602085019690965250505060400152919050565b600083516020613e7c8285838901613553565b8184019150601760f91b8252600160008654613e9781613bd2565b8184168015613ead5760018114613ec657613ef6565b60ff198316878601528115158202870185019350613ef6565b896000528560002060005b83811015613eec578154898201880152908601908701613ed1565b5050848288010193505b50919998505050505050505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215613f2d57600080fd5b611538826139a7565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60008451613fab818460208901613553565b845190830190613fbf818360208901613553565b602f60f81b91019081528351613fdc816001840160208801613553565b0160010195945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160401b038311156140525761405261376f565b614066836140608354613bd2565b83613c35565b6000601f84116001811461409a57600085156140825750838201355b600019600387901b1c1916600186901b17835561322a565b600083815260209020601f19861690835b828110156140cb57868501358255602094850194600190920191016140ab565b50868210156140e85760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061415c90830184613577565b9695505050505050565b60006020828403121561417857600080fd5b815161153881613507565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614200816017850160208801613553565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614231816028840160208801613553565b01602801949350505050565b80820281158282048414176107d1576107d1613c06565b808201808211156107d1576107d1613c06565b60008161427657614276613c06565b506000190190565b818103818111156107d1576107d1613c06565b634e487b7160e01b600052603160045260246000fd5b6000600182016142b9576142b9613c06565b506001019056fe1c440effe366cd7c439a4890f8be2342fcaca9b4a192ce8cf2b0e76511b36eba9e4a939112df4627ab5078e49dd57d2c45b4cffd9ae0b912f9fc355e5b1080387b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335765d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa26469706673582212203af37aa4cc902ad4452525f14c8a6ffb435cb935af71e1d9efae7639ca2d3e8b64736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "methods": { + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "available(uint256)": { + "details": "Returns true if the specified name is available for registration. Note: Only available after passing the grace period." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "bulkSetProtected(uint256[],bool)": { + "details": "Sets the protected status of a list of ids. Update operation for {Record.mut.protected}. Requirements: - The method caller must have protected setter role. Emits events {RecordUpdated}." + }, + "burn(uint256)": { + "details": "Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator." + }, + "canSetRecord(address,uint256,uint256)": { + "details": "Returns whether the requester is able to modify the record based on the updated index. Note: This method strictly follows the permission of struct {MutableRecord}." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "getDomain(uint256)": { + "details": "Returns the domain name of id." + }, + "getGracePeriod()": { + "details": "Returns the grace period in second(s). Note: This period affects the availability of the domain." + }, + "getRecord(uint256)": { + "details": "Returns all record of a domain. Reverts if the token is non existent." + }, + "getRoleAdmin(bytes32)": { + "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + }, + "getRoleMember(bytes32,uint256)": { + "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information." + }, + "getRoleMemberCount(bytes32)": { + "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role." + }, + "grantRole(bytes32,address)": { + "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + }, + "hasRole(bytes32,address)": { + "details": "Returns `true` if `account` has been granted `role`." + }, + "isApprovedForAll(address,address)": { + "details": "See {IERC721-isApprovedForAll}." + }, + "mint(uint256,string,address,address,uint64)": { + "details": "Mints token for subnode. Requirements: - The token must be available. - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}. Emits an event {RecordUpdated}.", + "params": { + "duration": "Duration in second(s) to expire. Leave 0 to set as parent.", + "label": "The domain label. Eg, label is duke for domain duke.ron.", + "owner": "The token owner.", + "parentId": "The parent node to mint or create subnode.", + "resolver": "The resolver address." + } + }, + "name()": { + "details": "Override {IERC721Metadata-name}." + }, + "namehash(string)": { + "details": "Returns the name hash output of a domain." + }, + "ownerOf(uint256)": { + "details": "Override {ERC721-ownerOf}." + }, + "pause()": { + "details": "Pauses all token transfers. See {ERC721Pausable} and {Pausable-_pause}. Requirements: - the caller must have the `PAUSER_ROLE`." + }, + "paused()": { + "details": "Returns true if the contract is paused, and false otherwise." + }, + "reclaim(uint256,address)": { + "details": "Reclaims ownership. Update operation for {Record.mut.owner}. Requirements: - The method caller should have controller role. - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}. Emits an event {RecordUpdated}." + }, + "renew(uint256,uint64)": { + "details": "Renews token. Update operation for {Record.mut.expiry}. Requirements: - The method caller should have controller role. Emits an event {RecordUpdated}." + }, + "renounceRole(bytes32,address)": { + "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + }, + "revokeRole(bytes32,address)": { + "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "setBaseURI(string)": { + "details": "Sets the base uri. Requirements: - The method caller must be contract owner." + }, + "setExpiry(uint256,uint64)": { + "details": "Sets expiry time for a token. Update operation for {Record.mut.expiry}. Requirements: - The method caller must have controller role. Emits an event {RecordUpdated}." + }, + "setGracePeriod(uint64)": { + "details": "Sets the grace period in second(s). Requirements: - The method caller must have controller role. Note: This period affects the availability of the domain." + }, + "setRecord(uint256,uint256,(address,address,uint64,bool))": { + "details": "Sets record of existing token. Update operation for {Record.mut}. Requirements: - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}. Emits an event {RecordUpdated}." + }, + "stateOf(uint256)": { + "details": "Returns the state of the `_tokenId` ERC721. Requirements: - The token exists." + }, + "supportsInterface(bytes4)": { + "details": "Override {ERC165-supportsInterface}." + }, + "symbol()": { + "details": "Override {IERC721Metadata-symbol}." + }, + "tokenByIndex(uint256)": { + "details": "See {IERC721Enumerable-tokenByIndex}." + }, + "tokenOfOwnerByIndex(address,uint256)": { + "details": "See {IERC721Enumerable-tokenOfOwnerByIndex}." + }, + "tokenURI(uint256)": { + "details": "Override {IERC721Metadata-tokenURI}." + }, + "totalMinted()": { + "details": "Returns the total minted ids. Note: Burning id will not affect `totalMinted`." + }, + "totalSupply()": { + "details": "See {IERC721Enumerable-totalSupply}." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + }, + "unpause()": { + "details": "Unpauses all token transfers. See {ERC721Pausable} and {Pausable-_unpause}. Requirements: - the caller must have the `PAUSER_ROLE`." + } + }, + "events": { + "Approval(address,address,uint256)": { + "details": "Emitted when `owner` enables `approved` to manage the `tokenId` token." + }, + "ApprovalForAll(address,address,bool)": { + "details": "Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets." + }, + "BaseURIUpdated(address,string)": { + "details": "Emitted when a base URI is updated." + }, + "GracePeriodUpdated(address,uint64)": { + "details": "Emitted when the grace period for all domain is updated." + }, + "Initialized(uint8)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "NonceUpdated(uint256,uint256)": { + "details": "Emitted when the token nonce is updated" + }, + "Paused(address)": { + "details": "Emitted when the pause is triggered by `account`." + }, + "RecordUpdated(uint256,uint256,((uint8,uint256,string),(address,address,uint64,bool)))": { + "details": "Emitted when the record of node is updated.", + "params": { + "indicator": "The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right to left) needs to be updated.", + "record": "The updated fields." + } + }, + "RoleAdminChanged(bytes32,bytes32,bytes32)": { + "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + }, + "RoleGranted(bytes32,address,address)": { + "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + }, + "RoleRevoked(bytes32,address,address)": { + "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + }, + "Transfer(address,address,uint256)": { + "details": "Emitted when `tokenId` token is transferred from `from` to `to`." + }, + "Unpaused(address)": { + "details": "Emitted when the pause is lifted by `account`." + } + }, + "errors": { + "CannotSetImmutableField()": [ + { + "details": "Error: Attempting to set an immutable field, which cannot be modified." + } + ], + "ExceedParentExpiry()": [ + { + "details": "Error: The provided id expiry is greater than parent id expiry." + } + ], + "Expired()": [ + { + "details": "Error: The provided token id is expired." + } + ], + "ExpiryTimeMustBeLargerThanTheOldOne()": [ + { + "details": "Error: Attempting to set an expiry time that is not larger than the previous one." + } + ], + "MissingControllerRole()": [ + { + "details": "Error: Missing controller role required for modification." + } + ], + "MissingProtectedSettlerRole()": [ + { + "details": "Error: Missing protected settler role required for modification." + } + ], + "NameMustBeRegisteredOrInGracePeriod()": [ + { + "details": "Error: The provided name must be registered or is in a grace period." + } + ], + "ThirdLevelDomainUnallowed()": [ + { + "details": "Error: The provided token id's depth level is greater than 3." + } + ], + "Unauthorized()": [ + { + "details": "Error: The sender lacks the necessary permissions." + } + ], + "Unavailable()": [ + { + "details": "Error: The provided name is unavailable for registration." + } + ], + "Unexists()": [ + { + "details": "Error: The provided token id is unexists." + } + ] + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSetImmutableField\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExceedParentExpiry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Expired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpiryTimeMustBeLargerThanTheOldOne\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingControllerRole\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingProtectedSettlerRole\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NameMustBeRegisteredOrInGracePeriod\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThirdLevelDomainUnallowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Unexists\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newURI\",\"type\":\"string\"}],\"name\":\"BaseURIUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"newGracePeriod\",\"type\":\"uint64\"}],\"name\":\"GracePeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"NonceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"node\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"ModifyingIndicator\",\"name\":\"indicator\",\"type\":\"uint256\"},{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"depth\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"parentId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct INSUnified.ImmutableRecord\",\"name\":\"immut\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"protected\",\"type\":\"bool\"}],\"internalType\":\"struct INSUnified.MutableRecord\",\"name\":\"mut\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct INSUnified.Record\",\"name\":\"record\",\"type\":\"tuple\"}],\"name\":\"RecordUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CONTROLLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EXPIRY\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROTECTED_SETTLER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RESERVATION_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"available\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"protected\",\"type\":\"bool\"}],\"name\":\"bulkSetProtected\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"requester\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"ModifyingIndicator\",\"name\":\"indicator\",\"type\":\"uint256\"}],\"name\":\"canSetRecord\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getDomain\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"domain\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGracePeriod\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRecord\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"depth\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"parentId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"}],\"internalType\":\"struct INSUnified.ImmutableRecord\",\"name\":\"immut\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"protected\",\"type\":\"bool\"}],\"internalType\":\"struct INSUnified.MutableRecord\",\"name\":\"mut\",\"type\":\"tuple\"}],\"internalType\":\"struct INSUnified.Record\",\"name\":\"record\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pauser\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"protectedSettler\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"gracePeriod\",\"type\":\"uint64\"},{\"internalType\":\"string\",\"name\":\"baseTokenURI\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"parentId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"label\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"expiryTime\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"namehash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashed\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"reclaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"renew\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"baseTokenURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"}],\"name\":\"setExpiry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"gracePeriod\",\"type\":\"uint64\"}],\"name\":\"setGracePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"ModifyingIndicator\",\"name\":\"indicator\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"expiry\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"protected\",\"type\":\"bool\"}],\"internalType\":\"struct INSUnified.MutableRecord\",\"name\":\"mutRecord\",\"type\":\"tuple\"}],\"name\":\"setRecord\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"stateOf\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalMinted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CannotSetImmutableField()\":[{\"details\":\"Error: Attempting to set an immutable field, which cannot be modified.\"}],\"ExceedParentExpiry()\":[{\"details\":\"Error: The provided id expiry is greater than parent id expiry.\"}],\"Expired()\":[{\"details\":\"Error: The provided token id is expired.\"}],\"ExpiryTimeMustBeLargerThanTheOldOne()\":[{\"details\":\"Error: Attempting to set an expiry time that is not larger than the previous one.\"}],\"MissingControllerRole()\":[{\"details\":\"Error: Missing controller role required for modification.\"}],\"MissingProtectedSettlerRole()\":[{\"details\":\"Error: Missing protected settler role required for modification.\"}],\"NameMustBeRegisteredOrInGracePeriod()\":[{\"details\":\"Error: The provided name must be registered or is in a grace period.\"}],\"ThirdLevelDomainUnallowed()\":[{\"details\":\"Error: The provided token id's depth level is greater than 3.\"}],\"Unauthorized()\":[{\"details\":\"Error: The sender lacks the necessary permissions.\"}],\"Unavailable()\":[{\"details\":\"Error: The provided name is unavailable for registration.\"}],\"Unexists()\":[{\"details\":\"Error: The provided token id is unexists.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"BaseURIUpdated(address,string)\":{\"details\":\"Emitted when a base URI is updated.\"},\"GracePeriodUpdated(address,uint64)\":{\"details\":\"Emitted when the grace period for all domain is updated.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NonceUpdated(uint256,uint256)\":{\"details\":\"Emitted when the token nonce is updated\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RecordUpdated(uint256,uint256,((uint8,uint256,string),(address,address,uint64,bool)))\":{\"details\":\"Emitted when the record of node is updated.\",\"params\":{\"indicator\":\"The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right to left) needs to be updated.\",\"record\":\"The updated fields.\"}},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"available(uint256)\":{\"details\":\"Returns true if the specified name is available for registration. Note: Only available after passing the grace period.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"bulkSetProtected(uint256[],bool)\":{\"details\":\"Sets the protected status of a list of ids. Update operation for {Record.mut.protected}. Requirements: - The method caller must have protected setter role. Emits events {RecordUpdated}.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"canSetRecord(address,uint256,uint256)\":{\"details\":\"Returns whether the requester is able to modify the record based on the updated index. Note: This method strictly follows the permission of struct {MutableRecord}.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"getDomain(uint256)\":{\"details\":\"Returns the domain name of id.\"},\"getGracePeriod()\":{\"details\":\"Returns the grace period in second(s). Note: This period affects the availability of the domain.\"},\"getRecord(uint256)\":{\"details\":\"Returns all record of a domain. Reverts if the token is non existent.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"mint(uint256,string,address,address,uint64)\":{\"details\":\"Mints token for subnode. Requirements: - The token must be available. - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}. Emits an event {RecordUpdated}.\",\"params\":{\"duration\":\"Duration in second(s) to expire. Leave 0 to set as parent.\",\"label\":\"The domain label. Eg, label is duke for domain duke.ron.\",\"owner\":\"The token owner.\",\"parentId\":\"The parent node to mint or create subnode.\",\"resolver\":\"The resolver address.\"}},\"name()\":{\"details\":\"Override {IERC721Metadata-name}.\"},\"namehash(string)\":{\"details\":\"Returns the name hash output of a domain.\"},\"ownerOf(uint256)\":{\"details\":\"Override {ERC721-ownerOf}.\"},\"pause()\":{\"details\":\"Pauses all token transfers. See {ERC721Pausable} and {Pausable-_pause}. Requirements: - the caller must have the `PAUSER_ROLE`.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"reclaim(uint256,address)\":{\"details\":\"Reclaims ownership. Update operation for {Record.mut.owner}. Requirements: - The method caller should have controller role. - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}. Emits an event {RecordUpdated}.\"},\"renew(uint256,uint64)\":{\"details\":\"Renews token. Update operation for {Record.mut.expiry}. Requirements: - The method caller should have controller role. Emits an event {RecordUpdated}.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"setBaseURI(string)\":{\"details\":\"Sets the base uri. Requirements: - The method caller must be contract owner.\"},\"setExpiry(uint256,uint64)\":{\"details\":\"Sets expiry time for a token. Update operation for {Record.mut.expiry}. Requirements: - The method caller must have controller role. Emits an event {RecordUpdated}.\"},\"setGracePeriod(uint64)\":{\"details\":\"Sets the grace period in second(s). Requirements: - The method caller must have controller role. Note: This period affects the availability of the domain.\"},\"setRecord(uint256,uint256,(address,address,uint64,bool))\":{\"details\":\"Sets record of existing token. Update operation for {Record.mut}. Requirements: - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}. Emits an event {RecordUpdated}.\"},\"stateOf(uint256)\":{\"details\":\"Returns the state of the `_tokenId` ERC721. Requirements: - The token exists.\"},\"supportsInterface(bytes4)\":{\"details\":\"Override {ERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Override {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"tokenURI(uint256)\":{\"details\":\"Override {IERC721Metadata-tokenURI}.\"},\"totalMinted()\":{\"details\":\"Returns the total minted ids. Note: Burning id will not affect `totalMinted`.\"},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"unpause()\":{\"details\":\"Unpauses all token transfers. See {ERC721Pausable} and {Pausable-_unpause}. Requirements: - the caller must have the `PAUSER_ROLE`.\"}},\"stateVariables\":{\"CONTROLLER_ROLE\":{\"details\":\"Returns the controller role.\"},\"MAX_EXPIRY\":{\"details\":\"Returns the max expiry value.\"},\"PROTECTED_SETTLER_ROLE\":{\"details\":\"Returns the protected setter role.\"},\"RESERVATION_ROLE\":{\"details\":\"Returns the reservation role.\"},\"____gap\":{\"details\":\"Gap for upgradeability.\"},\"_recordOf\":{\"details\":\"Mapping from token id => record\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"CONTROLLER_ROLE()\":{\"notice\":\"Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\"},\"PROTECTED_SETTLER_ROLE()\":{\"notice\":\"Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\"},\"RESERVATION_ROLE()\":{\"notice\":\"Never expire for token owner has this role.\"},\"stateOf(uint256)\":{\"notice\":\"The token state presents the properties of a token at a certain point in time, it should be unique. The token state helps other contracts can verify the token properties without getting and selecting properties from the base contract. For example: ```solidity contract Kitty { function stateOf(uint256 _tokenId) external view returns (bytes memory) { return abi.encodePacked(ownerOf(_tokenId), genesOf(_tokenId), levelOf(_tokenId)); } } interface Exchange { // Buy NFT with the specificed state of `_tokenId`. function buy(uint256 _tokenId, uint256 _price, bytes calldata _kittyState) external; } ```\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RNSUnified.sol\":\"RNSUnified\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/contract-template/src/refs/ERC721Nonce.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721.sol\\\";\\n\\n/**\\n * @title ERC721Nonce\\n * @dev This contract provides a nonce that will be increased whenever the token is tranferred.\\n */\\nabstract contract ERC721Nonce is ERC721 {\\n /// @dev Emitted when the token nonce is updated\\n event NonceUpdated(uint256 indexed _tokenId, uint256 indexed _nonce);\\n\\n /// @dev Mapping from token id => token nonce\\n mapping(uint256 => uint256) public nonces;\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n */\\n uint256[50] private ______gap;\\n\\n /**\\n * @dev Override `ERC721-_beforeTokenTransfer`.\\n */\\n function _beforeTokenTransfer(address _from, address _to, uint256 _firstTokenId, uint256 _batchSize)\\n internal\\n virtual\\n override\\n {\\n for (uint256 _tokenId = _firstTokenId; _tokenId < _firstTokenId + _batchSize; _tokenId++) {\\n emit NonceUpdated(_tokenId, ++nonces[_tokenId]);\\n }\\n super._beforeTokenTransfer(_from, _to, _firstTokenId, _batchSize);\\n }\\n}\\n\",\"keccak256\":\"0xc5695e9c5ae6a3c24c612cc970bd69c456d06e285ca8a95c2795d864ae478c9a\",\"license\":\"MIT\"},\"lib/contract-template/src/refs/IERC721State.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\ninterface IERC721State {\\n /**\\n * @dev Returns the state of the `_tokenId` ERC721.\\n *\\n * Requirements:\\n *\\n * - The token exists.\\n *\\n * @notice The token state presents the properties of a token at a certain point in time, it should be unique.\\n * The token state helps other contracts can verify the token properties without getting and selecting properties from the base contract.\\n *\\n * For example:\\n *\\n * ```solidity\\n * contract Kitty {\\n * function stateOf(uint256 _tokenId) external view returns (bytes memory) {\\n * return abi.encodePacked(ownerOf(_tokenId), genesOf(_tokenId), levelOf(_tokenId));\\n * }\\n * }\\n *\\n * interface Exchange {\\n * // Buy NFT with the specificed state of `_tokenId`.\\n * function buy(uint256 _tokenId, uint256 _price, bytes calldata _kittyState) external;\\n * }\\n * ```\\n */\\n function stateOf(uint256 _tokenId) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x462e648b1de6597ea496fbe91da2d28061cbef49612cd39288d64985f087de7d\",\"license\":\"UNLICENSED\"},\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```solidity\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```solidity\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\\n * to enforce additional security measures for this role.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0dd6e52cb394d7f5abe5dca2d4908a6be40417914720932de757de34a99ab87f\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlEnumerable.sol\\\";\\nimport \\\"./AccessControl.sol\\\";\\nimport \\\"../utils/structs/EnumerableSet.sol\\\";\\n\\n/**\\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\\n */\\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\\n using EnumerableSet for EnumerableSet.AddressSet;\\n\\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {\\n return _roleMembers[role].at(index);\\n }\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) public view virtual override returns (uint256) {\\n return _roleMembers[role].length();\\n }\\n\\n /**\\n * @dev Overload {_grantRole} to track enumerable memberships\\n */\\n function _grantRole(bytes32 role, address account) internal virtual override {\\n super._grantRole(role, account);\\n _roleMembers[role].add(account);\\n }\\n\\n /**\\n * @dev Overload {_revokeRole} to track enumerable memberships\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual override {\\n super._revokeRole(role, account);\\n _roleMembers[role].remove(account);\\n }\\n}\\n\",\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n _requireNotPaused();\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n _requirePaused();\\n _;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Throws if the contract is paused.\\n */\\n function _requireNotPaused() internal view virtual {\\n require(!paused(), \\\"Pausable: paused\\\");\\n }\\n\\n /**\\n * @dev Throws if the contract is not paused.\\n */\\n function _requirePaused() internal view virtual {\\n require(paused(), \\\"Pausable: not paused\\\");\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/ERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/ERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC721.sol\\\";\\nimport \\\"./IERC721Receiver.sol\\\";\\nimport \\\"./extensions/IERC721Metadata.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/Context.sol\\\";\\nimport \\\"../../utils/Strings.sol\\\";\\nimport \\\"../../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721 is Context, ERC165, IERC721, IERC721Metadata {\\n using Address for address;\\n using Strings for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\\n return\\n interfaceId == type(IERC721).interfaceId ||\\n interfaceId == type(IERC721Metadata).interfaceId ||\\n super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: address zero is not a valid owner\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _ownerOf(tokenId);\\n require(owner != address(0), \\\"ERC721: invalid token ID\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n _requireMinted(tokenId);\\n\\n string memory baseURI = _baseURI();\\n return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : \\\"\\\";\\n }\\n\\n /**\\n * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each\\n * token will be the concatenation of the `baseURI` and the `tokenId`. Empty\\n * by default, can be overridden in child contracts.\\n */\\n function _baseURI() internal view virtual returns (string memory) {\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not token owner or approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n _requireMinted(tokenId);\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n _setApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: caller is not token owner or approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: caller is not token owner or approved\\\");\\n _safeTransfer(from, to, tokenId, data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist\\n */\\n function _ownerOf(uint256 tokenId) internal view virtual returns (address) {\\n return _owners[tokenId];\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _ownerOf(tokenId) != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n address owner = ERC721.ownerOf(tokenId);\\n return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId, 1);\\n\\n // Check that tokenId was not minted by `_beforeTokenTransfer` hook\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n unchecked {\\n // Will not overflow unless all 2**256 token ids are minted to the same owner.\\n // Given that tokens are minted one by one, it is impossible in practice that\\n // this ever happens. Might change if we allow batch minting.\\n // The ERC fails to describe this case.\\n _balances[to] += 1;\\n }\\n\\n _owners[tokenId] = to;\\n\\n emit Transfer(address(0), to, tokenId);\\n\\n _afterTokenTransfer(address(0), to, tokenId, 1);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n * This is an internal function that does not check if the sender is authorized to operate on the token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId, 1);\\n\\n // Update ownership in case tokenId was transferred by `_beforeTokenTransfer` hook\\n owner = ERC721.ownerOf(tokenId);\\n\\n // Clear approvals\\n delete _tokenApprovals[tokenId];\\n\\n unchecked {\\n // Cannot overflow, as that would require more tokens to be burned/transferred\\n // out than the owner initially received through minting and transferring in.\\n _balances[owner] -= 1;\\n }\\n delete _owners[tokenId];\\n\\n emit Transfer(owner, address(0), tokenId);\\n\\n _afterTokenTransfer(owner, address(0), tokenId, 1);\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\\n require(ERC721.ownerOf(tokenId) == from, \\\"ERC721: transfer from incorrect owner\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId, 1);\\n\\n // Check that tokenId was not transferred by `_beforeTokenTransfer` hook\\n require(ERC721.ownerOf(tokenId) == from, \\\"ERC721: transfer from incorrect owner\\\");\\n\\n // Clear approvals from the previous owner\\n delete _tokenApprovals[tokenId];\\n\\n unchecked {\\n // `_balances[from]` cannot overflow for the same reason as described in `_burn`:\\n // `from`'s balance is the number of token held, which is at least one before the current\\n // transfer.\\n // `_balances[to]` could overflow in the conditions described in `_mint`. That would require\\n // all 2**256 token ids to be minted, which in practice is impossible.\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n }\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n\\n _afterTokenTransfer(from, to, tokenId, 1);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits an {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `operator` to operate on all of `owner` tokens\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {\\n require(owner != operator, \\\"ERC721: approve to caller\\\");\\n _operatorApprovals[owner][operator] = approved;\\n emit ApprovalForAll(owner, operator, approved);\\n }\\n\\n /**\\n * @dev Reverts if the `tokenId` has not been minted yet.\\n */\\n function _requireMinted(uint256 tokenId) internal view virtual {\\n require(_exists(tokenId), \\\"ERC721: invalid token ID\\\");\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {\\n return retval == IERC721Receiver.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n /// @solidity memory-safe-assembly\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is\\n * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`.\\n * - When `from` is zero, the tokens will be minted for `to`.\\n * - When `to` is zero, ``from``'s tokens will be burned.\\n * - `from` and `to` are never both zero.\\n * - `batchSize` is non-zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {}\\n\\n /**\\n * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is\\n * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`.\\n * - When `from` is zero, the tokens were minted for `to`.\\n * - When `to` is zero, ``from``'s tokens were burned.\\n * - `from` and `to` are never both zero.\\n * - `batchSize` is non-zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _afterTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {}\\n\\n /**\\n * @dev Unsafe write access to the balances, used by extensions that \\\"mint\\\" tokens using an {ownerOf} override.\\n *\\n * WARNING: Anyone calling this MUST ensure that the balances remain consistent with the ownership. The invariant\\n * being that for any address `a` the value returned by `balanceOf(a)` must be equal to the number of tokens such\\n * that `ownerOf(tokenId)` is `a`.\\n */\\n // solhint-disable-next-line func-name-mixedcase\\n function __unsafe_increaseBalance(address account, uint256 amount) internal {\\n _balances[account] += amount;\\n }\\n}\\n\",\"keccak256\":\"0x2c309e7df9e05e6ce15bedfe74f3c61b467fc37e0fae9eab496acf5ea0bbd7ff\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(\\n address operator,\\n address from,\\n uint256 tokenId,\\n bytes calldata data\\n ) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Burnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/extensions/ERC721Burnable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC721.sol\\\";\\nimport \\\"../../../utils/Context.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be burned (destroyed).\\n */\\nabstract contract ERC721Burnable is Context, ERC721 {\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: caller is not token owner or approved\\\");\\n _burn(tokenId);\\n }\\n}\\n\",\"keccak256\":\"0x52da94e59d870f54ca0eb4f485c3d9602011f668ba34d72c88124a1496ebaab1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Enumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/extensions/ERC721Enumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC721.sol\\\";\\nimport \\\"./IERC721Enumerable.sol\\\";\\n\\n/**\\n * @dev This implements an optional extension of {ERC721} defined in the EIP that adds\\n * enumerability of all the token ids in the contract as well as all token ids owned by each\\n * account.\\n */\\nabstract contract ERC721Enumerable is ERC721, IERC721Enumerable {\\n // Mapping from owner to list of owned token IDs\\n mapping(address => mapping(uint256 => uint256)) private _ownedTokens;\\n\\n // Mapping from token ID to index of the owner tokens list\\n mapping(uint256 => uint256) private _ownedTokensIndex;\\n\\n // Array with all token ids, used for enumeration\\n uint256[] private _allTokens;\\n\\n // Mapping from token id to position in the allTokens array\\n mapping(uint256 => uint256) private _allTokensIndex;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {\\n return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\\n */\\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\\n require(index < ERC721.balanceOf(owner), \\\"ERC721Enumerable: owner index out of bounds\\\");\\n return _ownedTokens[owner][index];\\n }\\n\\n /**\\n * @dev See {IERC721Enumerable-totalSupply}.\\n */\\n function totalSupply() public view virtual override returns (uint256) {\\n return _allTokens.length;\\n }\\n\\n /**\\n * @dev See {IERC721Enumerable-tokenByIndex}.\\n */\\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\\n require(index < ERC721Enumerable.totalSupply(), \\\"ERC721Enumerable: global index out of bounds\\\");\\n return _allTokens[index];\\n }\\n\\n /**\\n * @dev See {ERC721-_beforeTokenTransfer}.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 firstTokenId,\\n uint256 batchSize\\n ) internal virtual override {\\n super._beforeTokenTransfer(from, to, firstTokenId, batchSize);\\n\\n if (batchSize > 1) {\\n // Will only trigger during construction. Batch transferring (minting) is not available afterwards.\\n revert(\\\"ERC721Enumerable: consecutive transfers not supported\\\");\\n }\\n\\n uint256 tokenId = firstTokenId;\\n\\n if (from == address(0)) {\\n _addTokenToAllTokensEnumeration(tokenId);\\n } else if (from != to) {\\n _removeTokenFromOwnerEnumeration(from, tokenId);\\n }\\n if (to == address(0)) {\\n _removeTokenFromAllTokensEnumeration(tokenId);\\n } else if (to != from) {\\n _addTokenToOwnerEnumeration(to, tokenId);\\n }\\n }\\n\\n /**\\n * @dev Private function to add a token to this extension's ownership-tracking data structures.\\n * @param to address representing the new owner of the given token ID\\n * @param tokenId uint256 ID of the token to be added to the tokens list of the given address\\n */\\n function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {\\n uint256 length = ERC721.balanceOf(to);\\n _ownedTokens[to][length] = tokenId;\\n _ownedTokensIndex[tokenId] = length;\\n }\\n\\n /**\\n * @dev Private function to add a token to this extension's token tracking data structures.\\n * @param tokenId uint256 ID of the token to be added to the tokens list\\n */\\n function _addTokenToAllTokensEnumeration(uint256 tokenId) private {\\n _allTokensIndex[tokenId] = _allTokens.length;\\n _allTokens.push(tokenId);\\n }\\n\\n /**\\n * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that\\n * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for\\n * gas optimizations e.g. when performing a transfer operation (avoiding double writes).\\n * This has O(1) time complexity, but alters the order of the _ownedTokens array.\\n * @param from address representing the previous owner of the given token ID\\n * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address\\n */\\n function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {\\n // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and\\n // then delete the last slot (swap and pop).\\n\\n uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;\\n uint256 tokenIndex = _ownedTokensIndex[tokenId];\\n\\n // When the token to delete is the last token, the swap operation is unnecessary\\n if (tokenIndex != lastTokenIndex) {\\n uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];\\n\\n _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token\\n _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index\\n }\\n\\n // This also deletes the contents at the last position of the array\\n delete _ownedTokensIndex[tokenId];\\n delete _ownedTokens[from][lastTokenIndex];\\n }\\n\\n /**\\n * @dev Private function to remove a token from this extension's token tracking data structures.\\n * This has O(1) time complexity, but alters the order of the _allTokens array.\\n * @param tokenId uint256 ID of the token to be removed from the tokens list\\n */\\n function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {\\n // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and\\n // then delete the last slot (swap and pop).\\n\\n uint256 lastTokenIndex = _allTokens.length - 1;\\n uint256 tokenIndex = _allTokensIndex[tokenId];\\n\\n // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so\\n // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding\\n // an 'if' statement (like in _removeTokenFromOwnerEnumeration)\\n uint256 lastTokenId = _allTokens[lastTokenIndex];\\n\\n _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token\\n _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index\\n\\n // This also deletes the contents at the last position of the array\\n delete _allTokensIndex[tokenId];\\n _allTokens.pop();\\n }\\n}\\n\",\"keccak256\":\"0xa8796bd16014cefb8c26449413981a49c510f92a98d6828494f5fd046223ced3\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/ERC721Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.2) (token/ERC721/extensions/ERC721Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC721.sol\\\";\\nimport \\\"../../../security/Pausable.sol\\\";\\n\\n/**\\n * @dev ERC721 token with pausable token transfers, minting and burning.\\n *\\n * Useful for scenarios such as preventing trades until the end of an evaluation\\n * period, or having an emergency switch for freezing all token transfers in the\\n * event of a large bug.\\n *\\n * IMPORTANT: This contract does not include public pause and unpause functions. In\\n * addition to inheriting this contract, you must define both functions, invoking the\\n * {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate\\n * access control, e.g. using {AccessControl} or {Ownable}. Not doing so will\\n * make the contract unpausable.\\n */\\nabstract contract ERC721Pausable is ERC721, Pausable {\\n /**\\n * @dev See {ERC721-_beforeTokenTransfer}.\\n *\\n * Requirements:\\n *\\n * - the contract must not be paused.\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 firstTokenId,\\n uint256 batchSize\\n ) internal virtual override {\\n super._beforeTokenTransfer(from, to, firstTokenId, batchSize);\\n\\n require(!paused(), \\\"ERC721Pausable: token transfer while paused\\\");\\n }\\n}\\n\",\"keccak256\":\"0x645230d3afe28f9108eef658e77bb6ac72cea51ac091b40951977c88f7044142\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Enumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Enumerable is IERC721 {\\n /**\\n * @dev Returns the total amount of tokens stored by the contract.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\\n */\\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);\\n\\n /**\\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\\n * Use along with {totalSupply} to enumerate all tokens.\\n */\\n function tokenByIndex(uint256 index) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xd1556954440b31c97a142c6ba07d5cade45f96fafd52091d33a14ebe365aecbf\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toString(int256 value) internal pure returns (string memory) {\\n return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)\\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```solidity\\n * contract Example {\\n * // Add the library methods\\n * using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n * // Declare a set state variable\\n * EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n *\\n * [WARNING]\\n * ====\\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\\n * unusable.\\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\\n *\\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\\n * array of EnumerableSet.\\n * ====\\n */\\nlibrary EnumerableSet {\\n // To implement this library for multiple types with as little code\\n // repetition as possible, we write it in terms of a generic Set type with\\n // bytes32 values.\\n // The Set implementation uses private functions, and user-facing\\n // implementations (such as AddressSet) are just wrappers around the\\n // underlying Set.\\n // This means that we can only create new EnumerableSets for types that fit\\n // in bytes32.\\n\\n struct Set {\\n // Storage of set values\\n bytes32[] _values;\\n // Position of the value in the `values` array, plus 1 because index 0\\n // means a value is not in the set.\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n // The value is stored at length-1, but we add 1 to all indexes\\n // and use 0 as a sentinel value\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n // We read and store the value's index to prevent multiple reads from the same storage slot\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n // Equivalent to contains(set, value)\\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n // the array, and then remove the last element (sometimes called as 'swap and pop').\\n // This modifies the order of the array, as noted in {at}.\\n\\n uint256 toDeleteIndex = valueIndex - 1;\\n uint256 lastIndex = set._values.length - 1;\\n\\n if (lastIndex != toDeleteIndex) {\\n bytes32 lastValue = set._values[lastIndex];\\n\\n // Move the last value to the index where the value to delete is\\n set._values[toDeleteIndex] = lastValue;\\n // Update the index for the moved value\\n set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex\\n }\\n\\n // Delete the slot where the moved value was stored\\n set._values.pop();\\n\\n // Delete the index for the deleted slot\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n return set._indexes[value] != 0;\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n return set._values[index];\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function _values(Set storage set) private view returns (bytes32[] memory) {\\n return set._values;\\n }\\n\\n // Bytes32Set\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _add(set._inner, value);\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _remove(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n return _contains(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n return _at(set._inner, index);\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n bytes32[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // AddressSet\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(AddressSet storage set, address value) internal returns (bool) {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(AddressSet storage set, address value) internal returns (bool) {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(AddressSet storage set, address value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(AddressSet storage set) internal view returns (address[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n address[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // UintSet\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n return uint256(_at(set._inner, index));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(UintSet storage set) internal view returns (uint256[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n uint256[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\"},\"src/RNSToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC165, AccessControlEnumerable } from \\\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\\\";\\nimport { IERC721Metadata, IERC721, ERC721 } from \\\"@openzeppelin/contracts/token/ERC721/ERC721.sol\\\";\\nimport { ERC721Burnable } from \\\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol\\\";\\nimport { ERC721Pausable } from \\\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol\\\";\\nimport { ERC721Enumerable } from \\\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol\\\";\\nimport { ERC721Nonce } from \\\"contract-template/refs/ERC721Nonce.sol\\\";\\nimport { INSUnified } from \\\"./interfaces/INSUnified.sol\\\";\\nimport { IERC721State } from \\\"contract-template/refs/IERC721State.sol\\\";\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\nabstract contract RNSToken is\\n AccessControlEnumerable,\\n ERC721Nonce,\\n ERC721Burnable,\\n ERC721Pausable,\\n ERC721Enumerable,\\n IERC721State,\\n INSUnified\\n{\\n using Strings for *;\\n\\n bytes32 public constant PAUSER_ROLE = keccak256(\\\"PAUSER_ROLE\\\");\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n uint256 internal _idCounter;\\n string internal _baseTokenURI;\\n\\n modifier onlyMinted(uint256 tokenId) {\\n _requireMinted(tokenId);\\n _;\\n }\\n\\n /// @inheritdoc INSUnified\\n function setBaseURI(string calldata baseTokenURI) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setBaseURI(baseTokenURI);\\n }\\n\\n /**\\n * @dev Pauses all token transfers.\\n *\\n * See {ERC721Pausable} and {Pausable-_pause}.\\n *\\n * Requirements:\\n *\\n * - the caller must have the `PAUSER_ROLE`.\\n */\\n function pause() external virtual onlyRole(PAUSER_ROLE) {\\n _pause();\\n }\\n\\n /**\\n * @dev Unpauses all token transfers.\\n *\\n * See {ERC721Pausable} and {Pausable-_unpause}.\\n *\\n * Requirements:\\n *\\n * - the caller must have the `PAUSER_ROLE`.\\n */\\n function unpause() external virtual onlyRole(PAUSER_ROLE) {\\n _unpause();\\n }\\n\\n /// @dev Override {IERC721Metadata-name}.\\n function name() public view virtual override(ERC721, IERC721Metadata) returns (string memory) {\\n return \\\"Ronin Name Service\\\";\\n }\\n\\n /// @dev Override {IERC721Metadata-symbol}.\\n function symbol() public view virtual override(ERC721, IERC721Metadata) returns (string memory) {\\n return \\\"RNS\\\";\\n }\\n\\n /// @inheritdoc INSUnified\\n function totalMinted() external view virtual returns (uint256) {\\n return _idCounter;\\n }\\n\\n /// @dev Override {IERC721Metadata-tokenURI}.\\n function tokenURI(uint256 tokenId)\\n public\\n view\\n virtual\\n override(ERC721, IERC721Metadata)\\n onlyMinted(tokenId)\\n returns (string memory)\\n {\\n string memory baseURI = _baseURI();\\n return bytes(baseURI).length > 0 ? string.concat(baseURI, address(this).toHexString(), \\\"/\\\", tokenId.toString()) : \\\"\\\";\\n }\\n\\n /// @dev Override {ERC165-supportsInterface}.\\n function supportsInterface(bytes4 interfaceId)\\n public\\n view\\n virtual\\n override(ERC721, AccessControlEnumerable, ERC721Enumerable, IERC165)\\n returns (bool)\\n {\\n return super.supportsInterface(interfaceId) || interfaceId == type(INSUnified).interfaceId;\\n }\\n\\n /// @dev Override {ERC721-_mint}.\\n function _mint(address to, uint256 tokenId) internal virtual override {\\n unchecked {\\n ++_idCounter;\\n }\\n super._mint(to, tokenId);\\n }\\n\\n /**\\n * @dev Helper method to set base uri.\\n */\\n function _setBaseURI(string calldata baseTokenURI) internal virtual {\\n _baseTokenURI = baseTokenURI;\\n emit BaseURIUpdated(_msgSender(), baseTokenURI);\\n }\\n\\n /// @dev Override {ERC721-_beforeTokenTransfer}.\\n function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize)\\n internal\\n virtual\\n override(ERC721, ERC721Nonce, ERC721Enumerable, ERC721Pausable)\\n {\\n super._beforeTokenTransfer(from, to, firstTokenId, batchSize);\\n }\\n\\n /// @dev Override {ERC721-_baseURI}.\\n function _baseURI() internal view virtual override returns (string memory) {\\n return _baseTokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x329a95b72af71faddd0ecf15fe610e42f02ea417864e58d1ff604a7496912360\",\"license\":\"MIT\"},\"src/RNSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { IERC721State, IERC721, ERC721, INSUnified, RNSToken } from \\\"./RNSToken.sol\\\";\\nimport { LibRNSDomain } from \\\"./libraries/LibRNSDomain.sol\\\";\\nimport { LibSafeRange } from \\\"./libraries/math/LibSafeRange.sol\\\";\\nimport { ModifyingField, LibModifyingField } from \\\"./libraries/LibModifyingField.sol\\\";\\nimport {\\n ALL_FIELDS_INDICATOR,\\n IMMUTABLE_FIELDS_INDICATOR,\\n USER_FIELDS_INDICATOR,\\n ModifyingIndicator\\n} from \\\"./types/ModifyingIndicator.sol\\\";\\n\\ncontract RNSUnified is Initializable, RNSToken {\\n using LibRNSDomain for string;\\n using LibModifyingField for ModifyingField;\\n\\n bytes32 public constant CONTROLLER_ROLE = keccak256(\\\"CONTROLLER_ROLE\\\");\\n bytes32 public constant RESERVATION_ROLE = keccak256(\\\"RESERVATION_ROLE\\\");\\n bytes32 public constant PROTECTED_SETTLER_ROLE = keccak256(\\\"PROTECTED_SETTLER_ROLE\\\");\\n uint64 public constant MAX_EXPIRY = type(uint64).max;\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n uint64 internal _gracePeriod;\\n /// @dev Mapping from token id => record\\n mapping(uint256 => Record) internal _recordOf;\\n\\n modifier onlyAuthorized(uint256 id, ModifyingIndicator indicator) {\\n _requireAuthorized(id, indicator);\\n _;\\n }\\n\\n constructor() payable ERC721(\\\"\\\", \\\"\\\") {\\n _disableInitializers();\\n }\\n\\n function initialize(\\n address admin,\\n address pauser,\\n address controller,\\n address protectedSettler,\\n uint64 gracePeriod,\\n string calldata baseTokenURI\\n ) external initializer {\\n _grantRole(DEFAULT_ADMIN_ROLE, admin);\\n _grantRole(PAUSER_ROLE, pauser);\\n _grantRole(CONTROLLER_ROLE, controller);\\n _grantRole(PROTECTED_SETTLER_ROLE, protectedSettler);\\n\\n _setBaseURI(baseTokenURI);\\n _setGracePeriod(gracePeriod);\\n\\n _mint(admin, 0x0);\\n Record memory record;\\n _recordOf[0x0].mut.expiry = record.mut.expiry = MAX_EXPIRY;\\n emit RecordUpdated(0x0, ModifyingField.Expiry.indicator(), record);\\n }\\n\\n /// @inheritdoc INSUnified\\n function available(uint256 id) public view returns (bool) {\\n return block.timestamp > LibSafeRange.add(_expiry(id), _gracePeriod);\\n }\\n\\n /// @inheritdoc INSUnified\\n function getGracePeriod() external view returns (uint64) {\\n return _gracePeriod;\\n }\\n\\n /// @inheritdoc INSUnified\\n function setGracePeriod(uint64 gracePeriod) external whenNotPaused onlyRole(CONTROLLER_ROLE) {\\n _setGracePeriod(gracePeriod);\\n }\\n\\n /// @inheritdoc INSUnified\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n whenNotPaused\\n returns (uint64 expiryTime, uint256 id)\\n {\\n if (!_checkOwnerRules(_msgSender(), parentId)) revert Unauthorized();\\n id = LibRNSDomain.toId(parentId, label);\\n if (!available(id)) revert Unavailable();\\n\\n if (_exists(id)) _burn(id);\\n _mint(owner, id);\\n\\n expiryTime = uint64(LibSafeRange.addWithUpperbound(block.timestamp, duration, MAX_EXPIRY));\\n _requireValidExpiry(parentId, expiryTime);\\n Record memory record;\\n // Preserve previous state of the protected field\\n record.mut =\\n MutableRecord({ resolver: resolver, owner: owner, expiry: expiryTime, protected: _recordOf[id].mut.protected });\\n record.immut = ImmutableRecord({ depth: _recordOf[parentId].immut.depth + 1, parentId: parentId, label: label });\\n // allow 3rd level domain for {account}.addr.reverse\\n if (parentId != LibRNSDomain.ADDR_REVERSE_ID && record.immut.depth >= 3) revert ThirdLevelDomainUnallowed();\\n\\n _recordOf[id] = record;\\n emit RecordUpdated(id, ALL_FIELDS_INDICATOR, record);\\n }\\n\\n /// @inheritdoc INSUnified\\n function namehash(string memory str) public pure returns (bytes32 hashed) {\\n hashed = str.namehash();\\n }\\n\\n /// @inheritdoc INSUnified\\n function getRecord(uint256 id) external view returns (Record memory record) {\\n record = _recordOf[id];\\n record.mut.owner = ownerOf(id);\\n record.mut.expiry = _expiry(id);\\n }\\n\\n /// @inheritdoc INSUnified\\n function getDomain(uint256 id) external view returns (string memory domain) {\\n if (id == 0) return \\\"\\\";\\n\\n ImmutableRecord storage sRecord = _recordOf[id].immut;\\n domain = sRecord.label;\\n id = sRecord.parentId;\\n while (id != 0) {\\n sRecord = _recordOf[id].immut;\\n domain = string.concat(domain, \\\".\\\", sRecord.label);\\n id = sRecord.parentId;\\n }\\n }\\n\\n /// @inheritdoc INSUnified\\n function reclaim(uint256 id, address owner)\\n external\\n whenNotPaused\\n onlyAuthorized(id, ModifyingField.Owner.indicator())\\n {\\n _safeTransfer(_recordOf[id].mut.owner, owner, id, \\\"\\\");\\n }\\n\\n /// @inheritdoc INSUnified\\n function renew(uint256 id, uint64 duration) external whenNotPaused onlyRole(CONTROLLER_ROLE) returns (uint64 expiry) {\\n Record memory record;\\n record.mut.expiry = uint64(LibSafeRange.addWithUpperbound(_recordOf[id].mut.expiry, duration, MAX_EXPIRY));\\n _setExpiry(id, record.mut.expiry);\\n expiry = record.mut.expiry;\\n emit RecordUpdated(id, ModifyingField.Expiry.indicator(), record);\\n }\\n\\n /// @inheritdoc INSUnified\\n function setExpiry(uint256 id, uint64 expiry) external whenNotPaused onlyRole(CONTROLLER_ROLE) {\\n Record memory record;\\n _setExpiry(id, record.mut.expiry = expiry);\\n emit RecordUpdated(id, ModifyingField.Expiry.indicator(), record);\\n }\\n\\n /// @inheritdoc INSUnified\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external onlyRole(PROTECTED_SETTLER_ROLE) {\\n ModifyingIndicator indicator = ModifyingField.Protected.indicator();\\n uint256 id;\\n Record memory record;\\n record.mut.protected = protected;\\n\\n for (uint256 i; i < ids.length;) {\\n id = ids[i];\\n if (_recordOf[id].mut.protected != protected) {\\n _recordOf[id].mut.protected = protected;\\n emit RecordUpdated(id, indicator, record);\\n }\\n\\n unchecked {\\n ++i;\\n }\\n }\\n }\\n\\n /// @inheritdoc INSUnified\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata mutRecord)\\n external\\n whenNotPaused\\n onlyAuthorized(id, indicator)\\n {\\n Record memory record;\\n MutableRecord storage sMutRecord = _recordOf[id].mut;\\n\\n if (indicator.hasAny(ModifyingField.Protected.indicator())) {\\n sMutRecord.protected = record.mut.protected = mutRecord.protected;\\n }\\n if (indicator.hasAny(ModifyingField.Expiry.indicator())) {\\n _setExpiry(id, record.mut.expiry = mutRecord.expiry);\\n }\\n if (indicator.hasAny(ModifyingField.Resolver.indicator())) {\\n sMutRecord.resolver = record.mut.resolver = mutRecord.resolver;\\n }\\n emit RecordUpdated(id, indicator, record);\\n\\n // Updating owner might emit more {RecordUpdated} events. See method {_transfer}.\\n if (indicator.hasAny(ModifyingField.Owner.indicator())) {\\n _safeTransfer(_recordOf[id].mut.owner, mutRecord.owner, id, \\\"\\\");\\n }\\n }\\n\\n /**\\n * @inheritdoc IERC721State\\n */\\n function stateOf(uint256 tokenId) external view virtual override onlyMinted(tokenId) returns (bytes memory) {\\n return abi.encode(_recordOf[tokenId], nonces[tokenId], tokenId);\\n }\\n\\n /// @inheritdoc INSUnified\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n public\\n view\\n returns (bool allowed, bytes4)\\n {\\n if (indicator.hasAny(IMMUTABLE_FIELDS_INDICATOR)) {\\n return (false, CannotSetImmutableField.selector);\\n }\\n if (!_exists(id)) return (false, Unexists.selector);\\n if (indicator.hasAny(ModifyingField.Protected.indicator()) && !hasRole(PROTECTED_SETTLER_ROLE, requester)) {\\n return (false, MissingProtectedSettlerRole.selector);\\n }\\n bool hasControllerRole = hasRole(CONTROLLER_ROLE, requester);\\n if (indicator.hasAny(ModifyingField.Expiry.indicator()) && !hasControllerRole) {\\n return (false, MissingControllerRole.selector);\\n }\\n if (indicator.hasAny(USER_FIELDS_INDICATOR) && !(hasControllerRole || _checkOwnerRules(requester, id))) {\\n return (false, Unauthorized.selector);\\n }\\n\\n return (true, 0x0);\\n }\\n\\n /// @dev Override {ERC721-ownerOf}.\\n function ownerOf(uint256 tokenId) public view override(ERC721, IERC721) returns (address) {\\n if (_isExpired(tokenId)) return address(0x0);\\n return super.ownerOf(tokenId);\\n }\\n\\n /// @dev Override {ERC721-_isApprovedOrOwner}.\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual override returns (bool) {\\n if (_isExpired(tokenId)) return false;\\n return super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n /**\\n * @dev Helper method to check whether the id is expired.\\n */\\n function _isExpired(uint256 id) internal view returns (bool) {\\n return block.timestamp > _expiry(id);\\n }\\n\\n /**\\n * @dev Helper method to calculate expiry time for specific id.\\n */\\n function _expiry(uint256 id) internal view returns (uint64) {\\n if (hasRole(RESERVATION_ROLE, _ownerOf(id))) return MAX_EXPIRY;\\n return _recordOf[id].mut.expiry;\\n }\\n\\n /**\\n * @dev Helper method to check whether the address is owner of parent token.\\n */\\n function _isHierarchyOwner(address spender, uint256 id) internal view returns (bool) {\\n address owner;\\n\\n while (id != 0) {\\n owner = _recordOf[id].mut.owner;\\n if (owner == spender) return true;\\n id = _recordOf[id].immut.parentId;\\n }\\n\\n return false;\\n }\\n\\n /**\\n * @dev Returns whether the owner rules is satisfied.\\n * Returns true only if the spender is owner, or approved spender, or owner of parent token.\\n */\\n function _checkOwnerRules(address spender, uint256 id) internal view returns (bool) {\\n return _isApprovedOrOwner(spender, id) || _isHierarchyOwner(spender, id);\\n }\\n\\n /**\\n * @dev Helper method to ensure msg.sender is authorized to modify record of the token id.\\n */\\n function _requireAuthorized(uint256 id, ModifyingIndicator indicator) internal view {\\n (bool allowed, bytes4 errorCode) = canSetRecord(_msgSender(), id, indicator);\\n if (!allowed) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, errorCode)\\n revert(0x0, 0x04)\\n }\\n }\\n }\\n\\n /**\\n * @dev Helper method to ensure expiry of an id is lower or equal expiry of parent id.\\n */\\n function _requireValidExpiry(uint256 parentId, uint64 expiry) internal view {\\n if (expiry > _recordOf[parentId].mut.expiry) revert ExceedParentExpiry();\\n }\\n\\n /**\\n * @dev Helper method to set expiry time of a token.\\n *\\n * Requirement:\\n * - The token must be registered or in grace period.\\n * - Expiry time must be larger than the old one.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function _setExpiry(uint256 id, uint64 expiry) internal {\\n _requireValidExpiry(_recordOf[id].immut.parentId, expiry);\\n if (available(id)) revert NameMustBeRegisteredOrInGracePeriod();\\n if (expiry <= _recordOf[id].mut.expiry) revert ExpiryTimeMustBeLargerThanTheOldOne();\\n\\n Record memory record;\\n _recordOf[id].mut.expiry = record.mut.expiry = expiry;\\n }\\n\\n /**\\n * @dev Helper method to set grace period.\\n *\\n * Emits an event {GracePeriodUpdated}.\\n */\\n function _setGracePeriod(uint64 gracePeriod) internal {\\n _gracePeriod = gracePeriod;\\n emit GracePeriodUpdated(_msgSender(), gracePeriod);\\n }\\n\\n /// @dev Override {ERC721-_transfer}.\\n function _transfer(address from, address to, uint256 id) internal override {\\n super._transfer(from, to, id);\\n\\n Record memory record;\\n ModifyingIndicator indicator = ModifyingField.Owner.indicator();\\n\\n _recordOf[id].mut.owner = record.mut.owner = to;\\n if (!hasRole(PROTECTED_SETTLER_ROLE, _msgSender()) && _recordOf[id].mut.protected) {\\n _recordOf[id].mut.protected = false;\\n indicator = indicator | ModifyingField.Protected.indicator();\\n }\\n emit RecordUpdated(id, indicator, record);\\n }\\n\\n /// @dev Override {ERC721-_burn}.\\n function _burn(uint256 id) internal override {\\n super._burn(id);\\n delete _recordOf[id].mut;\\n Record memory record;\\n emit RecordUpdated(id, USER_FIELDS_INDICATOR, record);\\n }\\n}\\n\",\"keccak256\":\"0xebb154f77c69394b05a0a69cf93965da1df7c01a0ef11ea807e3d61124a697c0\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided token id's depth level is greater than 3.\\n error ThirdLevelDomainUnallowed();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0x98e2e77490d7fd6d87a8e9800223bb2f60a33e7338e2f65f64a3aed4737c035c\",\"license\":\"MIT\"},\"src/libraries/LibModifyingField.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\nenum ModifyingField {\\n Depth,\\n ParentId,\\n Label,\\n Resolver,\\n Owner,\\n Expiry,\\n Protected\\n}\\n\\nlibrary LibModifyingField {\\n function indicator(ModifyingField opt) internal pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(1 << uint8(opt));\\n }\\n}\\n\",\"keccak256\":\"0xa3a752a56545a4beff2784a42b295c3c4af6f70cbe1a18fd32479686e1a06c41\",\"license\":\"MIT\"},\"src/libraries/LibRNSDomain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nlibrary LibRNSDomain {\\n /// @dev Value equals to namehash('ron')\\n uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688;\\n /// @dev Value equals to namehash('addr.reverse')\\n uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n /**\\n * @dev Calculate the corresponding id given parentId and label.\\n */\\n function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, parentId)\\n mstore(0x20, keccak256(add(label, 32), mload(label)))\\n id := keccak256(0x0, 64)\\n }\\n }\\n\\n /**\\n * @dev Calculates the hash of the label.\\n */\\n function hashLabel(string memory label) internal pure returns (bytes32 hashed) {\\n assembly (\\\"memory-safe\\\") {\\n hashed := keccak256(add(label, 32), mload(label))\\n }\\n }\\n\\n /**\\n * @dev Calculate the RNS namehash of a str.\\n */\\n function namehash(string memory str) internal pure returns (bytes32 hashed) {\\n // notice: this method is case-sensitive, ensure the string is lowercased before calling this method\\n assembly (\\\"memory-safe\\\") {\\n // load str length\\n let len := mload(str)\\n // returns bytes32(0x0) if length is zero\\n if iszero(iszero(len)) {\\n let hashedLen\\n // compute pointer to str[0]\\n let head := add(str, 32)\\n // compute pointer to str[length - 1]\\n let tail := add(head, sub(len, 1))\\n // cleanup dirty bytes if contains any\\n mstore(0x0, 0)\\n // loop backwards from `tail` to `head`\\n for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } {\\n // check if `i` is `head`\\n let isHead := eq(i, head)\\n // check if `str[i-1]` is \\\".\\\"\\n // `0x2e` == bytes1(\\\".\\\")\\n let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e)\\n if or(isHead, isDotNext) {\\n // size = distance(length, i) - hashedLength + 1\\n let size := add(sub(sub(tail, i), hashedLen), 1)\\n mstore(0x20, keccak256(i, size))\\n mstore(0x0, keccak256(0x0, 64))\\n // skip \\\".\\\" thereby + 1\\n hashedLen := add(hashedLen, add(size, 1))\\n }\\n }\\n }\\n hashed := mload(0x0)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x715029b2b420c6ec00bc1f939b837acf45d247fde8426089575b0e7b5e84518b\",\"license\":\"MIT\"},\"src/libraries/math/LibSafeRange.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nlibrary LibSafeRange {\\n function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n unchecked {\\n c = a + b;\\n if (c < a) return type(uint256).max;\\n }\\n }\\n\\n /**\\n * @dev Returns value of a + b; in case result is larger than upperbound, upperbound is returned.\\n */\\n function addWithUpperbound(uint256 a, uint256 b, uint256 ceil) internal pure returns (uint256 c) {\\n if (a > ceil || b > ceil) return ceil;\\n c = add(a, b);\\n if (c > ceil) return ceil;\\n }\\n}\\n\",\"keccak256\":\"0x12cf5f592a2d80b9c1b0ea11b8fe2b3ed42fc6d62303ba667edc56464baa8810\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { xor as ^ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction xor(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) ^ ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0x2e42fbba358c470ff6b57268367d248f0e2fcf8d7142d762688f7aef5efae7ee\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182618, + "numDeployments": 5, + "storageLayout": { + "storage": [ + { + "astId": 50078, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 50081, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 48551, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_roles", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_struct(RoleData)48546_storage)" + }, + { + "astId": 48861, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_roleMembers", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)54430_storage)" + }, + { + "astId": 50439, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_name", + "offset": 0, + "slot": "3", + "type": "t_string_storage" + }, + { + "astId": 50441, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_symbol", + "offset": 0, + "slot": "4", + "type": "t_string_storage" + }, + { + "astId": 50445, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_owners", + "offset": 0, + "slot": "5", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 50449, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_balances", + "offset": 0, + "slot": "6", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 50453, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_tokenApprovals", + "offset": 0, + "slot": "7", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 50459, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_operatorApprovals", + "offset": 0, + "slot": "8", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 439, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "nonces", + "offset": 0, + "slot": "9", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 444, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "______gap", + "offset": 0, + "slot": "10", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 50258, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_paused", + "offset": 0, + "slot": "60", + "type": "t_bool" + }, + { + "astId": 51519, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_ownedTokens", + "offset": 0, + "slot": "61", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))" + }, + { + "astId": 51523, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_ownedTokensIndex", + "offset": 0, + "slot": "62", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 51526, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_allTokens", + "offset": 0, + "slot": "63", + "type": "t_array(t_uint256)dyn_storage" + }, + { + "astId": 51530, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_allTokensIndex", + "offset": 0, + "slot": "64", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 61924, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "____gap", + "offset": 0, + "slot": "65", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 61926, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_idCounter", + "offset": 0, + "slot": "115", + "type": "t_uint256" + }, + { + "astId": 61928, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_baseTokenURI", + "offset": 0, + "slot": "116", + "type": "t_string_storage" + }, + { + "astId": 62214, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "____gap", + "offset": 0, + "slot": "117", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 62216, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_gracePeriod", + "offset": 0, + "slot": "167", + "type": "t_uint64" + }, + { + "astId": 62222, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_recordOf", + "offset": 0, + "slot": "168", + "type": "t_mapping(t_uint256,t_struct(Record)65485_storage)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_array(t_uint256)dyn_storage": { + "encoding": "dynamic_array", + "label": "uint256[]", + "numberOfBytes": "32", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_uint256,t_uint256)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)54430_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct EnumerableSet.AddressSet)", + "numberOfBytes": "32", + "value": "t_struct(AddressSet)54430_storage" + }, + "t_mapping(t_bytes32,t_struct(RoleData)48546_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct AccessControl.RoleData)", + "numberOfBytes": "32", + "value": "t_struct(RoleData)48546_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_address)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_struct(Record)65485_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct INSUnified.Record)", + "numberOfBytes": "32", + "value": "t_struct(Record)65485_storage" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)54430_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.AddressSet", + "numberOfBytes": "64", + "members": [ + { + "astId": 54429, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_inner", + "offset": 0, + "slot": "0", + "type": "t_struct(Set)54115_storage" + } + ] + }, + "t_struct(ImmutableRecord)65468_storage": { + "encoding": "inplace", + "label": "struct INSUnified.ImmutableRecord", + "numberOfBytes": "96", + "members": [ + { + "astId": 65463, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "depth", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 65465, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "parentId", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 65467, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "label", + "offset": 0, + "slot": "2", + "type": "t_string_storage" + } + ] + }, + "t_struct(MutableRecord)65478_storage": { + "encoding": "inplace", + "label": "struct INSUnified.MutableRecord", + "numberOfBytes": "64", + "members": [ + { + "astId": 65471, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "resolver", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 65473, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "owner", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 65475, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "expiry", + "offset": 20, + "slot": "1", + "type": "t_uint64" + }, + { + "astId": 65477, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "protected", + "offset": 28, + "slot": "1", + "type": "t_bool" + } + ] + }, + "t_struct(Record)65485_storage": { + "encoding": "inplace", + "label": "struct INSUnified.Record", + "numberOfBytes": "160", + "members": [ + { + "astId": 65481, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "immut", + "offset": 0, + "slot": "0", + "type": "t_struct(ImmutableRecord)65468_storage" + }, + { + "astId": 65484, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "mut", + "offset": 0, + "slot": "3", + "type": "t_struct(MutableRecord)65478_storage" + } + ] + }, + "t_struct(RoleData)48546_storage": { + "encoding": "inplace", + "label": "struct AccessControl.RoleData", + "numberOfBytes": "64", + "members": [ + { + "astId": 48543, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "members", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 48545, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "adminRole", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ] + }, + "t_struct(Set)54115_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.Set", + "numberOfBytes": "64", + "members": [ + { + "astId": 54110, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_values", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "astId": 54114, + "contract": "src/RNSUnified.sol:RNSUnified", + "label": "_indexes", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint64": { + "encoding": "inplace", + "label": "uint64", + "numberOfBytes": "8" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "timestamp": 1698207678, + "userdoc": { + "version": 1, + "kind": "user", + "methods": { + "CONTROLLER_ROLE()": { + "notice": "Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}." + }, + "PROTECTED_SETTLER_ROLE()": { + "notice": "Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`." + }, + "RESERVATION_ROLE()": { + "notice": "Never expire for token owner has this role." + }, + "stateOf(uint256)": { + "notice": "The token state presents the properties of a token at a certain point in time, it should be unique. The token state helps other contracts can verify the token properties without getting and selecting properties from the base contract. For example: ```solidity contract Kitty { function stateOf(uint256 _tokenId) external view returns (bytes memory) { return abi.encodePacked(ownerOf(_tokenId), genesOf(_tokenId), levelOf(_tokenId)); } } interface Exchange { // Buy NFT with the specificed state of `_tokenId`. function buy(uint256 _tokenId, uint256 _price, bytes calldata _kittyState) external; } ```" + } + } + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RNSUnifiedProxy.json b/deployments/ronin-testnet/RNSUnifiedProxy.json new file mode 100644 index 00000000..1c967025 --- /dev/null +++ b/deployments/ronin-testnet/RNSUnifiedProxy.json @@ -0,0 +1,120 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "address": "0xf0c99c9677EDa0D13291C093b27E6512E4ACdF83", + "args": "0xabfaf005000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000000000000000000000000000000000000076a70000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f6d657461646174612d726e732e736b796d617669732e6f6e652f736169676f6e2f0000000000000000000000000000000000000000000000", + "blockNumber": 21224275, + "bytecode": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "chainId": 2021, + "contractName": "TransparentUpgradeableProxy", + "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.", + "methods": { + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + } + }, + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is changed." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Emitted when the beacon is changed.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\\n * does not implement this interface directly, and some of its functions are implemented by an internal dispatch\\n * mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\\n * include them in the ABI so this interface must be used to interact with it.\\n */\\ninterface ITransparentUpgradeableProxy is IERC1967 {\\n function admin() external view returns (address);\\n\\n function implementation() external view returns (address);\\n\\n function changeAdmin(address) external;\\n\\n function upgradeTo(address) external;\\n\\n function upgradeToAndCall(address, bytes memory) external payable;\\n}\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n *\\n * NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\\n * inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch\\n * mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\\n * fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\\n * implementation.\\n *\\n * WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler\\n * will not check that there are no selector conflicts, due to the note above. A selector clash between any new function\\n * and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could\\n * render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n *\\n * CAUTION: This modifier is deprecated, as it could cause issues if the modified function has arguments, and the\\n * implementation provides a function with the same selector.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior\\n */\\n function _fallback() internal virtual override {\\n if (msg.sender == _getAdmin()) {\\n bytes memory ret;\\n bytes4 selector = msg.sig;\\n if (selector == ITransparentUpgradeableProxy.upgradeTo.selector) {\\n ret = _dispatchUpgradeTo();\\n } else if (selector == ITransparentUpgradeableProxy.upgradeToAndCall.selector) {\\n ret = _dispatchUpgradeToAndCall();\\n } else if (selector == ITransparentUpgradeableProxy.changeAdmin.selector) {\\n ret = _dispatchChangeAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.admin.selector) {\\n ret = _dispatchAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.implementation.selector) {\\n ret = _dispatchImplementation();\\n } else {\\n revert(\\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n }\\n assembly {\\n return(add(ret, 0x20), mload(ret))\\n }\\n } else {\\n super._fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function _dispatchAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address admin = _getAdmin();\\n return abi.encode(admin);\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function _dispatchImplementation() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address implementation = _implementation();\\n return abi.encode(implementation);\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _dispatchChangeAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newAdmin = abi.decode(msg.data[4:], (address));\\n _changeAdmin(newAdmin);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n */\\n function _dispatchUpgradeTo() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newImplementation = abi.decode(msg.data[4:], (address));\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n */\\n function _dispatchUpgradeToAndCall() private returns (bytes memory) {\\n (address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));\\n _upgradeToAndCall(newImplementation, data, true);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * CAUTION: This function is deprecated. Use {ERC1967Upgrade-_getAdmin} instead.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev To keep this contract fully transparent, all `ifAdmin` functions must be payable. This helper is here to\\n * emulate some proxy functions being non-payable while still allowing value to pass through.\\n */\\n function _requireZeroValue() private {\\n require(msg.value == 0);\\n }\\n}\\n\",\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n struct StringSlot {\\n string value;\\n }\\n\\n struct BytesSlot {\\n bytes value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n */\\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n */\\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n */\\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n */\\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182496, + "numDeployments": 1, + "storageLayout": { + "storage": [], + "types": {} + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RONRegistrarControllerLogic.json b/deployments/ronin-testnet/RONRegistrarControllerLogic.json new file mode 100644 index 00000000..f3853745 --- /dev/null +++ b/deployments/ronin-testnet/RONRegistrarControllerLogic.json @@ -0,0 +1,16340 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "payable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "commitment", + "type": "bytes32" + } + ], + "name": "CommitmentTooNew", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "commitment", + "type": "bytes32" + } + ], + "name": "CommitmentTooOld", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "duration", + "type": "uint64" + } + ], + "name": "DurationTooShort", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "requestOwner", + "type": "address" + }, + { + "internalType": "bool", + "name": "nameProtected", + "type": "bool" + }, + { + "internalType": "bool", + "name": "ownerWhitelisted", + "type": "bool" + } + ], + "name": "ErrInvalidRegisterProtectedName", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "ErrRequestedForProtectedName", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientValue", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidArrayLength", + "type": "error" + }, + { + "inputs": [], + "name": "MaxCommitmentAgeTooHigh", + "type": "error" + }, + { + "inputs": [], + "name": "MaxCommitmentAgeTooLow", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "NameNotAvailable", + "type": "error" + }, + { + "inputs": [], + "name": "ResolverRequiredWhenDataSupplied", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "node", + "type": "bytes32" + } + ], + "name": "Unauthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "commitment", + "type": "bytes32" + } + ], + "name": "UnexpiredCommitmentExists", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "minCommitmentAge", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "maxCommitmentAge", + "type": "uint256" + } + ], + "name": "CommitmentAgeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "contract INSDomainPrice", + "name": "newDomainPrice", + "type": "address" + } + ], + "name": "DomainPriceUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "MinRegistrationDurationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ronPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "usdPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "expires", + "type": "uint64" + } + ], + "name": "NameRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cost", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "expires", + "type": "uint64" + } + ], + "name": "NameRenewed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "owners", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "ProtectedNamesWhitelisted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_DOMAIN_LENGTH", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OPERATOR_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "available", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "address[]", + "name": "owners", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "bulkWhitelistProtectedNames", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "commitment", + "type": "bytes32" + } + ], + "name": "commit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint64", + "name": "duration", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "secret", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "resolver", + "type": "address" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + }, + { + "internalType": "bool", + "name": "reverseRecord", + "type": "bool" + } + ], + "name": "computeCommitment", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "computeId", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getCommitmentAgeRange", + "outputs": [ + { + "internalType": "uint256", + "name": "minCommitmentAge", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCommitmentAge", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getMinRegistrationDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNameChecker", + "outputs": [ + { + "internalType": "contract INameChecker", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPriceOracle", + "outputs": [ + { + "internalType": "contract INSDomainPrice", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRNSUnified", + "outputs": [ + { + "internalType": "contract INSUnified", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getReverseRegistrar", + "outputs": [ + { + "internalType": "contract INSReverseRegistrar", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTreasury", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "getWhitelistProtectedNameStatus", + "outputs": [ + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "address", + "name": "pauser", + "type": "address" + }, + { + "internalType": "address payable", + "name": "treasury", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxCommitmentAge", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minCommitmentAge", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minRegistrationDuration", + "type": "uint256" + }, + { + "internalType": "contract INSUnified", + "name": "rnsUnified", + "type": "address" + }, + { + "internalType": "contract INameChecker", + "name": "nameChecker", + "type": "address" + }, + { + "internalType": "contract INSDomainPrice", + "name": "priceOracle", + "type": "address" + }, + { + "internalType": "contract INSReverseRegistrar", + "name": "reverseRegistrar", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint64", + "name": "duration", + "type": "uint64" + }, + { + "internalType": "bytes32", + "name": "secret", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "resolver", + "type": "address" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + }, + { + "internalType": "bool", + "name": "reverseRecord", + "type": "bool" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint64", + "name": "duration", + "type": "uint64" + }, + { + "internalType": "address", + "name": "resolver", + "type": "address" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + }, + { + "internalType": "bool", + "name": "reverseRecord", + "type": "bool" + } + ], + "name": "registerProtectedName", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "uint64", + "name": "duration", + "type": "uint64" + } + ], + "name": "renew", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "uint64", + "name": "duration", + "type": "uint64" + } + ], + "name": "rentPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "usdPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ronPrice", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "minCommitmentAge", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxCommitmentAge", + "type": "uint256" + } + ], + "name": "setCommitmentAge", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "setMinRegistrationDuration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract INSDomainPrice", + "name": "priceOracle", + "type": "address" + } + ], + "name": "setPriceOracle", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "addr", + "type": "address" + } + ], + "name": "setTreasury", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "valid", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "address": "0x4d3a1C1C7EAe7E4e68fc0eFF8d721B0140793244", + "args": "0x", + "ast": { + "absolutePath": "src/RONRegistrarController.sol", + "id": 63921, + "exportedSymbols": { + "AccessControlEnumerable": [ + 48591 + ], + "INSDomainPrice": [ + 64599 + ], + "INSReverseRegistrar": [ + 64718 + ], + "INSUnified": [ + 64975 + ], + "INameChecker": [ + 65094 + ], + "IPublicResolver": [ + 65816 + ], + "IRONRegistrarController": [ + 65460 + ], + "Initializable": [ + 49864 + ], + "LibRNSDomain": [ + 66042 + ], + "LibString": [ + 66324 + ], + "Pausable": [ + 49972 + ], + "RONRegistrarController": [ + 63920 + ], + "RONTransferHelper": [ + 67444 + ], + "ReentrancyGuard": [ + 50037 + ] + }, + "nodeType": "SourceUnit", + "src": "32:14706:86", + "nodes": [ + { + "id": 62756, + "nodeType": "PragmaDirective", + "src": "32:24:86", + "nodes": [], + "literals": [ + "solidity", + "^", + "0.8", + ".19" + ] + }, + { + "id": 62758, + "nodeType": "ImportDirective", + "src": "58:73:86", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/security/Pausable.sol", + "file": "@openzeppelin/contracts/security/Pausable.sol", + "nameLocation": "-1:-1:-1", + "scope": 63921, + "sourceUnit": 49973, + "symbolAliases": [ + { + "foreign": { + "id": 62757, + "name": "Pausable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49972, + "src": "67:8:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62760, + "nodeType": "ImportDirective", + "src": "132:86:86", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol", + "file": "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "nameLocation": "-1:-1:-1", + "scope": 63921, + "sourceUnit": 49865, + "symbolAliases": [ + { + "foreign": { + "id": 62759, + "name": "Initializable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49864, + "src": "141:13:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62762, + "nodeType": "ImportDirective", + "src": "219:87:86", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol", + "file": "@openzeppelin/contracts/security/ReentrancyGuard.sol", + "nameLocation": "-1:-1:-1", + "scope": 63921, + "sourceUnit": 50038, + "symbolAliases": [ + { + "foreign": { + "id": 62761, + "name": "ReentrancyGuard", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50037, + "src": "228:15:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62764, + "nodeType": "ImportDirective", + "src": "307:101:86", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol", + "file": "@openzeppelin/contracts/access/AccessControlEnumerable.sol", + "nameLocation": "-1:-1:-1", + "scope": 63921, + "sourceUnit": 48592, + "symbolAliases": [ + { + "foreign": { + "id": 62763, + "name": "AccessControlEnumerable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48591, + "src": "316:23:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62766, + "nodeType": "ImportDirective", + "src": "409:77:86", + "nodes": [], + "absolutePath": "src/interfaces/resolvers/IPublicResolver.sol", + "file": "./interfaces/resolvers/IPublicResolver.sol", + "nameLocation": "-1:-1:-1", + "scope": 63921, + "sourceUnit": 65817, + "symbolAliases": [ + { + "foreign": { + "id": 62765, + "name": "IPublicResolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65816, + "src": "418:15:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62772, + "nodeType": "ImportDirective", + "src": "487:156:86", + "nodes": [], + "absolutePath": "src/interfaces/IRONRegistrarController.sol", + "file": "./interfaces/IRONRegistrarController.sol", + "nameLocation": "-1:-1:-1", + "scope": 63921, + "sourceUnit": 65461, + "symbolAliases": [ + { + "foreign": { + "id": 62767, + "name": "INSUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64975, + "src": "498:10:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62768, + "name": "INameChecker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65094, + "src": "512:12:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62769, + "name": "INSDomainPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64599, + "src": "528:14:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62770, + "name": "INSReverseRegistrar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64718, + "src": "546:19:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 62771, + "name": "IRONRegistrarController", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65460, + "src": "569:23:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62774, + "nodeType": "ImportDirective", + "src": "644:54:86", + "nodes": [], + "absolutePath": "src/libraries/LibString.sol", + "file": "./libraries/LibString.sol", + "nameLocation": "-1:-1:-1", + "scope": 63921, + "sourceUnit": 66325, + "symbolAliases": [ + { + "foreign": { + "id": 62773, + "name": "LibString", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66324, + "src": "653:9:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62776, + "nodeType": "ImportDirective", + "src": "699:60:86", + "nodes": [], + "absolutePath": "src/libraries/LibRNSDomain.sol", + "file": "./libraries/LibRNSDomain.sol", + "nameLocation": "-1:-1:-1", + "scope": 63921, + "sourceUnit": 66043, + "symbolAliases": [ + { + "foreign": { + "id": 62775, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66042, + "src": "708:12:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 62778, + "nodeType": "ImportDirective", + "src": "760:80:86", + "nodes": [], + "absolutePath": "src/libraries/transfers/RONTransferHelper.sol", + "file": "./libraries/transfers/RONTransferHelper.sol", + "nameLocation": "-1:-1:-1", + "scope": 63921, + "sourceUnit": 67445, + "symbolAliases": [ + { + "foreign": { + "id": 62777, + "name": "RONTransferHelper", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67444, + "src": "769:17:86", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 63920, + "nodeType": "ContractDefinition", + "src": "1161:13576:86", + "nodes": [ + { + "id": 62792, + "nodeType": "UsingForDirective", + "src": "1301:27:86", + "nodes": [], + "global": false, + "libraryName": { + "id": 62790, + "name": "LibString", + "nameLocations": [ + "1307:9:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66324, + "src": "1307:9:86" + }, + "typeName": { + "id": 62791, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1321:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + { + "id": 62795, + "nodeType": "UsingForDirective", + "src": "1331:30:86", + "nodes": [], + "global": false, + "libraryName": { + "id": 62793, + "name": "LibRNSDomain", + "nameLocations": [ + "1337:12:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66042, + "src": "1337:12:86" + }, + "typeName": { + "id": 62794, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "1354:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + } + }, + { + "id": 62799, + "nodeType": "VariableDeclaration", + "src": "1409:43:86", + "nodes": [], + "baseFunctions": [ + 65417 + ], + "constant": true, + "documentation": { + "id": 62796, + "nodeType": "StructuredDocumentation", + "src": "1365:41:86", + "text": "@dev The minimum domain name's length" + }, + "functionSelector": "29aa4f51", + "mutability": "constant", + "name": "MIN_DOMAIN_LENGTH", + "nameLocation": "1431:17:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 62797, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1409:5:86", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "value": { + "hexValue": "33", + "id": 62798, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1451:1:86", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "visibility": "public" + }, + { + "id": 62805, + "nodeType": "VariableDeclaration", + "src": "1498:62:86", + "nodes": [], + "baseFunctions": [ + 65405 + ], + "constant": true, + "documentation": { + "id": 62800, + "nodeType": "StructuredDocumentation", + "src": "1456:39:86", + "text": "@inheritdoc IRONRegistrarController" + }, + "functionSelector": "e63ab1e9", + "mutability": "constant", + "name": "PAUSER_ROLE", + "nameLocation": "1522:11:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 62801, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1498:7:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "5041555345525f524f4c45", + "id": 62803, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1546:13:86", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a", + "typeString": "literal_string \"PAUSER_ROLE\"" + }, + "value": "PAUSER_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a", + "typeString": "literal_string \"PAUSER_ROLE\"" + } + ], + "id": 62802, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1536:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 62804, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1536:24:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 62811, + "nodeType": "VariableDeclaration", + "src": "1606:66:86", + "nodes": [], + "baseFunctions": [ + 65411 + ], + "constant": true, + "documentation": { + "id": 62806, + "nodeType": "StructuredDocumentation", + "src": "1564:39:86", + "text": "@inheritdoc IRONRegistrarController" + }, + "functionSelector": "f5b541a6", + "mutability": "constant", + "name": "OPERATOR_ROLE", + "nameLocation": "1630:13:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 62807, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1606:7:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "value": { + "arguments": [ + { + "hexValue": "4f50455241544f525f524f4c45", + "id": 62809, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1656:15:86", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "typeString": "literal_string \"OPERATOR_ROLE\"" + }, + "value": "OPERATOR_ROLE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929", + "typeString": "literal_string \"OPERATOR_ROLE\"" + } + ], + "id": 62808, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "1646:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 62810, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1646:26:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "public" + }, + { + "id": 62816, + "nodeType": "VariableDeclaration", + "src": "1712:27:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62812, + "nodeType": "StructuredDocumentation", + "src": "1677:32:86", + "text": "@dev Gap for upgradeability." + }, + "mutability": "mutable", + "name": "____gap", + "nameLocation": "1732:7:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 62813, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1712:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 62815, + "length": { + "hexValue": "3530", + "id": 62814, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1720:2:86", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "1712:11:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + }, + { + "id": 62819, + "nodeType": "VariableDeclaration", + "src": "1822:34:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62817, + "nodeType": "StructuredDocumentation", + "src": "1744:75:86", + "text": "@dev Minimum duration between commitment and registration in second(s)." + }, + "mutability": "mutable", + "name": "_minCommitmentAge", + "nameLocation": "1839:17:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62818, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1822:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "id": 62822, + "nodeType": "VariableDeclaration", + "src": "1938:34:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62820, + "nodeType": "StructuredDocumentation", + "src": "1860:75:86", + "text": "@dev Maximum duration between commitment and registration in second(s)." + }, + "mutability": "mutable", + "name": "_maxCommitmentAge", + "nameLocation": "1955:17:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62821, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1938:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "id": 62825, + "nodeType": "VariableDeclaration", + "src": "2013:41:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62823, + "nodeType": "StructuredDocumentation", + "src": "1976:34:86", + "text": "@dev Min registration duration" + }, + "mutability": "mutable", + "name": "_minRegistrationDuration", + "nameLocation": "2030:24:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62824, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2013:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "id": 62828, + "nodeType": "VariableDeclaration", + "src": "2092:34:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62826, + "nodeType": "StructuredDocumentation", + "src": "2059:30:86", + "text": "@dev The treasury address." + }, + "mutability": "mutable", + "name": "_treasury", + "nameLocation": "2117:9:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 62827, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2092:15:86", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "id": 62832, + "nodeType": "VariableDeclaration", + "src": "2167:31:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62829, + "nodeType": "StructuredDocumentation", + "src": "2130:34:86", + "text": "@dev The rns unified contract." + }, + "mutability": "mutable", + "name": "_rnsUnified", + "nameLocation": "2187:11:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + }, + "typeName": { + "id": 62831, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62830, + "name": "INSUnified", + "nameLocations": [ + "2167:10:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64975, + "src": "2167:10:86" + }, + "referencedDeclaration": 64975, + "src": "2167:10:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "visibility": "internal" + }, + { + "id": 62836, + "nodeType": "VariableDeclaration", + "src": "2239:34:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62833, + "nodeType": "StructuredDocumentation", + "src": "2202:34:86", + "text": "@dev The namechecker contract." + }, + "mutability": "mutable", + "name": "_nameChecker", + "nameLocation": "2261:12:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + }, + "typeName": { + "id": 62835, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62834, + "name": "INameChecker", + "nameLocations": [ + "2239:12:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65094, + "src": "2239:12:86" + }, + "referencedDeclaration": 65094, + "src": "2239:12:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + } + }, + "visibility": "internal" + }, + { + "id": 62840, + "nodeType": "VariableDeclaration", + "src": "2306:36:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62837, + "nodeType": "StructuredDocumentation", + "src": "2277:26:86", + "text": "@dev The price oracle." + }, + "mutability": "mutable", + "name": "_priceOracle", + "nameLocation": "2330:12:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + }, + "typeName": { + "id": 62839, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62838, + "name": "INSDomainPrice", + "nameLocations": [ + "2306:14:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64599, + "src": "2306:14:86" + }, + "referencedDeclaration": 64599, + "src": "2306:14:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "visibility": "internal" + }, + { + "id": 62844, + "nodeType": "VariableDeclaration", + "src": "2389:46:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62841, + "nodeType": "StructuredDocumentation", + "src": "2346:40:86", + "text": "@dev The reverse registrar contract." + }, + "mutability": "mutable", + "name": "_reverseRegistrar", + "nameLocation": "2418:17:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + }, + "typeName": { + "id": 62843, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62842, + "name": "INSReverseRegistrar", + "nameLocations": [ + "2389:19:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64718, + "src": "2389:19:86" + }, + "referencedDeclaration": 64718, + "src": "2389:19:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + } + }, + "visibility": "internal" + }, + { + "id": 62849, + "nodeType": "VariableDeclaration", + "src": "2515:70:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62845, + "nodeType": "StructuredDocumentation", + "src": "2440:72:86", + "text": "@dev Mapping from commitment hash => timestamp that commitment made." + }, + "mutability": "mutable", + "name": "_committedAt", + "nameLocation": "2573:12:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "typeName": { + "id": 62848, + "keyName": "commitment", + "keyNameLocation": "2531:10:86", + "keyType": { + "id": 62846, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2523:7:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "Mapping", + "src": "2515:48:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + }, + "valueName": "timestamp", + "valueNameLocation": "2553:9:86", + "valueType": { + "id": 62847, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2545:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + "visibility": "internal" + }, + { + "id": 62856, + "nodeType": "VariableDeclaration", + "src": "2694:89:86", + "nodes": [], + "constant": false, + "documentation": { + "id": 62850, + "nodeType": "StructuredDocumentation", + "src": "2589:102:86", + "text": "@dev Mapping id => owner => flag indicating whether the owner is whitelisted to buy protected name" + }, + "mutability": "mutable", + "name": "_protectedNamesWhitelisted", + "nameLocation": "2757:26:86", + "scope": 63920, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(uint256 => mapping(address => bool))" + }, + "typeName": { + "id": 62855, + "keyName": "id", + "keyNameLocation": "2710:2:86", + "keyType": { + "id": 62851, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2702:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Mapping", + "src": "2694:53:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(uint256 => mapping(address => bool))" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 62854, + "keyName": "owner", + "keyNameLocation": "2732:5:86", + "keyType": { + "id": 62852, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2724:7:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Mapping", + "src": "2716:30:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + }, + "valueName": "", + "valueNameLocation": "-1:-1:-1", + "valueType": { + "id": 62853, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2741:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + } + }, + "visibility": "internal" + }, + { + "id": 62866, + "nodeType": "ModifierDefinition", + "src": "2788:84:86", + "nodes": [], + "body": { + "id": 62865, + "nodeType": "Block", + "src": "2831:41:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 62861, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62858, + "src": "2855:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 62860, + "name": "_requireAvailable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63919, + "src": "2837:17:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) view" + } + }, + "id": 62862, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2837:23:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62863, + "nodeType": "ExpressionStatement", + "src": "2837:23:86" + }, + { + "id": 62864, + "nodeType": "PlaceholderStatement", + "src": "2866:1:86" + } + ] + }, + "name": "onlyAvailable", + "nameLocation": "2797:13:86", + "parameters": { + "id": 62859, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62858, + "mutability": "mutable", + "name": "name", + "nameLocation": "2825:4:86", + "nodeType": "VariableDeclaration", + "scope": 62866, + "src": "2811:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 62857, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "2811:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "2810:20:86" + }, + "virtual": false, + "visibility": "internal" + }, + { + "id": 62873, + "nodeType": "FunctionDefinition", + "src": "2876:55:86", + "nodes": [], + "body": { + "id": 62872, + "nodeType": "Block", + "src": "2898:33:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 62869, + "name": "_disableInitializers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49845, + "src": "2904:20:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 62870, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2904:22:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62871, + "nodeType": "ExpressionStatement", + "src": "2904:22:86" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 62867, + "nodeType": "ParameterList", + "parameters": [], + "src": "2887:2:86" + }, + "returnParameters": { + "id": 62868, + "nodeType": "ParameterList", + "parameters": [], + "src": "2898:0:86" + }, + "scope": 63920, + "stateMutability": "payable", + "virtual": false, + "visibility": "public" + }, + { + "id": 62942, + "nodeType": "FunctionDefinition", + "src": "2935:710:86", + "nodes": [], + "body": { + "id": 62941, + "nodeType": "Block", + "src": "3277:368:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 62903, + "name": "PAUSER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62805, + "src": "3294:11:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 62904, + "name": "pauser", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62877, + "src": "3307:6:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 62902, + "name": "_setupRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48374, + "src": "3283:10:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 62905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3283:31:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62906, + "nodeType": "ExpressionStatement", + "src": "3283:31:86" + }, + { + "expression": { + "arguments": [ + { + "id": 62908, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "3331:18:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 62909, + "name": "admin", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62875, + "src": "3351:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 62907, + "name": "_setupRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48374, + "src": "3320:10:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$", + "typeString": "function (bytes32,address)" + } + }, + "id": 62910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3320:37:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62911, + "nodeType": "ExpressionStatement", + "src": "3320:37:86" + }, + { + "expression": { + "arguments": [ + { + "id": 62913, + "name": "priceOracle", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62894, + "src": "3380:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + ], + "id": 62912, + "name": "_setPriceOracle", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63903, + "src": "3364:15:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_INSDomainPrice_$64599_$returns$__$", + "typeString": "function (contract INSDomainPrice)" + } + }, + "id": 62914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3364:28:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62915, + "nodeType": "ExpressionStatement", + "src": "3364:28:86" + }, + { + "expression": { + "arguments": [ + { + "id": 62917, + "name": "minRegistrationDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62885, + "src": "3426:23:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62916, + "name": "_setMinRegistrationDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63706, + "src": "3398:27:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 62918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3398:52:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62919, + "nodeType": "ExpressionStatement", + "src": "3398:52:86" + }, + { + "expression": { + "arguments": [ + { + "id": 62921, + "name": "minCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62883, + "src": "3474:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 62922, + "name": "maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62881, + "src": "3492:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 62920, + "name": "_setCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63565, + "src": "3456:17:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 62923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3456:53:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62924, + "nodeType": "ExpressionStatement", + "src": "3456:53:86" + }, + { + "expression": { + "id": 62927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62925, + "name": "_treasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62828, + "src": "3516:9:86", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62926, + "name": "treasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62879, + "src": "3528:8:86", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "3516:20:86", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 62928, + "nodeType": "ExpressionStatement", + "src": "3516:20:86" + }, + { + "expression": { + "id": 62931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62929, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62832, + "src": "3542:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62930, + "name": "rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62888, + "src": "3556:10:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "src": "3542:24:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "id": 62932, + "nodeType": "ExpressionStatement", + "src": "3542:24:86" + }, + { + "expression": { + "id": 62935, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62933, + "name": "_nameChecker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62836, + "src": "3572:12:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62934, + "name": "nameChecker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62891, + "src": "3587:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + } + }, + "src": "3572:26:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + } + }, + "id": 62936, + "nodeType": "ExpressionStatement", + "src": "3572:26:86" + }, + { + "expression": { + "id": 62939, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62937, + "name": "_reverseRegistrar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62844, + "src": "3604:17:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 62938, + "name": "reverseRegistrar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62897, + "src": "3624:16:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + } + }, + "src": "3604:36:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + } + }, + "id": 62940, + "nodeType": "ExpressionStatement", + "src": "3604:36:86" + } + ] + }, + "functionSelector": "64c65705", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 62900, + "kind": "modifierInvocation", + "modifierName": { + "id": 62899, + "name": "initializer", + "nameLocations": [ + "3265:11:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49766, + "src": "3265:11:86" + }, + "nodeType": "ModifierInvocation", + "src": "3265:11:86" + } + ], + "name": "initialize", + "nameLocation": "2944:10:86", + "parameters": { + "id": 62898, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62875, + "mutability": "mutable", + "name": "admin", + "nameLocation": "2968:5:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "2960:13:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62874, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2960:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62877, + "mutability": "mutable", + "name": "pauser", + "nameLocation": "2987:6:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "2979:14:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 62876, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2979:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62879, + "mutability": "mutable", + "name": "treasury", + "nameLocation": "3015:8:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "2999:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 62878, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2999:15:86", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62881, + "mutability": "mutable", + "name": "maxCommitmentAge", + "nameLocation": "3037:16:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "3029:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62880, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3029:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62883, + "mutability": "mutable", + "name": "minCommitmentAge", + "nameLocation": "3067:16:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "3059:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62882, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3059:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62885, + "mutability": "mutable", + "name": "minRegistrationDuration", + "nameLocation": "3097:23:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "3089:31:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62884, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3089:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62888, + "mutability": "mutable", + "name": "rnsUnified", + "nameLocation": "3137:10:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "3126:21:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + }, + "typeName": { + "id": 62887, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62886, + "name": "INSUnified", + "nameLocations": [ + "3126:10:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64975, + "src": "3126:10:86" + }, + "referencedDeclaration": 64975, + "src": "3126:10:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62891, + "mutability": "mutable", + "name": "nameChecker", + "nameLocation": "3166:11:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "3153:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + }, + "typeName": { + "id": 62890, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62889, + "name": "INameChecker", + "nameLocations": [ + "3153:12:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65094, + "src": "3153:12:86" + }, + "referencedDeclaration": 65094, + "src": "3153:12:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62894, + "mutability": "mutable", + "name": "priceOracle", + "nameLocation": "3198:11:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "3183:26:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + }, + "typeName": { + "id": 62893, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62892, + "name": "INSDomainPrice", + "nameLocations": [ + "3183:14:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64599, + "src": "3183:14:86" + }, + "referencedDeclaration": 64599, + "src": "3183:14:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62897, + "mutability": "mutable", + "name": "reverseRegistrar", + "nameLocation": "3235:16:86", + "nodeType": "VariableDeclaration", + "scope": 62942, + "src": "3215:36:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + }, + "typeName": { + "id": 62896, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62895, + "name": "INSReverseRegistrar", + "nameLocations": [ + "3215:19:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64718, + "src": "3215:19:86" + }, + "referencedDeclaration": 64718, + "src": "3215:19:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + } + }, + "visibility": "internal" + } + ], + "src": "2954:301:86" + }, + "returnParameters": { + "id": 62901, + "nodeType": "ParameterList", + "parameters": [], + "src": "3277:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62953, + "nodeType": "FunctionDefinition", + "src": "3702:67:86", + "nodes": [], + "body": { + "id": 62952, + "nodeType": "Block", + "src": "3750:19:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 62949, + "name": "_pause", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49955, + "src": "3756:6:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 62950, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3756:8:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62951, + "nodeType": "ExpressionStatement", + "src": "3756:8:86" + } + ] + }, + "baseFunctions": [ + 65395 + ], + "documentation": { + "id": 62943, + "nodeType": "StructuredDocumentation", + "src": "3649:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "8456cb59", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 62946, + "name": "PAUSER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62805, + "src": "3737:11:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 62947, + "kind": "modifierInvocation", + "modifierName": { + "id": 62945, + "name": "onlyRole", + "nameLocations": [ + "3728:8:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "3728:8:86" + }, + "nodeType": "ModifierInvocation", + "src": "3728:21:86" + } + ], + "name": "pause", + "nameLocation": "3711:5:86", + "parameters": { + "id": 62944, + "nodeType": "ParameterList", + "parameters": [], + "src": "3716:2:86" + }, + "returnParameters": { + "id": 62948, + "nodeType": "ParameterList", + "parameters": [], + "src": "3750:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62964, + "nodeType": "FunctionDefinition", + "src": "3826:71:86", + "nodes": [], + "body": { + "id": 62963, + "nodeType": "Block", + "src": "3876:21:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 62960, + "name": "_unpause", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 49971, + "src": "3882:8:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 62961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3882:10:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 62962, + "nodeType": "ExpressionStatement", + "src": "3882:10:86" + } + ] + }, + "baseFunctions": [ + 65399 + ], + "documentation": { + "id": 62954, + "nodeType": "StructuredDocumentation", + "src": "3773:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "3f4ba83a", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 62957, + "name": "PAUSER_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62805, + "src": "3863:11:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 62958, + "kind": "modifierInvocation", + "modifierName": { + "id": 62956, + "name": "onlyRole", + "nameLocations": [ + "3854:8:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "3854:8:86" + }, + "nodeType": "ModifierInvocation", + "src": "3854:21:86" + } + ], + "name": "unpause", + "nameLocation": "3835:7:86", + "parameters": { + "id": 62955, + "nodeType": "ParameterList", + "parameters": [], + "src": "3842:2:86" + }, + "returnParameters": { + "id": 62959, + "nodeType": "ParameterList", + "parameters": [], + "src": "3876:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 62973, + "nodeType": "FunctionDefinition", + "src": "3954:110:86", + "nodes": [], + "body": { + "id": 62972, + "nodeType": "Block", + "src": "4022:42:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 62970, + "name": "_minRegistrationDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62825, + "src": "4035:24:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 62969, + "id": 62971, + "nodeType": "Return", + "src": "4028:31:86" + } + ] + }, + "baseFunctions": [ + 65423 + ], + "documentation": { + "id": 62965, + "nodeType": "StructuredDocumentation", + "src": "3901:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "42c20288", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getMinRegistrationDuration", + "nameLocation": "3963:26:86", + "parameters": { + "id": 62966, + "nodeType": "ParameterList", + "parameters": [], + "src": "3989:2:86" + }, + "returnParameters": { + "id": 62969, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62968, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 62973, + "src": "4013:7:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62967, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4013:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4012:9:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 63016, + "nodeType": "FunctionDefinition", + "src": "4121:335:86", + "nodes": [], + "body": { + "id": 63015, + "nodeType": "Block", + "src": "4234:222:86", + "nodes": [], + "statements": [ + { + "assignments": [ + 62989, + 62992 + ], + "declarations": [ + { + "constant": false, + "id": 62989, + "mutability": "mutable", + "name": "basePrice", + "nameLocation": "4273:9:86", + "nodeType": "VariableDeclaration", + "scope": 63015, + "src": "4241:41:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64351_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice" + }, + "typeName": { + "id": 62988, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62987, + "name": "INSDomainPrice.UnitPrice", + "nameLocations": [ + "4241:14:86", + "4256:9:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64351, + "src": "4241:24:86" + }, + "referencedDeclaration": 64351, + "src": "4241:24:86", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64351_storage_ptr", + "typeString": "struct INSDomainPrice.UnitPrice" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62992, + "mutability": "mutable", + "name": "tax", + "nameLocation": "4316:3:86", + "nodeType": "VariableDeclaration", + "scope": 63015, + "src": "4284:35:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64351_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice" + }, + "typeName": { + "id": 62991, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 62990, + "name": "INSDomainPrice.UnitPrice", + "nameLocations": [ + "4284:14:86", + "4299:9:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64351, + "src": "4284:24:86" + }, + "referencedDeclaration": 64351, + "src": "4284:24:86", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64351_storage_ptr", + "typeString": "struct INSDomainPrice.UnitPrice" + } + }, + "visibility": "internal" + } + ], + "id": 62998, + "initialValue": { + "arguments": [ + { + "id": 62995, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62976, + "src": "4356:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 62996, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62978, + "src": "4362:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 62993, + "name": "_priceOracle", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62840, + "src": "4329:12:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "id": 62994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4342:13:86", + "memberName": "getRenewalFee", + "nodeType": "MemberAccess", + "referencedDeclaration": 64505, + "src": "4329:26:86", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_uint256_$returns$_t_struct$_UnitPrice_$64351_memory_ptr_$_t_struct$_UnitPrice_$64351_memory_ptr_$", + "typeString": "function (string memory,uint256) view external returns (struct INSDomainPrice.UnitPrice memory,struct INSDomainPrice.UnitPrice memory)" + } + }, + "id": 62997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4329:42:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_struct$_UnitPrice_$64351_memory_ptr_$_t_struct$_UnitPrice_$64351_memory_ptr_$", + "typeString": "tuple(struct INSDomainPrice.UnitPrice memory,struct INSDomainPrice.UnitPrice memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4240:131:86" + }, + { + "expression": { + "id": 63005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 62999, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62981, + "src": "4377:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63000, + "name": "basePrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62989, + "src": "4388:9:86", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64351_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 63001, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4398:3:86", + "memberName": "usd", + "nodeType": "MemberAccess", + "referencedDeclaration": 64348, + "src": "4388:13:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "expression": { + "id": 63002, + "name": "tax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62992, + "src": "4404:3:86", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64351_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 63003, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4408:3:86", + "memberName": "usd", + "nodeType": "MemberAccess", + "referencedDeclaration": 64348, + "src": "4404:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4388:23:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4377:34:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63006, + "nodeType": "ExpressionStatement", + "src": "4377:34:86" + }, + { + "expression": { + "id": 63013, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63007, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62983, + "src": "4417:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63012, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63008, + "name": "basePrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62989, + "src": "4428:9:86", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64351_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 63009, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4438:3:86", + "memberName": "ron", + "nodeType": "MemberAccess", + "referencedDeclaration": 64350, + "src": "4428:13:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "expression": { + "id": 63010, + "name": "tax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62992, + "src": "4444:3:86", + "typeDescriptions": { + "typeIdentifier": "t_struct$_UnitPrice_$64351_memory_ptr", + "typeString": "struct INSDomainPrice.UnitPrice memory" + } + }, + "id": 63011, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4448:3:86", + "memberName": "ron", + "nodeType": "MemberAccess", + "referencedDeclaration": 64350, + "src": "4444:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4428:23:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "4417:34:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63014, + "nodeType": "ExpressionStatement", + "src": "4417:34:86" + } + ] + }, + "baseFunctions": [ + 65241 + ], + "documentation": { + "id": 62974, + "nodeType": "StructuredDocumentation", + "src": "4068:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "b24b17b0", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "rentPrice", + "nameLocation": "4130:9:86", + "parameters": { + "id": 62979, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62976, + "mutability": "mutable", + "name": "name", + "nameLocation": "4154:4:86", + "nodeType": "VariableDeclaration", + "scope": 63016, + "src": "4140:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 62975, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4140:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62978, + "mutability": "mutable", + "name": "duration", + "nameLocation": "4167:8:86", + "nodeType": "VariableDeclaration", + "scope": 63016, + "src": "4160:15:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 62977, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4160:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "4139:37:86" + }, + "returnParameters": { + "id": 62984, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 62981, + "mutability": "mutable", + "name": "usdPrice", + "nameLocation": "4206:8:86", + "nodeType": "VariableDeclaration", + "scope": 63016, + "src": "4198:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62980, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4198:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 62983, + "mutability": "mutable", + "name": "ronPrice", + "nameLocation": "4224:8:86", + "nodeType": "VariableDeclaration", + "scope": 63016, + "src": "4216:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 62982, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4216:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4197:36:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 63037, + "nodeType": "FunctionDefinition", + "src": "4513:147:86", + "nodes": [], + "body": { + "id": 63036, + "nodeType": "Block", + "src": "4575:85:86", + "nodes": [], + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63034, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63028, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 63024, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63019, + "src": "4588:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + "id": 63025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4593:6:86", + "memberName": "strlen", + "nodeType": "MemberAccess", + "referencedDeclaration": 66149, + "src": "4588:11:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$attached_to$_t_string_memory_ptr_$", + "typeString": "function (string memory) pure returns (uint256)" + } + }, + "id": 63026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4588:13:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "id": 63027, + "name": "MIN_DOMAIN_LENGTH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62799, + "src": "4605:17:86", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "4588:34:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "id": 63033, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4626:29:86", + "subExpression": { + "arguments": [ + { + "id": 63031, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63019, + "src": "4650:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 63029, + "name": "_nameChecker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62836, + "src": "4627:12:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + } + }, + "id": 63030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4640:9:86", + "memberName": "forbidden", + "nodeType": "MemberAccess", + "referencedDeclaration": 65059, + "src": "4627:22:86", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$returns$_t_bool_$", + "typeString": "function (string memory) view external returns (bool)" + } + }, + "id": 63032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4627:28:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "4588:67:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 63023, + "id": 63035, + "nodeType": "Return", + "src": "4581:74:86" + } + ] + }, + "baseFunctions": [ + 65257 + ], + "documentation": { + "id": 63017, + "nodeType": "StructuredDocumentation", + "src": "4460:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "9791c097", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "valid", + "nameLocation": "4522:5:86", + "parameters": { + "id": 63020, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63019, + "mutability": "mutable", + "name": "name", + "nameLocation": "4542:4:86", + "nodeType": "VariableDeclaration", + "scope": 63037, + "src": "4528:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63018, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4528:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "4527:20:86" + }, + "returnParameters": { + "id": 63023, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63022, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63037, + "src": "4569:4:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63021, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4569:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4568:6:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 63057, + "nodeType": "FunctionDefinition", + "src": "4717:137:86", + "nodes": [], + "body": { + "id": 63056, + "nodeType": "Block", + "src": "4783:71:86", + "nodes": [], + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 63046, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63040, + "src": "4802:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63045, + "name": "valid", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63037, + "src": "4796:5:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$", + "typeString": "function (string memory) view returns (bool)" + } + }, + "id": 63047, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4796:11:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "arguments": [ + { + "arguments": [ + { + "id": 63051, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63040, + "src": "4843:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63050, + "name": "computeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63128, + "src": "4833:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (string memory) pure returns (uint256)" + } + }, + "id": 63052, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4833:15:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63048, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62832, + "src": "4811:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "id": 63049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4823:9:86", + "memberName": "available", + "nodeType": "MemberAccess", + "referencedDeclaration": 64853, + "src": "4811:21:86", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view external returns (bool)" + } + }, + "id": 63053, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4811:38:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "4796:53:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 63044, + "id": 63055, + "nodeType": "Return", + "src": "4789:60:86" + } + ] + }, + "baseFunctions": [ + 65265 + ], + "documentation": { + "id": 63038, + "nodeType": "StructuredDocumentation", + "src": "4664:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "aeb8ce9b", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "available", + "nameLocation": "4726:9:86", + "parameters": { + "id": 63041, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63040, + "mutability": "mutable", + "name": "name", + "nameLocation": "4750:4:86", + "nodeType": "VariableDeclaration", + "scope": 63057, + "src": "4736:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63039, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4736:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "4735:20:86" + }, + "returnParameters": { + "id": 63044, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63043, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63057, + "src": "4777:4:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63042, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4777:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4776:6:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 63112, + "nodeType": "FunctionDefinition", + "src": "4911:445:86", + "nodes": [], + "body": { + "id": 63111, + "nodeType": "Block", + "src": "5149:207:86", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63084, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63081, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63071, + "src": "5159:4:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + "id": 63082, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5164:6:86", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5159:11:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 63083, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5174:1:86", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5159:16:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 63090, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63085, + "name": "resolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63068, + "src": "5179:8:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 63088, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5199:1:86", + "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": 63087, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5191:7:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 63086, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5191:7:86", + "typeDescriptions": {} + } + }, + "id": 63089, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5191:10:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5179:22:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "5159:42:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63095, + "nodeType": "IfStatement", + "src": "5155:89:86", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63092, + "name": "ResolverRequiredWhenDataSupplied", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65128, + "src": "5210:32:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5210:34:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63094, + "nodeType": "RevertStatement", + "src": "5203:41:86" + } + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "id": 63100, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63060, + "src": "5288:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63099, + "name": "computeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63128, + "src": "5278:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (string memory) pure returns (uint256)" + } + }, + "id": 63101, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5278:15:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63102, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63062, + "src": "5295:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63103, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63064, + "src": "5302:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 63104, + "name": "secret", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63066, + "src": "5312:6:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 63105, + "name": "resolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63068, + "src": "5320:8:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63106, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63071, + "src": "5330:4:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + { + "id": 63107, + "name": "reverseRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63073, + "src": "5336:13:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "id": 63097, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "5267:3:86", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 63098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5271:6:86", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "5267:10:86", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 63108, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5267:83:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 63096, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "5257:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 63109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5257:94:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 63080, + "id": 63110, + "nodeType": "Return", + "src": "5250:101:86" + } + ] + }, + "baseFunctions": [ + 65286 + ], + "documentation": { + "id": 63058, + "nodeType": "StructuredDocumentation", + "src": "4858:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "db9bf5ed", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 63076, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63060, + "src": "5125:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "id": 63077, + "kind": "modifierInvocation", + "modifierName": { + "id": 63075, + "name": "onlyAvailable", + "nameLocations": [ + "5111:13:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 62866, + "src": "5111:13:86" + }, + "nodeType": "ModifierInvocation", + "src": "5111:19:86" + } + ], + "name": "computeCommitment", + "nameLocation": "4920:17:86", + "parameters": { + "id": 63074, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63060, + "mutability": "mutable", + "name": "name", + "nameLocation": "4957:4:86", + "nodeType": "VariableDeclaration", + "scope": 63112, + "src": "4943:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63059, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4943:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63062, + "mutability": "mutable", + "name": "owner", + "nameLocation": "4975:5:86", + "nodeType": "VariableDeclaration", + "scope": 63112, + "src": "4967:13:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63061, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4967:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63064, + "mutability": "mutable", + "name": "duration", + "nameLocation": "4993:8:86", + "nodeType": "VariableDeclaration", + "scope": 63112, + "src": "4986:15:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63063, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "4986:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63066, + "mutability": "mutable", + "name": "secret", + "nameLocation": "5015:6:86", + "nodeType": "VariableDeclaration", + "scope": 63112, + "src": "5007:14:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 63065, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5007:7:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63068, + "mutability": "mutable", + "name": "resolver", + "nameLocation": "5035:8:86", + "nodeType": "VariableDeclaration", + "scope": 63112, + "src": "5027:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63067, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5027:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63071, + "mutability": "mutable", + "name": "data", + "nameLocation": "5066:4:86", + "nodeType": "VariableDeclaration", + "scope": 63112, + "src": "5049:21:86", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 63069, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5049:5:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 63070, + "nodeType": "ArrayTypeName", + "src": "5049:7:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63073, + "mutability": "mutable", + "name": "reverseRecord", + "nameLocation": "5081:13:86", + "nodeType": "VariableDeclaration", + "scope": 63112, + "src": "5076:18:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63072, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5076:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4937:161:86" + }, + "returnParameters": { + "id": 63080, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63079, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63112, + "src": "5140:7:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 63078, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5140:7:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5139:9:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 63128, + "nodeType": "FunctionDefinition", + "src": "5413:134:86", + "nodes": [], + "body": { + "id": 63127, + "nodeType": "Block", + "src": "5485:62:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "id": 63122, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66042, + "src": "5516:12:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$66042_$", + "typeString": "type(library LibRNSDomain)" + } + }, + "id": 63123, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5529:6:86", + "memberName": "RON_ID", + "nodeType": "MemberAccess", + "referencedDeclaration": 66005, + "src": "5516:19:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63124, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63115, + "src": "5537:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 63120, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66042, + "src": "5498:12:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$66042_$", + "typeString": "type(library LibRNSDomain)" + } + }, + "id": 63121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5511:4:86", + "memberName": "toId", + "nodeType": "MemberAccess", + "referencedDeclaration": 66021, + "src": "5498:17:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (uint256,string memory) pure returns (uint256)" + } + }, + "id": 63125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5498:44:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 63119, + "id": 63126, + "nodeType": "Return", + "src": "5491:51:86" + } + ] + }, + "baseFunctions": [ + 65249 + ], + "documentation": { + "id": 63113, + "nodeType": "StructuredDocumentation", + "src": "5360:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "fb021939", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "computeId", + "nameLocation": "5422:9:86", + "parameters": { + "id": 63116, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63115, + "mutability": "mutable", + "name": "name", + "nameLocation": "5446:4:86", + "nodeType": "VariableDeclaration", + "scope": 63128, + "src": "5432:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63114, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "5432:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "5431:20:86" + }, + "returnParameters": { + "id": 63119, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63118, + "mutability": "mutable", + "name": "id", + "nameLocation": "5481:2:86", + "nodeType": "VariableDeclaration", + "scope": 63128, + "src": "5473:10:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63117, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5473:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5472:12:86" + }, + "scope": 63920, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 63157, + "nodeType": "FunctionDefinition", + "src": "5604:231:86", + "nodes": [], + "body": { + "id": 63156, + "nodeType": "Block", + "src": "5663:172:86", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 63136, + "name": "_committedAt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62849, + "src": "5673:12:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 63138, + "indexExpression": { + "id": 63137, + "name": "commitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63131, + "src": "5686:10:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5673:24:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 63139, + "name": "_maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62822, + "src": "5700:17:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5673:44:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">=", + "rightExpression": { + "expression": { + "id": 63141, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5721:5:86", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 63142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5727:9:86", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "5721:15:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5673:63:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63148, + "nodeType": "IfStatement", + "src": "5669:113:86", + "trueBody": { + "errorCall": { + "arguments": [ + { + "id": 63145, + "name": "commitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63131, + "src": "5771:10:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 63144, + "name": "UnexpiredCommitmentExists", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65133, + "src": "5745:25:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$__$", + "typeString": "function (bytes32) pure" + } + }, + "id": 63146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5745:37:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63147, + "nodeType": "RevertStatement", + "src": "5738:44:86" + } + }, + { + "expression": { + "id": 63154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 63149, + "name": "_committedAt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62849, + "src": "5788:12:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 63151, + "indexExpression": { + "id": 63150, + "name": "commitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63131, + "src": "5801:10:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "5788:24:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "id": 63152, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "5815:5:86", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 63153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5821:9:86", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "5815:15:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5788:42:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63155, + "nodeType": "ExpressionStatement", + "src": "5788:42:86" + } + ] + }, + "baseFunctions": [ + 65292 + ], + "documentation": { + "id": 63129, + "nodeType": "StructuredDocumentation", + "src": "5551:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "f14fcbc8", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 63134, + "kind": "modifierInvocation", + "modifierName": { + "id": 63133, + "name": "whenNotPaused", + "nameLocations": [ + "5649:13:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49899, + "src": "5649:13:86" + }, + "nodeType": "ModifierInvocation", + "src": "5649:13:86" + } + ], + "name": "commit", + "nameLocation": "5613:6:86", + "parameters": { + "id": 63132, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63131, + "mutability": "mutable", + "name": "commitment", + "nameLocation": "5628:10:86", + "nodeType": "VariableDeclaration", + "scope": 63157, + "src": "5620:18:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 63130, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "5620:7:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "5619:20:86" + }, + "returnParameters": { + "id": 63135, + "nodeType": "ParameterList", + "parameters": [], + "src": "5663:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 63171, + "nodeType": "FunctionDefinition", + "src": "5892:140:86", + "nodes": [], + "body": { + "id": 63170, + "nodeType": "Block", + "src": "5984:48:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 63167, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63160, + "src": "6018:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63166, + "name": "_setMinRegistrationDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63706, + "src": "5990:27:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", + "typeString": "function (uint256)" + } + }, + "id": 63168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5990:37:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63169, + "nodeType": "ExpressionStatement", + "src": "5990:37:86" + } + ] + }, + "baseFunctions": [ + 65342 + ], + "documentation": { + "id": 63158, + "nodeType": "StructuredDocumentation", + "src": "5839:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "c078f16a", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 63163, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "5964:18:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 63164, + "kind": "modifierInvocation", + "modifierName": { + "id": 63162, + "name": "onlyRole", + "nameLocations": [ + "5955:8:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "5955:8:86" + }, + "nodeType": "ModifierInvocation", + "src": "5955:28:86" + } + ], + "name": "setMinRegistrationDuration", + "nameLocation": "5901:26:86", + "parameters": { + "id": 63161, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63160, + "mutability": "mutable", + "name": "duration", + "nameLocation": "5936:8:86", + "nodeType": "VariableDeclaration", + "scope": 63171, + "src": "5928:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63159, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5928:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5927:18:86" + }, + "returnParameters": { + "id": 63165, + "nodeType": "ParameterList", + "parameters": [], + "src": "5984:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 63249, + "nodeType": "FunctionDefinition", + "src": "6089:783:86", + "nodes": [], + "body": { + "id": 63248, + "nodeType": "Block", + "src": "6312:560:86", + "nodes": [], + "statements": [ + { + "assignments": [ + 63195 + ], + "declarations": [ + { + "constant": false, + "id": 63195, + "mutability": "mutable", + "name": "id", + "nameLocation": "6326:2:86", + "nodeType": "VariableDeclaration", + "scope": 63248, + "src": "6318:10:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63194, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6318:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63199, + "initialValue": { + "arguments": [ + { + "id": 63197, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63174, + "src": "6341:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63196, + "name": "computeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63128, + "src": "6331:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (string memory) pure returns (uint256)" + } + }, + "id": 63198, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6331:15:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6318:28:86" + }, + { + "condition": { + "expression": { + "expression": { + "arguments": [ + { + "id": 63202, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63195, + "src": "6378:2:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63200, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62832, + "src": "6356:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "id": 63201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6368:9:86", + "memberName": "getRecord", + "nodeType": "MemberAccess", + "referencedDeclaration": 64904, + "src": "6356:21:86", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_Record_$64788_memory_ptr_$", + "typeString": "function (uint256) view external returns (struct INSUnified.Record memory)" + } + }, + "id": 63203, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6356:25:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$64788_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 63204, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6382:3:86", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 64787, + "src": "6356:29:86", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$64781_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 63205, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6386:9:86", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 64780, + "src": "6356:39:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63210, + "nodeType": "IfStatement", + "src": "6352:86:86", + "trueBody": { + "errorCall": { + "arguments": [ + { + "id": 63207, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63174, + "src": "6433:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63206, + "name": "ErrRequestedForProtectedName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65152, + "src": "6404:28:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 63208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6404:34:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63209, + "nodeType": "RevertStatement", + "src": "6397:41:86" + } + }, + { + "assignments": [ + 63212 + ], + "declarations": [ + { + "constant": false, + "id": 63212, + "mutability": "mutable", + "name": "commitHash", + "nameLocation": "6453:10:86", + "nodeType": "VariableDeclaration", + "scope": 63248, + "src": "6445:18:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 63211, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6445:7:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 63222, + "initialValue": { + "arguments": [ + { + "id": 63214, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63174, + "src": "6498:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63215, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63176, + "src": "6517:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63216, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63178, + "src": "6540:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 63217, + "name": "secret", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63180, + "src": "6564:6:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 63218, + "name": "resolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63182, + "src": "6588:8:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63219, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63185, + "src": "6610:4:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + { + "id": 63220, + "name": "reverseRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63187, + "src": "6637:13:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 63213, + "name": "computeCommitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63112, + "src": "6466:17:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_address_$_t_uint64_$_t_bytes32_$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bool_$returns$_t_bytes32_$", + "typeString": "function (string memory,address,uint64,bytes32,address,bytes calldata[] calldata,bool) view returns (bytes32)" + } + }, + "id": 63221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [ + "6492:4:86", + "6510:5:86", + "6530:8:86", + "6556:6:86", + "6578:8:86", + "6604:4:86", + "6622:13:86" + ], + "names": [ + "name", + "owner", + "duration", + "secret", + "resolver", + "data", + "reverseRecord" + ], + "nodeType": "FunctionCall", + "src": "6466:191:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6445:212:86" + }, + { + "expression": { + "arguments": [ + { + "id": 63224, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63178, + "src": "6683:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 63225, + "name": "commitHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63212, + "src": "6693:10:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 63223, + "name": "_validateCommitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63689, + "src": "6663:19:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$_t_bytes32_$returns$__$", + "typeString": "function (uint64,bytes32)" + } + }, + "id": 63226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6663:41:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63227, + "nodeType": "ExpressionStatement", + "src": "6663:41:86" + }, + { + "assignments": [ + 63229, + 63231 + ], + "declarations": [ + { + "constant": false, + "id": 63229, + "mutability": "mutable", + "name": "usdPrice", + "nameLocation": "6720:8:86", + "nodeType": "VariableDeclaration", + "scope": 63248, + "src": "6712:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63228, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6712:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63231, + "mutability": "mutable", + "name": "ronPrice", + "nameLocation": "6738:8:86", + "nodeType": "VariableDeclaration", + "scope": 63248, + "src": "6730:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63230, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6730:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63236, + "initialValue": { + "arguments": [ + { + "id": 63233, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63174, + "src": "6763:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63234, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63178, + "src": "6769:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 63232, + "name": "_handlePrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63822, + "src": "6750:12:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_uint64_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (string memory,uint64) returns (uint256,uint256)" + } + }, + "id": 63235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6750:28:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6711:67:86" + }, + { + "expression": { + "arguments": [ + { + "id": 63238, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63174, + "src": "6794:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63239, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63176, + "src": "6800:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63240, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63178, + "src": "6807:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 63241, + "name": "resolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63182, + "src": "6817:8:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63242, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63185, + "src": "6827:4:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + { + "id": 63243, + "name": "reverseRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63187, + "src": "6833:13:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 63244, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63229, + "src": "6848:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63245, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63231, + "src": "6858:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63237, + "name": "_register", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63885, + "src": "6784:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$_t_uint64_$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (string memory,address,uint64,address,bytes calldata[] calldata,bool,uint256,uint256)" + } + }, + "id": 63246, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6784:83:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63247, + "nodeType": "ExpressionStatement", + "src": "6784:83:86" + } + ] + }, + "baseFunctions": [ + 65311 + ], + "documentation": { + "id": 63172, + "nodeType": "StructuredDocumentation", + "src": "6036:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "cb80fe2f", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 63190, + "kind": "modifierInvocation", + "modifierName": { + "id": 63189, + "name": "whenNotPaused", + "nameLocations": [ + "6285:13:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49899, + "src": "6285:13:86" + }, + "nodeType": "ModifierInvocation", + "src": "6285:13:86" + }, + { + "id": 63192, + "kind": "modifierInvocation", + "modifierName": { + "id": 63191, + "name": "nonReentrant", + "nameLocations": [ + "6299:12:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50002, + "src": "6299:12:86" + }, + "nodeType": "ModifierInvocation", + "src": "6299:12:86" + } + ], + "name": "register", + "nameLocation": "6098:8:86", + "parameters": { + "id": 63188, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63174, + "mutability": "mutable", + "name": "name", + "nameLocation": "6126:4:86", + "nodeType": "VariableDeclaration", + "scope": 63249, + "src": "6112:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63173, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6112:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63176, + "mutability": "mutable", + "name": "owner", + "nameLocation": "6144:5:86", + "nodeType": "VariableDeclaration", + "scope": 63249, + "src": "6136:13:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63175, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6136:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63178, + "mutability": "mutable", + "name": "duration", + "nameLocation": "6162:8:86", + "nodeType": "VariableDeclaration", + "scope": 63249, + "src": "6155:15:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63177, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6155:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63180, + "mutability": "mutable", + "name": "secret", + "nameLocation": "6184:6:86", + "nodeType": "VariableDeclaration", + "scope": 63249, + "src": "6176:14:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 63179, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "6176:7:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63182, + "mutability": "mutable", + "name": "resolver", + "nameLocation": "6204:8:86", + "nodeType": "VariableDeclaration", + "scope": 63249, + "src": "6196:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63181, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6196:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63185, + "mutability": "mutable", + "name": "data", + "nameLocation": "6235:4:86", + "nodeType": "VariableDeclaration", + "scope": 63249, + "src": "6218:21:86", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 63183, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "6218:5:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 63184, + "nodeType": "ArrayTypeName", + "src": "6218:7:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63187, + "mutability": "mutable", + "name": "reverseRecord", + "nameLocation": "6250:13:86", + "nodeType": "VariableDeclaration", + "scope": 63249, + "src": "6245:18:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63186, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6245:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "6106:161:86" + }, + "returnParameters": { + "id": 63193, + "nodeType": "ParameterList", + "parameters": [], + "src": "6312:0:86" + }, + "scope": 63920, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "id": 63323, + "nodeType": "FunctionDefinition", + "src": "6929:537:86", + "nodes": [], + "body": { + "id": 63322, + "nodeType": "Block", + "src": "7027:439:86", + "nodes": [], + "statements": [ + { + "assignments": [ + null, + 63262 + ], + "declarations": [ + null, + { + "constant": false, + "id": 63262, + "mutability": "mutable", + "name": "ronPrice", + "nameLocation": "7044:8:86", + "nodeType": "VariableDeclaration", + "scope": 63322, + "src": "7036:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63261, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7036:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63267, + "initialValue": { + "arguments": [ + { + "id": 63264, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63252, + "src": "7066:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + }, + { + "id": 63265, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63254, + "src": "7072:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 63263, + "name": "rentPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63016, + "src": "7056:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint64_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (string memory,uint64) view returns (uint256,uint256)" + } + }, + "id": 63266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7056:25:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7033:48:86" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63268, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "7091:3:86", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 63269, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7095:5:86", + "memberName": "value", + "nodeType": "MemberAccess", + "src": "7091:9:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 63270, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63262, + "src": "7103:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7091:20:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63275, + "nodeType": "IfStatement", + "src": "7087:52:86", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63272, + "name": "InsufficientValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65136, + "src": "7120:17:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63273, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7120:19:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63274, + "nodeType": "RevertStatement", + "src": "7113:26:86" + } + }, + { + "assignments": [ + 63277 + ], + "declarations": [ + { + "constant": false, + "id": 63277, + "mutability": "mutable", + "name": "remainAmount", + "nameLocation": "7153:12:86", + "nodeType": "VariableDeclaration", + "scope": 63322, + "src": "7145:20:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63276, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7145:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63282, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63281, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63278, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "7168:3:86", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 63279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7172:5:86", + "memberName": "value", + "nodeType": "MemberAccess", + "src": "7168:9:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 63280, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63262, + "src": "7180:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7168:20:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7145:43:86" + }, + { + "assignments": [ + 63284 + ], + "declarations": [ + { + "constant": false, + "id": 63284, + "mutability": "mutable", + "name": "id", + "nameLocation": "7203:2:86", + "nodeType": "VariableDeclaration", + "scope": 63322, + "src": "7195:10:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63283, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7195:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63288, + "initialValue": { + "arguments": [ + { + "id": 63286, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63252, + "src": "7218:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + ], + "id": 63285, + "name": "computeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63128, + "src": "7208:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (string memory) pure returns (uint256)" + } + }, + "id": 63287, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7208:15:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7195:28:86" + }, + { + "assignments": [ + 63290 + ], + "declarations": [ + { + "constant": false, + "id": 63290, + "mutability": "mutable", + "name": "expiryTime", + "nameLocation": "7236:10:86", + "nodeType": "VariableDeclaration", + "scope": 63322, + "src": "7229:17:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63289, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "7229:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "id": 63296, + "initialValue": { + "arguments": [ + { + "id": 63293, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63284, + "src": "7267:2:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63294, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63254, + "src": "7271:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 63291, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62832, + "src": "7249:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "id": 63292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7261:5:86", + "memberName": "renew", + "nodeType": "MemberAccess", + "referencedDeclaration": 64957, + "src": "7249:17:86", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint64_$returns$_t_uint64_$", + "typeString": "function (uint256,uint64) external returns (uint64)" + } + }, + "id": 63295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7249:31:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7229:51:86" + }, + { + "eventCall": { + "arguments": [ + { + "id": 63298, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63252, + "src": "7303:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + } + }, + { + "id": 63299, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63284, + "src": "7309:2:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63300, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63262, + "src": "7313:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63301, + "name": "expiryTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63290, + "src": "7323:10:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string calldata" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 63297, + "name": "NameRenewed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65216, + "src": "7291:11:86", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint64_$returns$__$", + "typeString": "function (string memory,uint256,uint256,uint64)" + } + }, + "id": 63302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7291:43:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63303, + "nodeType": "EmitStatement", + "src": "7286:48:86" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63306, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63304, + "name": "remainAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63277, + "src": "7345:12:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 63305, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7361:1:86", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7345:17:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63318, + "nodeType": "IfStatement", + "src": "7341:90:86", + "trueBody": { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63312, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51922, + "src": "7403:10:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 63313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7403:12:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 63311, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7395:8:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 63310, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7395:8:86", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 63314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7395:21:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 63315, + "name": "remainAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63277, + "src": "7418:12:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63307, + "name": "RONTransferHelper", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67444, + "src": "7364:17:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_RONTransferHelper_$67444_$", + "typeString": "type(library RONTransferHelper)" + } + }, + "id": 63309, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7382:12:86", + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 67419, + "src": "7364:30:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$", + "typeString": "function (address payable,uint256)" + } + }, + "id": 63316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7364:67:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63317, + "nodeType": "ExpressionStatement", + "src": "7364:67:86" + } + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63319, + "name": "_transferRONToTreasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63766, + "src": "7437:22:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 63320, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7437:24:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63321, + "nodeType": "ExpressionStatement", + "src": "7437:24:86" + } + ] + }, + "baseFunctions": [ + 65319 + ], + "documentation": { + "id": 63250, + "nodeType": "StructuredDocumentation", + "src": "6876:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "5a705169", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 63257, + "kind": "modifierInvocation", + "modifierName": { + "id": 63256, + "name": "whenNotPaused", + "nameLocations": [ + "7000:13:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49899, + "src": "7000:13:86" + }, + "nodeType": "ModifierInvocation", + "src": "7000:13:86" + }, + { + "id": 63259, + "kind": "modifierInvocation", + "modifierName": { + "id": 63258, + "name": "nonReentrant", + "nameLocations": [ + "7014:12:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50002, + "src": "7014:12:86" + }, + "nodeType": "ModifierInvocation", + "src": "7014:12:86" + } + ], + "name": "renew", + "nameLocation": "6938:5:86", + "parameters": { + "id": 63255, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63252, + "mutability": "mutable", + "name": "name", + "nameLocation": "6960:4:86", + "nodeType": "VariableDeclaration", + "scope": 63323, + "src": "6944:20:86", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_string_calldata_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63251, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "6944:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63254, + "mutability": "mutable", + "name": "duration", + "nameLocation": "6973:8:86", + "nodeType": "VariableDeclaration", + "scope": 63323, + "src": "6966:15:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63253, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "6966:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "6943:39:86" + }, + "returnParameters": { + "id": 63260, + "nodeType": "ParameterList", + "parameters": [], + "src": "7027:0:86" + }, + "scope": 63920, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "id": 63413, + "nodeType": "FunctionDefinition", + "src": "7523:732:86", + "nodes": [], + "body": { + "id": 63412, + "nodeType": "Block", + "src": "7759:496:86", + "nodes": [], + "statements": [ + { + "condition": { + "id": 63350, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7769:16:86", + "subExpression": { + "arguments": [ + { + "id": 63348, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63326, + "src": "7780:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63347, + "name": "available", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63057, + "src": "7770:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$", + "typeString": "function (string memory) view returns (bool)" + } + }, + "id": 63349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7770:15:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63355, + "nodeType": "IfStatement", + "src": "7765:51:86", + "trueBody": { + "errorCall": { + "arguments": [ + { + "id": 63352, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63326, + "src": "7811:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63351, + "name": "NameNotAvailable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65120, + "src": "7794:16:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 63353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7794:22:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63354, + "nodeType": "RevertStatement", + "src": "7787:29:86" + } + }, + { + "assignments": [ + 63357 + ], + "declarations": [ + { + "constant": false, + "id": 63357, + "mutability": "mutable", + "name": "id", + "nameLocation": "7830:2:86", + "nodeType": "VariableDeclaration", + "scope": 63412, + "src": "7822:10:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63356, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7822:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63361, + "initialValue": { + "arguments": [ + { + "id": 63359, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63326, + "src": "7845:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63358, + "name": "computeId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63128, + "src": "7835:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (string memory) pure returns (uint256)" + } + }, + "id": 63360, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7835:15:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7822:28:86" + }, + { + "assignments": [ + 63363 + ], + "declarations": [ + { + "constant": false, + "id": 63363, + "mutability": "mutable", + "name": "protected", + "nameLocation": "7861:9:86", + "nodeType": "VariableDeclaration", + "scope": 63412, + "src": "7856:14:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63362, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7856:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 63370, + "initialValue": { + "expression": { + "expression": { + "arguments": [ + { + "id": 63366, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63357, + "src": "7895:2:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63364, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62832, + "src": "7873:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "id": 63365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7885:9:86", + "memberName": "getRecord", + "nodeType": "MemberAccess", + "referencedDeclaration": 64904, + "src": "7873:21:86", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_struct$_Record_$64788_memory_ptr_$", + "typeString": "function (uint256) view external returns (struct INSUnified.Record memory)" + } + }, + "id": 63367, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7873:25:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_Record_$64788_memory_ptr", + "typeString": "struct INSUnified.Record memory" + } + }, + "id": 63368, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7899:3:86", + "memberName": "mut", + "nodeType": "MemberAccess", + "referencedDeclaration": 64787, + "src": "7873:29:86", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MutableRecord_$64781_memory_ptr", + "typeString": "struct INSUnified.MutableRecord memory" + } + }, + "id": 63369, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7903:9:86", + "memberName": "protected", + "nodeType": "MemberAccess", + "referencedDeclaration": 64780, + "src": "7873:39:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7856:56:86" + }, + { + "assignments": [ + 63372 + ], + "declarations": [ + { + "constant": false, + "id": 63372, + "mutability": "mutable", + "name": "whitelisted", + "nameLocation": "7923:11:86", + "nodeType": "VariableDeclaration", + "scope": 63412, + "src": "7918:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63371, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7918:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 63378, + "initialValue": { + "baseExpression": { + "baseExpression": { + "id": 63373, + "name": "_protectedNamesWhitelisted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62856, + "src": "7937:26:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(uint256 => mapping(address => bool))" + } + }, + "id": 63375, + "indexExpression": { + "id": 63374, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63357, + "src": "7964:2:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7937:30:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 63377, + "indexExpression": { + "id": 63376, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63328, + "src": "7968:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7937:37:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7918:56:86" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7984:10:86", + "subExpression": { + "id": 63379, + "name": "protected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63363, + "src": "7985:9:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "id": 63382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7998:12:86", + "subExpression": { + "id": 63381, + "name": "whitelisted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63372, + "src": "7999:11:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "7984:26:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63391, + "nodeType": "IfStatement", + "src": "7980:107:86", + "trueBody": { + "errorCall": { + "arguments": [ + { + "id": 63385, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63326, + "src": "8051:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63386, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63328, + "src": "8057:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63387, + "name": "protected", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63363, + "src": "8064:9:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 63388, + "name": "whitelisted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63372, + "src": "8075:11:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 63384, + "name": "ErrInvalidRegisterProtectedName", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65163, + "src": "8019:31:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_string_memory_ptr_$_t_address_$_t_bool_$_t_bool_$returns$__$", + "typeString": "function (string memory,address,bool,bool) pure" + } + }, + "id": 63389, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8019:68:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63390, + "nodeType": "RevertStatement", + "src": "8012:75:86" + } + }, + { + "assignments": [ + 63393, + 63395 + ], + "declarations": [ + { + "constant": false, + "id": 63393, + "mutability": "mutable", + "name": "usdPrice", + "nameLocation": "8103:8:86", + "nodeType": "VariableDeclaration", + "scope": 63412, + "src": "8095:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63392, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8095:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63395, + "mutability": "mutable", + "name": "ronPrice", + "nameLocation": "8121:8:86", + "nodeType": "VariableDeclaration", + "scope": 63412, + "src": "8113:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8113:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63400, + "initialValue": { + "arguments": [ + { + "id": 63397, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63326, + "src": "8146:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63398, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63330, + "src": "8152:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 63396, + "name": "_handlePrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63822, + "src": "8133:12:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_uint64_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (string memory,uint64) returns (uint256,uint256)" + } + }, + "id": 63399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8133:28:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8094:67:86" + }, + { + "expression": { + "arguments": [ + { + "id": 63402, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63326, + "src": "8177:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63403, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63328, + "src": "8183:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63404, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63330, + "src": "8190:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + { + "id": 63405, + "name": "resolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63332, + "src": "8200:8:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63406, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63335, + "src": "8210:4:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + { + "id": 63407, + "name": "reverseRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63337, + "src": "8216:13:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 63408, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63393, + "src": "8231:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63409, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63395, + "src": "8241:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63401, + "name": "_register", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63885, + "src": "8167:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$_t_uint64_$_t_address_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_bool_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (string memory,address,uint64,address,bytes calldata[] calldata,bool,uint256,uint256)" + } + }, + "id": 63410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8167:83:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63411, + "nodeType": "ExpressionStatement", + "src": "8167:83:86" + } + ] + }, + "baseFunctions": [ + 65336 + ], + "documentation": { + "id": 63324, + "nodeType": "StructuredDocumentation", + "src": "7470:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "8ca3d183", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 63340, + "kind": "modifierInvocation", + "modifierName": { + "id": 63339, + "name": "whenNotPaused", + "nameLocations": [ + "7712:13:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49899, + "src": "7712:13:86" + }, + "nodeType": "ModifierInvocation", + "src": "7712:13:86" + }, + { + "id": 63342, + "kind": "modifierInvocation", + "modifierName": { + "id": 63341, + "name": "nonReentrant", + "nameLocations": [ + "7726:12:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50002, + "src": "7726:12:86" + }, + "nodeType": "ModifierInvocation", + "src": "7726:12:86" + }, + { + "arguments": [ + { + "id": 63344, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63326, + "src": "7753:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "id": 63345, + "kind": "modifierInvocation", + "modifierName": { + "id": 63343, + "name": "onlyAvailable", + "nameLocations": [ + "7739:13:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 62866, + "src": "7739:13:86" + }, + "nodeType": "ModifierInvocation", + "src": "7739:19:86" + } + ], + "name": "registerProtectedName", + "nameLocation": "7532:21:86", + "parameters": { + "id": 63338, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63326, + "mutability": "mutable", + "name": "name", + "nameLocation": "7573:4:86", + "nodeType": "VariableDeclaration", + "scope": 63413, + "src": "7559:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63325, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "7559:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63328, + "mutability": "mutable", + "name": "owner", + "nameLocation": "7591:5:86", + "nodeType": "VariableDeclaration", + "scope": 63413, + "src": "7583:13:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63327, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7583:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63330, + "mutability": "mutable", + "name": "duration", + "nameLocation": "7609:8:86", + "nodeType": "VariableDeclaration", + "scope": 63413, + "src": "7602:15:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63329, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "7602:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63332, + "mutability": "mutable", + "name": "resolver", + "nameLocation": "7631:8:86", + "nodeType": "VariableDeclaration", + "scope": 63413, + "src": "7623:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63331, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7623:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63335, + "mutability": "mutable", + "name": "data", + "nameLocation": "7662:4:86", + "nodeType": "VariableDeclaration", + "scope": 63413, + "src": "7645:21:86", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 63333, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "7645:5:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 63334, + "nodeType": "ArrayTypeName", + "src": "7645:7:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63337, + "mutability": "mutable", + "name": "reverseRecord", + "nameLocation": "7677:13:86", + "nodeType": "VariableDeclaration", + "scope": 63413, + "src": "7672:18:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63336, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7672:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7553:141:86" + }, + "returnParameters": { + "id": 63346, + "nodeType": "ParameterList", + "parameters": [], + "src": "7759:0:86" + }, + "scope": 63920, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "id": 63478, + "nodeType": "FunctionDefinition", + "src": "8312:475:86", + "nodes": [], + "body": { + "id": 63477, + "nodeType": "Block", + "src": "8456:331:86", + "nodes": [], + "statements": [ + { + "assignments": [ + 63429 + ], + "declarations": [ + { + "constant": false, + "id": 63429, + "mutability": "mutable", + "name": "length", + "nameLocation": "8470:6:86", + "nodeType": "VariableDeclaration", + "scope": 63477, + "src": "8462:14:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63428, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8462:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63432, + "initialValue": { + "expression": { + "id": 63430, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63417, + "src": "8479:3:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 63431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8483:6:86", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "8479:10:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8462:27:86" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 63440, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63433, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63429, + "src": "8499:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 63434, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8509:1:86", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8499:11:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63436, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63429, + "src": "8514:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "expression": { + "id": 63437, + "name": "owners", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63420, + "src": "8524:6:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 63438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8531:6:86", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "8524:13:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8514:23:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8499:38:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63444, + "nodeType": "IfStatement", + "src": "8495:71:86", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63441, + "name": "InvalidArrayLength", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65166, + "src": "8546:18:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8546:20:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63443, + "nodeType": "RevertStatement", + "src": "8539:27:86" + } + }, + { + "body": { + "id": 63467, + "nodeType": "Block", + "src": "8602:109:86", + "statements": [ + { + "expression": { + "id": 63461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "baseExpression": { + "id": 63451, + "name": "_protectedNamesWhitelisted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62856, + "src": "8610:26:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(uint256 => mapping(address => bool))" + } + }, + "id": 63458, + "indexExpression": { + "baseExpression": { + "id": 63452, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63417, + "src": "8637:3:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + "id": 63454, + "indexExpression": { + "id": 63453, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63446, + "src": "8641:1:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8637:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8610:34:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 63459, + "indexExpression": { + "baseExpression": { + "id": 63455, + "name": "owners", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63420, + "src": "8645:6:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 63457, + "indexExpression": { + "id": 63456, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63446, + "src": "8652:1:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8645:9:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "8610:45:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63460, + "name": "status", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63422, + "src": "8658:6:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "8610:54:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63462, + "nodeType": "ExpressionStatement", + "src": "8610:54:86" + }, + { + "id": 63466, + "nodeType": "UncheckedBlock", + "src": "8673:32:86", + "statements": [ + { + "expression": { + "id": 63464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "8693:3:86", + "subExpression": { + "id": 63463, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63446, + "src": "8695:1:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63465, + "nodeType": "ExpressionStatement", + "src": "8693:3:86" + } + ] + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63448, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63446, + "src": "8589:1:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 63449, + "name": "length", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63429, + "src": "8593:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8589:10:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63468, + "initializationExpression": { + "assignments": [ + 63446 + ], + "declarations": [ + { + "constant": false, + "id": 63446, + "mutability": "mutable", + "name": "i", + "nameLocation": "8586:1:86", + "nodeType": "VariableDeclaration", + "scope": 63468, + "src": "8578:9:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63445, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8578:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63447, + "nodeType": "VariableDeclarationStatement", + "src": "8578:9:86" + }, + "nodeType": "ForStatement", + "src": "8573:138:86" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63470, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51922, + "src": "8748:10:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 63471, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8748:12:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63472, + "name": "ids", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63417, + "src": "8762:3:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + } + }, + { + "id": 63473, + "name": "owners", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63420, + "src": "8767:6:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + { + "id": 63474, + "name": "status", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63422, + "src": "8775:6:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[] calldata" + }, + { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 63469, + "name": "ProtectedNamesWhitelisted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65229, + "src": "8722:25:86", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_bool_$returns$__$", + "typeString": "function (address,uint256[] memory,address[] memory,bool)" + } + }, + "id": 63475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8722:60:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63476, + "nodeType": "EmitStatement", + "src": "8717:65:86" + } + ] + }, + "baseFunctions": [ + 65362 + ], + "documentation": { + "id": 63414, + "nodeType": "StructuredDocumentation", + "src": "8259:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "6df99353", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 63425, + "name": "OPERATOR_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62811, + "src": "8439:13:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 63426, + "kind": "modifierInvocation", + "modifierName": { + "id": 63424, + "name": "onlyRole", + "nameLocations": [ + "8430:8:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "8430:8:86" + }, + "nodeType": "ModifierInvocation", + "src": "8430:23:86" + } + ], + "name": "bulkWhitelistProtectedNames", + "nameLocation": "8321:27:86", + "parameters": { + "id": 63423, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63417, + "mutability": "mutable", + "name": "ids", + "nameLocation": "8368:3:86", + "nodeType": "VariableDeclaration", + "scope": 63478, + "src": "8349:22:86", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 63415, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8349:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63416, + "nodeType": "ArrayTypeName", + "src": "8349:9:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63420, + "mutability": "mutable", + "name": "owners", + "nameLocation": "8392:6:86", + "nodeType": "VariableDeclaration", + "scope": 63478, + "src": "8373:25:86", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 63418, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8373:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 63419, + "nodeType": "ArrayTypeName", + "src": "8373:9:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63422, + "mutability": "mutable", + "name": "status", + "nameLocation": "8405:6:86", + "nodeType": "VariableDeclaration", + "scope": 63478, + "src": "8400:11:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63421, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8400:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8348:64:86" + }, + "returnParameters": { + "id": 63427, + "nodeType": "ParameterList", + "parameters": [], + "src": "8456:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 63495, + "nodeType": "FunctionDefinition", + "src": "8844:159:86", + "nodes": [], + "body": { + "id": 63494, + "nodeType": "Block", + "src": "8948:55:86", + "nodes": [], + "statements": [ + { + "expression": { + "baseExpression": { + "baseExpression": { + "id": 63488, + "name": "_protectedNamesWhitelisted", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62856, + "src": "8961:26:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_bool_$_$", + "typeString": "mapping(uint256 => mapping(address => bool))" + } + }, + "id": 63490, + "indexExpression": { + "id": 63489, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63481, + "src": "8988:2:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8961:30:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", + "typeString": "mapping(address => bool)" + } + }, + "id": 63492, + "indexExpression": { + "id": 63491, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63483, + "src": "8992:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8961:37:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 63487, + "id": 63493, + "nodeType": "Return", + "src": "8954:44:86" + } + ] + }, + "baseFunctions": [ + 65372 + ], + "documentation": { + "id": 63479, + "nodeType": "StructuredDocumentation", + "src": "8791:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "3b6c2ea3", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getWhitelistProtectedNameStatus", + "nameLocation": "8853:31:86", + "parameters": { + "id": 63484, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63481, + "mutability": "mutable", + "name": "id", + "nameLocation": "8893:2:86", + "nodeType": "VariableDeclaration", + "scope": 63495, + "src": "8885:10:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63480, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8885:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63483, + "mutability": "mutable", + "name": "owner", + "nameLocation": "8905:5:86", + "nodeType": "VariableDeclaration", + "scope": 63495, + "src": "8897:13:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63482, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8897:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "8884:27:86" + }, + "returnParameters": { + "id": 63487, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63486, + "mutability": "mutable", + "name": "status", + "nameLocation": "8940:6:86", + "nodeType": "VariableDeclaration", + "scope": 63495, + "src": "8935:11:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63485, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8935:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8934:13:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 63509, + "nodeType": "FunctionDefinition", + "src": "9060:108:86", + "nodes": [], + "body": { + "id": 63508, + "nodeType": "Block", + "src": "9141:27:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63504, + "name": "_treasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62828, + "src": "9147:9:86", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63505, + "name": "addr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63498, + "src": "9159:4:86", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "9147:16:86", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 63507, + "nodeType": "ExpressionStatement", + "src": "9147:16:86" + } + ] + }, + "baseFunctions": [ + 65378 + ], + "documentation": { + "id": 63496, + "nodeType": "StructuredDocumentation", + "src": "9007:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "f0f44260", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 63501, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "9121:18:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 63502, + "kind": "modifierInvocation", + "modifierName": { + "id": 63500, + "name": "onlyRole", + "nameLocations": [ + "9112:8:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "9112:8:86" + }, + "nodeType": "ModifierInvocation", + "src": "9112:28:86" + } + ], + "name": "setTreasury", + "nameLocation": "9069:11:86", + "parameters": { + "id": 63499, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63498, + "mutability": "mutable", + "name": "addr", + "nameLocation": "9097:4:86", + "nodeType": "VariableDeclaration", + "scope": 63509, + "src": "9081:20:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 63497, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9081:15:86", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "src": "9080:22:86" + }, + "returnParameters": { + "id": 63503, + "nodeType": "ParameterList", + "parameters": [], + "src": "9141:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 63526, + "nodeType": "FunctionDefinition", + "src": "9225:180:86", + "nodes": [], + "body": { + "id": 63525, + "nodeType": "Block", + "src": "9341:64:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 63521, + "name": "minCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63512, + "src": "9365:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63522, + "name": "maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63514, + "src": "9383:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63520, + "name": "_setCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63565, + "src": "9347:17:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (uint256,uint256)" + } + }, + "id": 63523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9347:53:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63524, + "nodeType": "ExpressionStatement", + "src": "9347:53:86" + } + ] + }, + "baseFunctions": [ + 65350 + ], + "documentation": { + "id": 63510, + "nodeType": "StructuredDocumentation", + "src": "9172:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "e4214b46", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 63517, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "9321:18:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 63518, + "kind": "modifierInvocation", + "modifierName": { + "id": 63516, + "name": "onlyRole", + "nameLocations": [ + "9312:8:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "9312:8:86" + }, + "nodeType": "ModifierInvocation", + "src": "9312:28:86" + } + ], + "name": "setCommitmentAge", + "nameLocation": "9234:16:86", + "parameters": { + "id": 63515, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63512, + "mutability": "mutable", + "name": "minCommitmentAge", + "nameLocation": "9259:16:86", + "nodeType": "VariableDeclaration", + "scope": 63526, + "src": "9251:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63511, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9251:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63514, + "mutability": "mutable", + "name": "maxCommitmentAge", + "nameLocation": "9285:16:86", + "nodeType": "VariableDeclaration", + "scope": 63526, + "src": "9277:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63513, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9277:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9250:52:86" + }, + "returnParameters": { + "id": 63519, + "nodeType": "ParameterList", + "parameters": [], + "src": "9341:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 63565, + "nodeType": "FunctionDefinition", + "src": "9897:417:86", + "nodes": [], + "body": { + "id": 63564, + "nodeType": "Block", + "src": "9985:329:86", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63537, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63534, + "name": "maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63531, + "src": "9995:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "expression": { + "id": 63535, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "10014:5:86", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 63536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10020:9:86", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "10014:15:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9995:34:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63541, + "nodeType": "IfStatement", + "src": "9991:72:86", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63538, + "name": "MaxCommitmentAgeTooHigh", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65147, + "src": "10038:23:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63539, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10038:25:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63540, + "nodeType": "RevertStatement", + "src": "10031:32:86" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63544, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63542, + "name": "maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63531, + "src": "10073:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<=", + "rightExpression": { + "id": 63543, + "name": "minCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63529, + "src": "10093:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10073:36:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63548, + "nodeType": "IfStatement", + "src": "10069:73:86", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63545, + "name": "MaxCommitmentAgeTooLow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65144, + "src": "10118:22:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10118:24:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63547, + "nodeType": "RevertStatement", + "src": "10111:31:86" + } + }, + { + "expression": { + "id": 63551, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63549, + "name": "_minCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62819, + "src": "10149:17:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63550, + "name": "minCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63529, + "src": "10169:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10149:36:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63552, + "nodeType": "ExpressionStatement", + "src": "10149:36:86" + }, + { + "expression": { + "id": 63555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63553, + "name": "_maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62822, + "src": "10191:17:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63554, + "name": "maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63531, + "src": "10211:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10191:36:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63556, + "nodeType": "ExpressionStatement", + "src": "10191:36:86" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63558, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51922, + "src": "10260:10:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 63559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10260:12:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63560, + "name": "minCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63529, + "src": "10274:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63561, + "name": "maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63531, + "src": "10292:16:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63557, + "name": "CommitmentAgeUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65190, + "src": "10239:20:86", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256,uint256)" + } + }, + "id": 63562, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10239:70:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63563, + "nodeType": "EmitStatement", + "src": "10234:75:86" + } + ] + }, + "documentation": { + "id": 63527, + "nodeType": "StructuredDocumentation", + "src": "9409:485:86", + "text": " @dev Internal function to update the commitment age range.\n Requirements:\n - The `maxCommitmentAge` must be less than or equal to the current block timestamp.\n - The `maxCommitmentAge` must be greater than the `minCommitmentAge`.\n Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\n @param minCommitmentAge The minimum commitment age in seconds.\n @param maxCommitmentAge The maximum commitment age in seconds." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setCommitmentAge", + "nameLocation": "9906:17:86", + "parameters": { + "id": 63532, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63529, + "mutability": "mutable", + "name": "minCommitmentAge", + "nameLocation": "9932:16:86", + "nodeType": "VariableDeclaration", + "scope": 63565, + "src": "9924:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63528, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9924:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63531, + "mutability": "mutable", + "name": "maxCommitmentAge", + "nameLocation": "9958:16:86", + "nodeType": "VariableDeclaration", + "scope": 63565, + "src": "9950:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63530, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9950:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9923:52:86" + }, + "returnParameters": { + "id": 63533, + "nodeType": "ParameterList", + "parameters": [], + "src": "9985:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63580, + "nodeType": "FunctionDefinition", + "src": "10371:129:86", + "nodes": [], + "body": { + "id": 63579, + "nodeType": "Block", + "src": "10461:39:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 63576, + "name": "priceOracle", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63569, + "src": "10483:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + ], + "id": 63575, + "name": "_setPriceOracle", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63903, + "src": "10467:15:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_INSDomainPrice_$64599_$returns$__$", + "typeString": "function (contract INSDomainPrice)" + } + }, + "id": 63577, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10467:28:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63578, + "nodeType": "ExpressionStatement", + "src": "10467:28:86" + } + ] + }, + "baseFunctions": [ + 65385 + ], + "documentation": { + "id": 63566, + "nodeType": "StructuredDocumentation", + "src": "10318:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "530e784f", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "arguments": [ + { + "id": 63572, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 48178, + "src": "10441:18:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "id": 63573, + "kind": "modifierInvocation", + "modifierName": { + "id": 63571, + "name": "onlyRole", + "nameLocations": [ + "10432:8:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48189, + "src": "10432:8:86" + }, + "nodeType": "ModifierInvocation", + "src": "10432:28:86" + } + ], + "name": "setPriceOracle", + "nameLocation": "10380:14:86", + "parameters": { + "id": 63570, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63569, + "mutability": "mutable", + "name": "priceOracle", + "nameLocation": "10410:11:86", + "nodeType": "VariableDeclaration", + "scope": 63580, + "src": "10395:26:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + }, + "typeName": { + "id": 63568, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63567, + "name": "INSDomainPrice", + "nameLocations": [ + "10395:14:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64599, + "src": "10395:14:86" + }, + "referencedDeclaration": 64599, + "src": "10395:14:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "visibility": "internal" + } + ], + "src": "10394:28:86" + }, + "returnParameters": { + "id": 63574, + "nodeType": "ParameterList", + "parameters": [], + "src": "10461:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "id": 63589, + "nodeType": "FunctionDefinition", + "src": "10557:82:86", + "nodes": [], + "body": { + "id": 63588, + "nodeType": "Block", + "src": "10612:27:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63586, + "name": "_treasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62828, + "src": "10625:9:86", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "functionReturnParameters": 63585, + "id": 63587, + "nodeType": "Return", + "src": "10618:16:86" + } + ] + }, + "baseFunctions": [ + 65391 + ], + "documentation": { + "id": 63581, + "nodeType": "StructuredDocumentation", + "src": "10504:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "3b19e84a", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getTreasury", + "nameLocation": "10566:11:86", + "parameters": { + "id": 63582, + "nodeType": "ParameterList", + "parameters": [], + "src": "10577:2:86" + }, + "returnParameters": { + "id": 63585, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63584, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63589, + "src": "10603:7:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63583, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10603:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "10602:9:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 63602, + "nodeType": "FunctionDefinition", + "src": "10696:164:86", + "nodes": [], + "body": { + "id": 63601, + "nodeType": "Block", + "src": "10804:56:86", + "nodes": [], + "statements": [ + { + "expression": { + "components": [ + { + "id": 63597, + "name": "_minCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62819, + "src": "10818:17:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63598, + "name": "_maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62822, + "src": "10837:17:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 63599, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10817:38:86", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 63596, + "id": 63600, + "nodeType": "Return", + "src": "10810:45:86" + } + ] + }, + "baseFunctions": [ + 65431 + ], + "documentation": { + "id": 63590, + "nodeType": "StructuredDocumentation", + "src": "10643:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "1321889f", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getCommitmentAgeRange", + "nameLocation": "10705:21:86", + "parameters": { + "id": 63591, + "nodeType": "ParameterList", + "parameters": [], + "src": "10726:2:86" + }, + "returnParameters": { + "id": 63596, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63593, + "mutability": "mutable", + "name": "minCommitmentAge", + "nameLocation": "10760:16:86", + "nodeType": "VariableDeclaration", + "scope": 63602, + "src": "10752:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63592, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10752:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63595, + "mutability": "mutable", + "name": "maxCommitmentAge", + "nameLocation": "10786:16:86", + "nodeType": "VariableDeclaration", + "scope": 63602, + "src": "10778:24:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63594, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10778:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10751:52:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 63612, + "nodeType": "FunctionDefinition", + "src": "10917:89:86", + "nodes": [], + "body": { + "id": 63611, + "nodeType": "Block", + "src": "10977:29:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63609, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62832, + "src": "10990:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "functionReturnParameters": 63608, + "id": 63610, + "nodeType": "Return", + "src": "10983:18:86" + } + ] + }, + "baseFunctions": [ + 65438 + ], + "documentation": { + "id": 63603, + "nodeType": "StructuredDocumentation", + "src": "10864:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "8c843314", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getRNSUnified", + "nameLocation": "10926:13:86", + "parameters": { + "id": 63604, + "nodeType": "ParameterList", + "parameters": [], + "src": "10939:2:86" + }, + "returnParameters": { + "id": 63608, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63607, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63612, + "src": "10965:10:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + }, + "typeName": { + "id": 63606, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63605, + "name": "INSUnified", + "nameLocations": [ + "10965:10:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64975, + "src": "10965:10:86" + }, + "referencedDeclaration": 64975, + "src": "10965:10:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "visibility": "internal" + } + ], + "src": "10964:12:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 63622, + "nodeType": "FunctionDefinition", + "src": "11063:95:86", + "nodes": [], + "body": { + "id": 63621, + "nodeType": "Block", + "src": "11128:30:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63619, + "name": "_priceOracle", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62840, + "src": "11141:12:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "functionReturnParameters": 63618, + "id": 63620, + "nodeType": "Return", + "src": "11134:19:86" + } + ] + }, + "baseFunctions": [ + 65445 + ], + "documentation": { + "id": 63613, + "nodeType": "StructuredDocumentation", + "src": "11010:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "fca513a8", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getPriceOracle", + "nameLocation": "11072:14:86", + "parameters": { + "id": 63614, + "nodeType": "ParameterList", + "parameters": [], + "src": "11086:2:86" + }, + "returnParameters": { + "id": 63618, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63617, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63622, + "src": "11112:14:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + }, + "typeName": { + "id": 63616, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63615, + "name": "INSDomainPrice", + "nameLocations": [ + "11112:14:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64599, + "src": "11112:14:86" + }, + "referencedDeclaration": 64599, + "src": "11112:14:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "visibility": "internal" + } + ], + "src": "11111:16:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 63632, + "nodeType": "FunctionDefinition", + "src": "11215:93:86", + "nodes": [], + "body": { + "id": 63631, + "nodeType": "Block", + "src": "11278:30:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63629, + "name": "_nameChecker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62836, + "src": "11291:12:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + } + }, + "functionReturnParameters": 63628, + "id": 63630, + "nodeType": "Return", + "src": "11284:19:86" + } + ] + }, + "baseFunctions": [ + 65452 + ], + "documentation": { + "id": 63623, + "nodeType": "StructuredDocumentation", + "src": "11162:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "224b04de", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getNameChecker", + "nameLocation": "11224:14:86", + "parameters": { + "id": 63624, + "nodeType": "ParameterList", + "parameters": [], + "src": "11238:2:86" + }, + "returnParameters": { + "id": 63628, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63627, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63632, + "src": "11264:12:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + }, + "typeName": { + "id": 63626, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63625, + "name": "INameChecker", + "nameLocations": [ + "11264:12:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65094, + "src": "11264:12:86" + }, + "referencedDeclaration": 65094, + "src": "11264:12:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INameChecker_$65094", + "typeString": "contract INameChecker" + } + }, + "visibility": "internal" + } + ], + "src": "11263:14:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 63642, + "nodeType": "FunctionDefinition", + "src": "11365:110:86", + "nodes": [], + "body": { + "id": 63641, + "nodeType": "Block", + "src": "11440:35:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63639, + "name": "_reverseRegistrar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62844, + "src": "11453:17:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + } + }, + "functionReturnParameters": 63638, + "id": 63640, + "nodeType": "Return", + "src": "11446:24:86" + } + ] + }, + "baseFunctions": [ + 65459 + ], + "documentation": { + "id": 63633, + "nodeType": "StructuredDocumentation", + "src": "11312:50:86", + "text": " @inheritdoc IRONRegistrarController" + }, + "functionSelector": "237a78fb", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getReverseRegistrar", + "nameLocation": "11374:19:86", + "parameters": { + "id": 63634, + "nodeType": "ParameterList", + "parameters": [], + "src": "11393:2:86" + }, + "returnParameters": { + "id": 63638, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63637, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 63642, + "src": "11419:19:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + }, + "typeName": { + "id": 63636, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63635, + "name": "INSReverseRegistrar", + "nameLocations": [ + "11419:19:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64718, + "src": "11419:19:86" + }, + "referencedDeclaration": 64718, + "src": "11419:19:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + } + }, + "visibility": "internal" + } + ], + "src": "11418:21:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "external" + }, + { + "id": 63689, + "nodeType": "FunctionDefinition", + "src": "11677:434:86", + "nodes": [], + "body": { + "id": 63688, + "nodeType": "Block", + "src": "11752:359:86", + "nodes": [], + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63650, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63645, + "src": "11762:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 63651, + "name": "_minRegistrationDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62825, + "src": "11773:24:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11762:35:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63657, + "nodeType": "IfStatement", + "src": "11758:74:86", + "trueBody": { + "errorCall": { + "arguments": [ + { + "id": 63654, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63645, + "src": "11823:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 63653, + "name": "DurationTooShort", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65125, + "src": "11806:16:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_uint64_$returns$__$", + "typeString": "function (uint64) pure" + } + }, + "id": 63655, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11806:26:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63656, + "nodeType": "RevertStatement", + "src": "11799:33:86" + } + }, + { + "assignments": [ + 63659 + ], + "declarations": [ + { + "constant": false, + "id": 63659, + "mutability": "mutable", + "name": "passedDuration", + "nameLocation": "11847:14:86", + "nodeType": "VariableDeclaration", + "scope": 63688, + "src": "11839:22:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63658, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11839:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63666, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63665, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63660, + "name": "block", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -4, + "src": "11864:5:86", + "typeDescriptions": { + "typeIdentifier": "t_magic_block", + "typeString": "block" + } + }, + "id": 63661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11870:9:86", + "memberName": "timestamp", + "nodeType": "MemberAccess", + "src": "11864:15:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "baseExpression": { + "id": 63662, + "name": "_committedAt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62849, + "src": "11882:12:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 63664, + "indexExpression": { + "id": 63663, + "name": "commitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63647, + "src": "11895:10:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "11882:24:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11864:42:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11839:67:86" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63669, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63667, + "name": "passedDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63659, + "src": "11916:14:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 63668, + "name": "_minCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62819, + "src": "11933:17:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11916:34:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63674, + "nodeType": "IfStatement", + "src": "11912:75:86", + "trueBody": { + "errorCall": { + "arguments": [ + { + "id": 63671, + "name": "commitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63647, + "src": "11976:10:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 63670, + "name": "CommitmentTooNew", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65110, + "src": "11959:16:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$__$", + "typeString": "function (bytes32) pure" + } + }, + "id": 63672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11959:28:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63673, + "nodeType": "RevertStatement", + "src": "11952:35:86" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63675, + "name": "_maxCommitmentAge", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62822, + "src": "11997:17:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 63676, + "name": "passedDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63659, + "src": "12017:14:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "11997:34:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63682, + "nodeType": "IfStatement", + "src": "11993:75:86", + "trueBody": { + "errorCall": { + "arguments": [ + { + "id": 63679, + "name": "commitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63647, + "src": "12057:10:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 63678, + "name": "CommitmentTooOld", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65115, + "src": "12040:16:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$__$", + "typeString": "function (bytes32) pure" + } + }, + "id": 63680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12040:28:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63681, + "nodeType": "RevertStatement", + "src": "12033:35:86" + } + }, + { + "expression": { + "id": 63686, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "delete", + "prefix": true, + "src": "12075:31:86", + "subExpression": { + "baseExpression": { + "id": 63683, + "name": "_committedAt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62849, + "src": "12082:12:86", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_bytes32_$_t_uint256_$", + "typeString": "mapping(bytes32 => uint256)" + } + }, + "id": 63685, + "indexExpression": { + "id": 63684, + "name": "commitment", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63647, + "src": "12095:10:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "12082:24:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63687, + "nodeType": "ExpressionStatement", + "src": "12075:31:86" + } + ] + }, + "documentation": { + "id": 63643, + "nodeType": "StructuredDocumentation", + "src": "11479:195:86", + "text": " @dev Validates commitment.\n Requirements:\n - The duration must larger than or equal to minimum registration duration.\n - The passed duration must in a valid range." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_validateCommitment", + "nameLocation": "11686:19:86", + "parameters": { + "id": 63648, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63645, + "mutability": "mutable", + "name": "duration", + "nameLocation": "11713:8:86", + "nodeType": "VariableDeclaration", + "scope": 63689, + "src": "11706:15:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63644, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "11706:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63647, + "mutability": "mutable", + "name": "commitment", + "nameLocation": "11731:10:86", + "nodeType": "VariableDeclaration", + "scope": 63689, + "src": "11723:18:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 63646, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "11723:7:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "11705:37:86" + }, + "returnParameters": { + "id": 63649, + "nodeType": "ParameterList", + "parameters": [], + "src": "11752:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63706, + "nodeType": "FunctionDefinition", + "src": "12288:175:86", + "nodes": [], + "body": { + "id": 63705, + "nodeType": "Block", + "src": "12352:111:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63695, + "name": "_minRegistrationDuration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62825, + "src": "12358:24:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63696, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63692, + "src": "12385:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12358:35:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63698, + "nodeType": "ExpressionStatement", + "src": "12358:35:86" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63700, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51922, + "src": "12435:10:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 63701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12435:12:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63702, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63692, + "src": "12449:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63699, + "name": "MinRegistrationDurationUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65173, + "src": "12404:30:86", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 63703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12404:54:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63704, + "nodeType": "EmitStatement", + "src": "12399:59:86" + } + ] + }, + "documentation": { + "id": 63690, + "nodeType": "StructuredDocumentation", + "src": "12115:170:86", + "text": " @dev Sets minimum registration duration.\n Emits a {MinRegistrationDurationUpdated} event indicating the successful update of the registration duration." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setMinRegistrationDuration", + "nameLocation": "12297:27:86", + "parameters": { + "id": 63693, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63692, + "mutability": "mutable", + "name": "duration", + "nameLocation": "12333:8:86", + "nodeType": "VariableDeclaration", + "scope": 63706, + "src": "12325:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63691, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12325:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12324:18:86" + }, + "returnParameters": { + "id": 63694, + "nodeType": "ParameterList", + "parameters": [], + "src": "12352:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63729, + "nodeType": "FunctionDefinition", + "src": "12531:175:86", + "nodes": [], + "body": { + "id": 63728, + "nodeType": "Block", + "src": "12621:85:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 63723, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63711, + "src": "12691:2:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 63722, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12683:7:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes32_$", + "typeString": "type(bytes32)" + }, + "typeName": { + "id": 63721, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "12683:7:86", + "typeDescriptions": {} + } + }, + "id": 63724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12683:11:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 63725, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63714, + "src": "12696:4:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + ], + "expression": { + "arguments": [ + { + "id": 63718, + "name": "resolverAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63709, + "src": "12643:15:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 63717, + "name": "IPublicResolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65816, + "src": "12627:15:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IPublicResolver_$65816_$", + "typeString": "type(contract IPublicResolver)" + } + }, + "id": 63719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12627:32:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IPublicResolver_$65816", + "typeString": "contract IPublicResolver" + } + }, + "id": 63720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12660:22:86", + "memberName": "multicallWithNodeCheck", + "nodeType": "MemberAccess", + "referencedDeclaration": 65815, + "src": "12627:55:86", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bytes32_$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$", + "typeString": "function (bytes32,bytes memory[] memory) external returns (bytes memory[] memory)" + } + }, + "id": 63726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12627:74:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr", + "typeString": "bytes memory[] memory" + } + }, + "id": 63727, + "nodeType": "ExpressionStatement", + "src": "12627:74:86" + } + ] + }, + "documentation": { + "id": 63707, + "nodeType": "StructuredDocumentation", + "src": "12467:61:86", + "text": " @dev Sets data into resolver address contract." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setRecords", + "nameLocation": "12540:11:86", + "parameters": { + "id": 63715, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63709, + "mutability": "mutable", + "name": "resolverAddress", + "nameLocation": "12560:15:86", + "nodeType": "VariableDeclaration", + "scope": 63729, + "src": "12552:23:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63708, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12552:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63711, + "mutability": "mutable", + "name": "id", + "nameLocation": "12585:2:86", + "nodeType": "VariableDeclaration", + "scope": 63729, + "src": "12577:10:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63710, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12577:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63714, + "mutability": "mutable", + "name": "data", + "nameLocation": "12606:4:86", + "nodeType": "VariableDeclaration", + "scope": 63729, + "src": "12589:21:86", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 63712, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "12589:5:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 63713, + "nodeType": "ArrayTypeName", + "src": "12589:7:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + } + ], + "src": "12551:60:86" + }, + "returnParameters": { + "id": 63716, + "nodeType": "ParameterList", + "parameters": [], + "src": "12621:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63750, + "nodeType": "FunctionDefinition", + "src": "12766:150:86", + "nodes": [], + "body": { + "id": 63749, + "nodeType": "Block", + "src": "12837:79:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 63740, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63734, + "src": "12876:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "id": 63744, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63732, + "src": "12897:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "hexValue": "2e726f6e", + "id": 63745, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12903:6:86", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7d70d06a1900ccfa2446eb28021a437994c1f9fa73829ed90342a37408690f75", + "typeString": "literal_string \".ron\"" + }, + "value": ".ron" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_stringliteral_7d70d06a1900ccfa2446eb28021a437994c1f9fa73829ed90342a37408690f75", + "typeString": "literal_string \".ron\"" + } + ], + "expression": { + "id": 63742, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12883:6:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 63741, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "12883:6:86", + "typeDescriptions": {} + } + }, + "id": 63743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12890:6:86", + "memberName": "concat", + "nodeType": "MemberAccess", + "src": "12883:13:86", + "typeDescriptions": { + "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$", + "typeString": "function () pure returns (string memory)" + } + }, + "id": 63746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12883:27:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "expression": { + "id": 63737, + "name": "_reverseRegistrar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62844, + "src": "12843:17:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSReverseRegistrar_$64718", + "typeString": "contract INSReverseRegistrar" + } + }, + "id": 63739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12861:14:86", + "memberName": "setNameForAddr", + "nodeType": "MemberAccess", + "referencedDeclaration": 64701, + "src": "12843:32:86", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_string_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (address,string memory) external returns (uint256)" + } + }, + "id": 63747, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12843:68:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 63748, + "nodeType": "ExpressionStatement", + "src": "12843:68:86" + } + ] + }, + "documentation": { + "id": 63730, + "nodeType": "StructuredDocumentation", + "src": "12710:53:86", + "text": " @dev Sets data into reverse registrar." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setReverseRecord", + "nameLocation": "12775:17:86", + "parameters": { + "id": 63735, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63732, + "mutability": "mutable", + "name": "name", + "nameLocation": "12807:4:86", + "nodeType": "VariableDeclaration", + "scope": 63750, + "src": "12793:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63731, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "12793:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63734, + "mutability": "mutable", + "name": "owner", + "nameLocation": "12821:5:86", + "nodeType": "VariableDeclaration", + "scope": 63750, + "src": "12813:13:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63733, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12813:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "12792:35:86" + }, + "returnParameters": { + "id": 63736, + "nodeType": "ParameterList", + "parameters": [], + "src": "12837:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63766, + "nodeType": "FunctionDefinition", + "src": "12991:118:86", + "nodes": [], + "body": { + "id": 63765, + "nodeType": "Block", + "src": "13034:75:86", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 63757, + "name": "_treasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62828, + "src": "13071:9:86", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "arguments": [ + { + "id": 63760, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "13090:4:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RONRegistrarController_$63920", + "typeString": "contract RONRegistrarController" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RONRegistrarController_$63920", + "typeString": "contract RONRegistrarController" + } + ], + "id": 63759, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13082:7:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 63758, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13082:7:86", + "typeDescriptions": {} + } + }, + "id": 63761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13082:13:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 63762, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13096:7:86", + "memberName": "balance", + "nodeType": "MemberAccess", + "src": "13082:21:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63754, + "name": "RONTransferHelper", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67444, + "src": "13040:17:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_RONTransferHelper_$67444_$", + "typeString": "type(library RONTransferHelper)" + } + }, + "id": 63756, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13058:12:86", + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 67419, + "src": "13040:30:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$", + "typeString": "function (address payable,uint256)" + } + }, + "id": 63763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13040:64:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63764, + "nodeType": "ExpressionStatement", + "src": "13040:64:86" + } + ] + }, + "documentation": { + "id": 63751, + "nodeType": "StructuredDocumentation", + "src": "12920:68:86", + "text": " @dev Helper method to take fee into treasury address." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_transferRONToTreasury", + "nameLocation": "13000:22:86", + "parameters": { + "id": 63752, + "nodeType": "ParameterList", + "parameters": [], + "src": "13022:2:86" + }, + "returnParameters": { + "id": 63753, + "nodeType": "ParameterList", + "parameters": [], + "src": "13034:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63822, + "nodeType": "FunctionDefinition", + "src": "13180:433:86", + "nodes": [], + "body": { + "id": 63821, + "nodeType": "Block", + "src": "13293:320:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63785, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 63778, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63774, + "src": "13300:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63779, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63776, + "src": "13310:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 63780, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "13299:20:86", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 63782, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63769, + "src": "13332:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63783, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63771, + "src": "13338:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 63781, + "name": "rentPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63016, + "src": "13322:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$_t_uint64_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (string memory,uint64) view returns (uint256,uint256)" + } + }, + "id": 63784, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13322:25:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "src": "13299:48:86", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63786, + "nodeType": "ExpressionStatement", + "src": "13299:48:86" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63790, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63787, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "13357:3:86", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 63788, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13361:5:86", + "memberName": "value", + "nodeType": "MemberAccess", + "src": "13357:9:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 63789, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63776, + "src": "13369:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13357:20:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63794, + "nodeType": "IfStatement", + "src": "13353:52:86", + "trueBody": { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63791, + "name": "InsufficientValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65136, + "src": "13386:17:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 63792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13386:19:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63793, + "nodeType": "RevertStatement", + "src": "13379:26:86" + } + }, + { + "id": 63817, + "nodeType": "UncheckedBlock", + "src": "13412:166:86", + "statements": [ + { + "assignments": [ + 63796 + ], + "declarations": [ + { + "constant": false, + "id": 63796, + "mutability": "mutable", + "name": "remainAmount", + "nameLocation": "13438:12:86", + "nodeType": "VariableDeclaration", + "scope": 63817, + "src": "13430:20:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63795, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13430:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63801, + "initialValue": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63800, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63797, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "13453:3:86", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 63798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13457:5:86", + "memberName": "value", + "nodeType": "MemberAccess", + "src": "13453:9:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "-", + "rightExpression": { + "id": 63799, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63776, + "src": "13465:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13453:20:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13430:43:86" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63804, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 63802, + "name": "remainAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63796, + "src": "13485:12:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 63803, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13501:1:86", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "13485:17:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63816, + "nodeType": "IfStatement", + "src": "13481:90:86", + "trueBody": { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63810, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51922, + "src": "13543:10:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 63811, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13543:12:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 63809, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13535:8:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 63808, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13535:8:86", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 63812, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13535:21:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 63813, + "name": "remainAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63796, + "src": "13558:12:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 63805, + "name": "RONTransferHelper", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 67444, + "src": "13504:17:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_RONTransferHelper_$67444_$", + "typeString": "type(library RONTransferHelper)" + } + }, + "id": 63807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13522:12:86", + "memberName": "safeTransfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 67419, + "src": "13504:30:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$", + "typeString": "function (address payable,uint256)" + } + }, + "id": 63814, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13504:67:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63815, + "nodeType": "ExpressionStatement", + "src": "13504:67:86" + } + } + ] + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63818, + "name": "_transferRONToTreasury", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63766, + "src": "13584:22:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 63819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13584:24:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63820, + "nodeType": "ExpressionStatement", + "src": "13584:24:86" + } + ] + }, + "documentation": { + "id": 63767, + "nodeType": "StructuredDocumentation", + "src": "13113:64:86", + "text": " @dev Helper method to take renewal fee of a name." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_handlePrice", + "nameLocation": "13189:12:86", + "parameters": { + "id": 63772, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63769, + "mutability": "mutable", + "name": "name", + "nameLocation": "13216:4:86", + "nodeType": "VariableDeclaration", + "scope": 63822, + "src": "13202:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63768, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "13202:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63771, + "mutability": "mutable", + "name": "duration", + "nameLocation": "13229:8:86", + "nodeType": "VariableDeclaration", + "scope": 63822, + "src": "13222:15:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63770, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "13222:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + } + ], + "src": "13201:37:86" + }, + "returnParameters": { + "id": 63777, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63774, + "mutability": "mutable", + "name": "usdPrice", + "nameLocation": "13265:8:86", + "nodeType": "VariableDeclaration", + "scope": 63822, + "src": "13257:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63773, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13257:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63776, + "mutability": "mutable", + "name": "ronPrice", + "nameLocation": "13283:8:86", + "nodeType": "VariableDeclaration", + "scope": 63822, + "src": "13275:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63775, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13275:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13256:36:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63885, + "nodeType": "FunctionDefinition", + "src": "13726:516:86", + "nodes": [], + "body": { + "id": 63884, + "nodeType": "Block", + "src": "13939:303:86", + "nodes": [], + "statements": [ + { + "assignments": [ + 63844, + 63846 + ], + "declarations": [ + { + "constant": false, + "id": 63844, + "mutability": "mutable", + "name": "expiryTime", + "nameLocation": "13953:10:86", + "nodeType": "VariableDeclaration", + "scope": 63884, + "src": "13946:17:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63843, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "13946:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63846, + "mutability": "mutable", + "name": "id", + "nameLocation": "13973:2:86", + "nodeType": "VariableDeclaration", + "scope": 63884, + "src": "13965:10:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63845, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13965:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 63856, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 63849, + "name": "LibRNSDomain", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66042, + "src": "13996:12:86", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibRNSDomain_$66042_$", + "typeString": "type(library LibRNSDomain)" + } + }, + "id": 63850, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "14009:6:86", + "memberName": "RON_ID", + "nodeType": "MemberAccess", + "referencedDeclaration": 66005, + "src": "13996:19:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63851, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63825, + "src": "14017:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63852, + "name": "resolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63831, + "src": "14023:8:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63853, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63827, + "src": "14033:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63854, + "name": "duration", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63829, + "src": "14040:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "expression": { + "id": 63847, + "name": "_rnsUnified", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62832, + "src": "13979:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSUnified_$64975", + "typeString": "contract INSUnified" + } + }, + "id": 63848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13991:4:86", + "memberName": "mint", + "nodeType": "MemberAccess", + "referencedDeclaration": 64895, + "src": "13979:16:86", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_string_memory_ptr_$_t_address_$_t_address_$_t_uint64_$returns$_t_uint64_$_t_uint256_$", + "typeString": "function (uint256,string memory,address,address,uint64) external returns (uint64,uint256)" + } + }, + "id": 63855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13979:70:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint64_$_t_uint256_$", + "typeString": "tuple(uint64,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13945:104:86" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 63860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 63857, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63834, + "src": "14059:4:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + }, + "id": 63858, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "14064:6:86", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "14059:11:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 63859, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14074:1:86", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "14059:16:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63867, + "nodeType": "IfStatement", + "src": "14055:53:86", + "trueBody": { + "expression": { + "arguments": [ + { + "id": 63862, + "name": "resolver", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63831, + "src": "14089:8:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63863, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63846, + "src": "14099:2:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63864, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63834, + "src": "14103:4:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes calldata[] calldata" + } + ], + "id": 63861, + "name": "_setRecords", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63729, + "src": "14077:11:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$__$", + "typeString": "function (address,uint256,bytes calldata[] calldata)" + } + }, + "id": 63865, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14077:31:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63866, + "nodeType": "ExpressionStatement", + "src": "14077:31:86" + } + }, + { + "condition": { + "id": 63868, + "name": "reverseRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63836, + "src": "14118:13:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63874, + "nodeType": "IfStatement", + "src": "14114:49:86", + "trueBody": { + "expression": { + "arguments": [ + { + "id": 63870, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63825, + "src": "14151:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63871, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63827, + "src": "14157:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 63869, + "name": "_setReverseRecord", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63750, + "src": "14133:17:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_address_$returns$__$", + "typeString": "function (string memory,address)" + } + }, + "id": 63872, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14133:30:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63873, + "nodeType": "ExpressionStatement", + "src": "14133:30:86" + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 63876, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63825, + "src": "14189:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + }, + { + "id": 63877, + "name": "id", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63846, + "src": "14195:2:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63878, + "name": "owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63827, + "src": "14199:5:86", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63879, + "name": "ronPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63840, + "src": "14206:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63880, + "name": "usdPrice", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63838, + "src": "14216:8:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 63881, + "name": "expiryTime", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63844, + "src": "14226:10:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + ], + "id": 63875, + "name": "NameRegistered", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65205, + "src": "14174:14:86", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint64_$returns$__$", + "typeString": "function (string memory,uint256,address,uint256,uint256,uint64)" + } + }, + "id": 63882, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14174:63:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63883, + "nodeType": "EmitStatement", + "src": "14169:68:86" + } + ] + }, + "documentation": { + "id": 63823, + "nodeType": "StructuredDocumentation", + "src": "13617:106:86", + "text": " @dev Helper method to register a name for owner.\n Emits an event {NameRegistered}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_register", + "nameLocation": "13735:9:86", + "parameters": { + "id": 63841, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63825, + "mutability": "mutable", + "name": "name", + "nameLocation": "13764:4:86", + "nodeType": "VariableDeclaration", + "scope": 63885, + "src": "13750:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63824, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "13750:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63827, + "mutability": "mutable", + "name": "owner", + "nameLocation": "13782:5:86", + "nodeType": "VariableDeclaration", + "scope": 63885, + "src": "13774:13:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63826, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13774:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63829, + "mutability": "mutable", + "name": "duration", + "nameLocation": "13800:8:86", + "nodeType": "VariableDeclaration", + "scope": 63885, + "src": "13793:15:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + }, + "typeName": { + "id": 63828, + "name": "uint64", + "nodeType": "ElementaryTypeName", + "src": "13793:6:86", + "typeDescriptions": { + "typeIdentifier": "t_uint64", + "typeString": "uint64" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63831, + "mutability": "mutable", + "name": "resolver", + "nameLocation": "13822:8:86", + "nodeType": "VariableDeclaration", + "scope": 63885, + "src": "13814:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 63830, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13814:7:86", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63834, + "mutability": "mutable", + "name": "data", + "nameLocation": "13853:4:86", + "nodeType": "VariableDeclaration", + "scope": 63885, + "src": "13836:21:86", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", + "typeString": "bytes[]" + }, + "typeName": { + "baseType": { + "id": 63832, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "13836:5:86", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "id": 63833, + "nodeType": "ArrayTypeName", + "src": "13836:7:86", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", + "typeString": "bytes[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63836, + "mutability": "mutable", + "name": "reverseRecord", + "nameLocation": "13868:13:86", + "nodeType": "VariableDeclaration", + "scope": 63885, + "src": "13863:18:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 63835, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "13863:4:86", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63838, + "mutability": "mutable", + "name": "usdPrice", + "nameLocation": "13895:8:86", + "nodeType": "VariableDeclaration", + "scope": 63885, + "src": "13887:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63837, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13887:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 63840, + "mutability": "mutable", + "name": "ronPrice", + "nameLocation": "13917:8:86", + "nodeType": "VariableDeclaration", + "scope": 63885, + "src": "13909:16:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 63839, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13909:7:86", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13744:185:86" + }, + "returnParameters": { + "id": 63842, + "nodeType": "ParameterList", + "parameters": [], + "src": "13939:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63903, + "nodeType": "FunctionDefinition", + "src": "14364:155:86", + "nodes": [], + "body": { + "id": 63902, + "nodeType": "Block", + "src": "14426:93:86", + "nodes": [], + "statements": [ + { + "expression": { + "id": 63894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 63892, + "name": "_priceOracle", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62840, + "src": "14432:12:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 63893, + "name": "priceOracle", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63889, + "src": "14447:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "src": "14432:26:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "id": 63895, + "nodeType": "ExpressionStatement", + "src": "14432:26:86" + }, + { + "eventCall": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 63897, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51922, + "src": "14488:10:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 63898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14488:12:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 63899, + "name": "priceOracle", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63889, + "src": "14502:11:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + ], + "id": 63896, + "name": "DomainPriceUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65181, + "src": "14469:18:86", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_contract$_INSDomainPrice_$64599_$returns$__$", + "typeString": "function (address,contract INSDomainPrice)" + } + }, + "id": 63900, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14469:45:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63901, + "nodeType": "EmitStatement", + "src": "14464:50:86" + } + ] + }, + "documentation": { + "id": 63886, + "nodeType": "StructuredDocumentation", + "src": "14246:115:86", + "text": " @dev Helper method to update RNSDomainPrice contract.\n Emits an event {DomainPriceUpdated}." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_setPriceOracle", + "nameLocation": "14373:15:86", + "parameters": { + "id": 63890, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63889, + "mutability": "mutable", + "name": "priceOracle", + "nameLocation": "14404:11:86", + "nodeType": "VariableDeclaration", + "scope": 63903, + "src": "14389:26:86", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + }, + "typeName": { + "id": 63888, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 63887, + "name": "INSDomainPrice", + "nameLocations": [ + "14389:14:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 64599, + "src": "14389:14:86" + }, + "referencedDeclaration": 64599, + "src": "14389:14:86", + "typeDescriptions": { + "typeIdentifier": "t_contract$_INSDomainPrice_$64599", + "typeString": "contract INSDomainPrice" + } + }, + "visibility": "internal" + } + ], + "src": "14388:28:86" + }, + "returnParameters": { + "id": 63891, + "nodeType": "ParameterList", + "parameters": [], + "src": "14426:0:86" + }, + "scope": 63920, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 63919, + "nodeType": "FunctionDefinition", + "src": "14612:123:86", + "nodes": [], + "body": { + "id": 63918, + "nodeType": "Block", + "src": "14673:62:86", + "nodes": [], + "statements": [ + { + "condition": { + "id": 63912, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "14683:16:86", + "subExpression": { + "arguments": [ + { + "id": 63910, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63906, + "src": "14694:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63909, + "name": "available", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63057, + "src": "14684:9:86", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$_t_bool_$", + "typeString": "function (string memory) view returns (bool)" + } + }, + "id": 63911, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14684:15:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 63917, + "nodeType": "IfStatement", + "src": "14679:51:86", + "trueBody": { + "errorCall": { + "arguments": [ + { + "id": 63914, + "name": "name", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 63906, + "src": "14725:4:86", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 63913, + "name": "NameNotAvailable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 65120, + "src": "14708:16:86", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 63915, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14708:22:86", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 63916, + "nodeType": "RevertStatement", + "src": "14701:29:86" + } + } + ] + }, + "documentation": { + "id": 63904, + "nodeType": "StructuredDocumentation", + "src": "14523:86:86", + "text": " @dev Helper method to check if a domain name is available for register." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_requireAvailable", + "nameLocation": "14621:17:86", + "parameters": { + "id": 63907, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 63906, + "mutability": "mutable", + "name": "name", + "nameLocation": "14653:4:86", + "nodeType": "VariableDeclaration", + "scope": 63919, + "src": "14639:18:86", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string" + }, + "typeName": { + "id": 63905, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "14639:6:86", + "typeDescriptions": { + "typeIdentifier": "t_string_storage_ptr", + "typeString": "string" + } + }, + "visibility": "internal" + } + ], + "src": "14638:20:86" + }, + "returnParameters": { + "id": 63908, + "nodeType": "ParameterList", + "parameters": [], + "src": "14673:0:86" + }, + "scope": 63920, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 62780, + "name": "Pausable", + "nameLocations": [ + "1198:8:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49972, + "src": "1198:8:86" + }, + "id": 62781, + "nodeType": "InheritanceSpecifier", + "src": "1198:8:86" + }, + { + "baseName": { + "id": 62782, + "name": "Initializable", + "nameLocations": [ + "1210:13:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 49864, + "src": "1210:13:86" + }, + "id": 62783, + "nodeType": "InheritanceSpecifier", + "src": "1210:13:86" + }, + { + "baseName": { + "id": 62784, + "name": "ReentrancyGuard", + "nameLocations": [ + "1227:15:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 50037, + "src": "1227:15:86" + }, + "id": 62785, + "nodeType": "InheritanceSpecifier", + "src": "1227:15:86" + }, + { + "baseName": { + "id": 62786, + "name": "AccessControlEnumerable", + "nameLocations": [ + "1246:23:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 48591, + "src": "1246:23:86" + }, + "id": 62787, + "nodeType": "InheritanceSpecifier", + "src": "1246:23:86" + }, + { + "baseName": { + "id": 62788, + "name": "IRONRegistrarController", + "nameLocations": [ + "1273:23:86" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 65460, + "src": "1273:23:86" + }, + "id": 62789, + "nodeType": "InheritanceSpecifier", + "src": "1273:23:86" + } + ], + "canonicalName": "RONRegistrarController", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 62779, + "nodeType": "StructuredDocumentation", + "src": "842:318:86", + "text": " @title RONRegistrarController\n @notice Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol\n @dev A registrar controller for registering and renewing names at fixed cost." + }, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 63920, + 65460, + 48591, + 48466, + 52295, + 52307, + 48689, + 48664, + 50037, + 49864, + 49972, + 51932 + ], + "name": "RONRegistrarController", + "nameLocation": "1170:22:86", + "scope": 63921, + "usedErrors": [ + 65110, + 65115, + 65120, + 65125, + 65128, + 65133, + 65136, + 65141, + 65144, + 65147, + 65152, + 65163, + 65166 + ], + "usedEvents": [ + 48603, + 48612, + 48621, + 49710, + 49875, + 49880, + 65173, + 65181, + 65190, + 65205, + 65216, + 65229 + ] + } + ], + "license": "MIT" + }, + "blockNumber": 21481353, + "bytecode": "0x60806040526000805460ff19169055600180556200001c62000022565b620000e9565b60005462010000900460ff1615620000905760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b600054610100900460ff90811614620000e7576000805461ff00191661ff0017905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612f6980620000f96000396000f3fe6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a61024536600461207d565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120a7565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d6103583660046120d5565b610745565b005b34801561036b57600080fd5b5061035d61037a3660046120d5565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b83660046120d5565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612105565b610815565b61035d61043b366004612137565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d6104733660046121b9565b6109d8565b34801561048457600080fd5b5061035d6104933660046122c0565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612450565b610cdd565b3480156104ea57600080fd5b506102a26104f936600461250b565b610e3e565b34801561050a57600080fd5b5061024a6105193660046120d5565b610e5d565b34801561052a57600080fd5b5061024a61053936600461252d565b610e88565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e36600461252d565b610f16565b34801561057f57600080fd5b5061027361058e366004612569565b610fa1565b34801561059f57600080fd5b5061035d6105ae3660046120a7565b611051565b3480156105bf57600080fd5b506103086105ce3660046120a7565b611065565b61035d6105e13660046125af565b61107c565b3480156105f257600080fd5b5061035d6106013660046120d5565b611188565b34801561061257600080fd5b506103086106213660046125af565b6111ad565b34801561063257600080fd5b5061035d61064136600461250b565b611239565b34801561065257600080fd5b50610308600080516020612f1483398151915281565b34801561067457600080fd5b5061035d610683366004612105565b61124e565b34801561069457600080fd5b5061035d6106a33660046120a7565b61127c565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f736600461252d565b6112d5565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f82611312565b92915050565b60008281526002602052604090206001015461076081611347565b61076a8383611351565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611373565b5050565b600080516020612f1483398151915261080a81611347565b610812611395565b50565b600061082081611347565b6107ee826113e7565b61083161143e565b610839611486565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610fa1915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac8234612689565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d592505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610973919061269c565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126e2565b60405180910390a282156109c3576109c333846114df565b6109cb611544565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f148339815191528b61155a565b610aca60008c61155a565b610ad3836113e7565b610adc86611564565b610ae6878961159b565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae81611347565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc612716565b9050602002013581526020019081526020016000206000888885818110610c2557610c25612716565b9050602002016020810190610c3a9190612105565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac95949392919061272c565b60405180910390a250505050505050565b600080516020612f14833981519152610cd581611347565b610812611625565b610ce561143e565b610ced611486565b86610cf781611662565b610d0088610f16565b610d1f57876040516308eee0fd60e31b81526004016107db9190612816565b6000610d2a896112d5565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610da191908101906128e3565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dde575080155b15610e04578a8a8383604051631fc5717160e01b81526004016107db94939291906129c5565b600080610e118d8c61168a565b91509150610e268d8d8d8d8d8d8d89896116e2565b505050505050610e3560018055565b50505050505050565b6000828152600360205260408120610e56908361180c565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e9583611818565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610ece908590600401612816565b602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906129ff565b1592915050565b6000610f2182610e88565b801561073f5750603a546001600160a01b03166396e494e8610f42846112d5565b6040518263ffffffff1660e01b8152600401610f6091815260200190565b602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129ff565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fdc9089908990600401612a1c565b608060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612a77565b8051825192945090925061103091612aac565b9350806020015182602001516110469190612aac565b925050509250929050565b600061105c81611347565b6107ee82611564565b600081815260036020526040812061073f90611906565b61108461143e565b61108c611486565b6000611097896112d5565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110991908101906128e3565b60200151606001511561113157886040516331597a5760e21b81526004016107db9190612816565b60006111438a8a8a8a8a8a8a8a6111ad565b905061114f8882611910565b60008061115c8c8b61168a565b915091506111718c8c8c8b8b8b8b89896116e2565b5050505061117e60018055565b5050505050505050565b6000828152600260205260409020600101546111a381611347565b61076a8383611373565b6000886111b981611662565b83158015906111cf57506001600160a01b038616155b156111ed576040516334fd817160e21b815260040160405180910390fd5b6111f68a6112d5565b89898989898989604051602001611214989796959493929190612b50565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124481611347565b61076a838361159b565b600061125981611347565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b61128461143e565b6037546000828152603e602052604090205442916112a191612aac565b106112c257604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b61081281336119c1565b61135b82826119f4565b600082815260036020526040902061076a9082611a7a565b61137d8282611a8f565b600082815260036020526040902061076a9082611af6565b61139d611b0b565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114d85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114eb8383611b54565b90508061076a57611504836001600160a01b0316611bca565b61150d83611be0565b60405160200161151e929190612bb0565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612816565b603954611484906001600160a01b0316476114df565b6107ee8282611351565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611433565b428111156115bc57604051630b4319e560e21b815260040160405180910390fd5b8181116115dc576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b61162d61143e565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ca3390565b61166b81610f16565b61081257806040516308eee0fd60e31b81526004016107db9190612816565b6000806116978484610fa1565b9092509050348111156116bd5760405163044044a560e21b815260040160405180910390fd5b348181039082146116d2576116d233826114df565b506116db611544565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b815260040161174e959493929190612c2e565b60408051808303816000875af115801561176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117909190612c79565b909250905085156117a7576117a788828989611bf7565b84156117b7576117b78b8b611c75565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117f79493929190612ca7565b60405180910390a35050505050505050505050565b6000610e568383611d0c565b600080600080845190505b808310156118fe57600085848151811061183f5761183f612716565b01602001516001600160f81b0319169050600160ff1b811015611867576001840193506118f2565b600760fd1b6001600160f81b031982161015611888576002840193506118f2565b600f60fc1b6001600160f81b0319821610156118a9576003840193506118f2565b601f60fb1b6001600160f81b0319821610156118ca576004840193506118f2565b603f60fa1b6001600160f81b0319821610156118eb576005840193506118f2565b6006840193505b50600190910190611823565b509392505050565b600061073f825490565b603854826001600160401b03161015611947576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119609042612689565b905060365481101561198857604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119ae5760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b6119cb8282610e5d565b6107ee576119d881611bca565b6119e3836020611d36565b60405160200161151e929190612cdf565b6119fe8282610e5d565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a363390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e56836001600160a01b038416611ed1565b611a998282610e5d565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e56836001600160a01b038416611f20565b60005460ff166114845760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b7e9190612d54565b60006040518083038185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d36565b606061073f82611bef84612013565b600101611d36565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c2790869086908690600401612d70565b6000604051808303816000875af1158015611c46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6e9190810190612d93565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c9d908690602001612e6a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611cc9929190612e92565b6020604051808303816000875af1158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612eb6565b6000826000018281548110611d2357611d23612716565b9060005260206000200154905092915050565b60606000611d45836002612ecf565b611d50906002612aac565b6001600160401b03811115611d6757611d67612343565b6040519080825280601f01601f191660200182016040528015611d91576020820181803683370190505b509050600360fc1b81600081518110611dac57611dac612716565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ddb57611ddb612716565b60200101906001600160f81b031916908160001a9053506000611dff846002612ecf565b611e0a906001612aac565b90505b6001811115611e82576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e3e57611e3e612716565b1a60f81b828281518110611e5457611e54612716565b60200101906001600160f81b031916908160001a90535060049490941c93611e7b81612ee6565b9050611e0d565b508315610e565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f185750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015612009576000611f44600183612689565b8554909150600090611f5890600190612689565b9050818114611fbd576000866000018281548110611f7857611f78612716565b9060005260206000200154905080876000018481548110611f9b57611f9b612716565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fce57611fce612efd565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561202b5760809290921c916010015b604083901c156120405760409290921c916008015b602083901c156120555760209290921c916004015b601083901c1561206a5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561208f57600080fd5b81356001600160e01b031981168114610e5657600080fd5b6000602082840312156120b957600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120e857600080fd5b8235915060208301356120fa816120c0565b809150509250929050565b60006020828403121561211757600080fd5b8135610e56816120c0565b6001600160401b038116811461081257600080fd5b60008060006040848603121561214c57600080fd5b83356001600160401b038082111561216357600080fd5b818601915086601f83011261217757600080fd5b81358181111561218657600080fd5b87602082850101111561219857600080fd5b602092830195509350508401356121ae81612122565b809150509250925092565b6000806000806000806000806000806101408b8d0312156121d957600080fd5b8a356121e4816120c0565b995060208b01356121f4816120c0565b985060408b0135612204816120c0565b975060608b0135965060808b0135955060a08b0135945060c08b0135612229816120c0565b935060e08b0135612239816120c0565b92506101008b013561224a816120c0565b91506101208b013561225b816120c0565b809150509295989b9194979a5092959850565b60008083601f84011261228057600080fd5b5081356001600160401b0381111561229757600080fd5b6020830191508360208260051b85010111156116db57600080fd5b801515811461081257600080fd5b6000806000806000606086880312156122d857600080fd5b85356001600160401b03808211156122ef57600080fd5b6122fb89838a0161226e565b9097509550602088013591508082111561231457600080fd5b506123218882890161226e565b9094509250506040860135612335816122b2565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561237b5761237b612343565b60405290565b604051606081016001600160401b038111828210171561237b5761237b612343565b604051601f8201601f191681016001600160401b03811182821017156123cb576123cb612343565b604052919050565b60006001600160401b038211156123ec576123ec612343565b50601f01601f191660200190565b600082601f83011261240b57600080fd5b813561241e612419826123d3565b6123a3565b81815284602083860101111561243357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561246b57600080fd5b87356001600160401b038082111561248257600080fd5b61248e8b838c016123fa565b985060208a013591506124a0826120c0565b9096506040890135906124b282612122565b9095506060890135906124c4826120c0565b909450608089013590808211156124da57600080fd5b506124e78a828b0161226e565b90945092505060a08801356124fb816122b2565b8091505092959891949750929550565b6000806040838503121561251e57600080fd5b50508035926020909101359150565b60006020828403121561253f57600080fd5b81356001600160401b0381111561255557600080fd5b612561848285016123fa565b949350505050565b6000806040838503121561257c57600080fd5b82356001600160401b0381111561259257600080fd5b61259e858286016123fa565b92505060208301356120fa81612122565b60008060008060008060008060e0898b0312156125cb57600080fd5b88356001600160401b03808211156125e257600080fd5b6125ee8c838d016123fa565b995060208b01359150612600826120c0565b90975060408a01359061261282612122565b90965060608a0135955060808a01359061262b826120c0565b90945060a08a0135908082111561264157600080fd5b5061264e8b828c0161226e565b90945092505060c0890135612662816122b2565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612673565b6000602082840312156126ae57600080fd5b8151610e5681612122565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126f66060830186886126b9565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561274c57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127a957833561278c816120c0565b6001600160a01b0316815292810192600192909201918101612779565b861515604087015293506127bc92505050565b9695505050505050565b60005b838110156127e15781810151838201526020016127c9565b50506000910152565b600081518084526128028160208601602086016127c6565b601f01601f19169290920160200192915050565b602081526000610e5660208301846127ea565b6000612837612419846123d3565b905082815283838301111561284b57600080fd5b610e568360208301846127c6565b60006080828403121561286b57600080fd5b604051608081018181106001600160401b038211171561288d5761288d612343565b806040525080915082516128a0816120c0565b815260208301516128b0816120c0565b602082015260408301516128c381612122565b604082015260608301516128d6816122b2565b6060919091015292915050565b600060208083850312156128f657600080fd5b82516001600160401b038082111561290d57600080fd5b9084019060a0828703121561292157600080fd5b612929612359565b82518281111561293857600080fd5b83016060818903121561294a57600080fd5b612952612381565b815160ff8116811461296357600080fd5b8152818601518682015260408201518481111561297f57600080fd5b82019350601f8401891361299257600080fd5b6129a0898551888701612829565b60408201528252506129b487848601612859565b848201528094505050505092915050565b6080815260006129d860808301876127ea565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a1157600080fd5b8151610e56816122b2565b604081526000612a2f60408301856127ea565b90506001600160401b03831660208301529392505050565b600060408284031215612a5957600080fd5b612a61612359565b9050815181526020820151602082015292915050565b60008060808385031215612a8a57600080fd5b612a948484612a47565b9150612aa38460408501612a47565b90509250929050565b8082018082111561073f5761073f612673565b81835260006020808501808196508560051b810191508460005b87811015612b435782840389528135601e19883603018112612afa57600080fd5b870185810190356001600160401b03811115612b1557600080fd5b803603821315612b2457600080fd5b612b2f8682846126b9565b9a87019a9550505090840190600101612ad9565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b999083018587612abf565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bfb81602a8501602088016127c6565b660103b30b63ab2960cd1b602a918401918201528351612c228160318401602088016127c6565b01603101949350505050565b85815260a060208201526000612c4760a08301876127ea565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c8c57600080fd5b8251612c9781612122565b6020939093015192949293505050565b608081526000612cba60808301876127ea565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d178160178501602088016127c6565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d488160288401602088016127c6565b01602801949350505050565b60008251612d668184602087016127c6565b9190910192915050565b838152604060208201526000612d8a604083018486612abf565b95945050505050565b60006020808385031215612da657600080fd5b82516001600160401b0380821115612dbd57600080fd5b818501915085601f830112612dd157600080fd5b815181811115612de357612de3612343565b8060051b612df28582016123a3565b9182528381018501918581019089841115612e0c57600080fd5b86860192505b83831015612e5d57825185811115612e2a5760008081fd5b8601603f81018b13612e3c5760008081fd5b612e4d8b8983015160408401612829565b8352509186019190860190612e12565b9998505050505050505050565b60008251612e7c8184602087016127c6565b63173937b760e11b920191825250600401919050565b6001600160a01b0383168152604060208201819052600090612561908301846127ea565b600060208284031215612ec857600080fd5b5051919050565b808202811582820484141761073f5761073f612673565b600081612ef557612ef5612673565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122006f996c081232038f43c5a1b7c3f11015820d9739a2a8d4b25e938ce2da8ea5764736f6c63430008150033", + "chainId": 2021, + "contractName": "RONRegistrarController", + "deployedBytecode": "0x6080604052600436106102255760003560e01c80638ca3d18311610123578063cb80fe2f116100ab578063f0f442601161006f578063f0f4426014610668578063f14fcbc814610688578063f5b541a6146106a8578063fb021939146106dc578063fca513a8146106fc57600080fd5b8063cb80fe2f146105d3578063d547741f146105e6578063db9bf5ed14610606578063e4214b4614610626578063e63ab1e91461064657600080fd5b8063a217fddf116100f2578063a217fddf1461053e578063aeb8ce9b14610553578063b24b17b014610573578063c078f16a14610593578063ca15c873146105b357600080fd5b80638ca3d183146104cb5780639010d07c146104de57806391d14854146104fe5780639791c0971461051e57600080fd5b80633b6c2ea3116101b15780635c975abb116101755780635c975abb1461044057806364c65705146104585780636df99353146104785780638456cb59146104985780638c843314146104ad57600080fd5b80633b6c2ea31461039d5780633f4ba83a146103e357806342c20288146103f8578063530e784f1461040d5780635a7051691461042d57600080fd5b8063248a9ca3116101f8578063248a9ca3146102d857806329aa4f51146103165780632f2ff15d1461033d57806336568abe1461035f5780633b19e84a1461037f57600080fd5b806301ffc9a71461022a5780631321889f1461025f578063224b04de14610288578063237a78fb146102ba575b600080fd5b34801561023657600080fd5b5061024a61024536600461207d565b61071a565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b506036546037545b60408051928352602083019190915201610256565b34801561029457600080fd5b50603b546001600160a01b03165b6040516001600160a01b039091168152602001610256565b3480156102c657600080fd5b50603d546001600160a01b03166102a2565b3480156102e457600080fd5b506103086102f33660046120a7565b60009081526002602052604090206001015490565b604051908152602001610256565b34801561032257600080fd5b5061032b600381565b60405160ff9091168152602001610256565b34801561034957600080fd5b5061035d6103583660046120d5565b610745565b005b34801561036b57600080fd5b5061035d61037a3660046120d5565b61076f565b34801561038b57600080fd5b506039546001600160a01b03166102a2565b3480156103a957600080fd5b5061024a6103b83660046120d5565b6000918252603f602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156103ef57600080fd5b5061035d6107f2565b34801561040457600080fd5b50603854610308565b34801561041957600080fd5b5061035d610428366004612105565b610815565b61035d61043b366004612137565b610829565b34801561044c57600080fd5b5060005460ff1661024a565b34801561046457600080fd5b5061035d6104733660046121b9565b6109d8565b34801561048457600080fd5b5061035d6104933660046122c0565b610b84565b3480156104a457600080fd5b5061035d610cbd565b3480156104b957600080fd5b50603a546001600160a01b03166102a2565b61035d6104d9366004612450565b610cdd565b3480156104ea57600080fd5b506102a26104f936600461250b565b610e3e565b34801561050a57600080fd5b5061024a6105193660046120d5565b610e5d565b34801561052a57600080fd5b5061024a61053936600461252d565b610e88565b34801561054a57600080fd5b50610308600081565b34801561055f57600080fd5b5061024a61056e36600461252d565b610f16565b34801561057f57600080fd5b5061027361058e366004612569565b610fa1565b34801561059f57600080fd5b5061035d6105ae3660046120a7565b611051565b3480156105bf57600080fd5b506103086105ce3660046120a7565b611065565b61035d6105e13660046125af565b61107c565b3480156105f257600080fd5b5061035d6106013660046120d5565b611188565b34801561061257600080fd5b506103086106213660046125af565b6111ad565b34801561063257600080fd5b5061035d61064136600461250b565b611239565b34801561065257600080fd5b50610308600080516020612f1483398151915281565b34801561067457600080fd5b5061035d610683366004612105565b61124e565b34801561069457600080fd5b5061035d6106a33660046120a7565b61127c565b3480156106b457600080fd5b506103087f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b3480156106e857600080fd5b506103086106f736600461252d565b6112d5565b34801561070857600080fd5b50603c546001600160a01b03166102a2565b60006001600160e01b03198216635a05180f60e01b148061073f575061073f82611312565b92915050565b60008281526002602052604090206001015461076081611347565b61076a8383611351565b505050565b6001600160a01b03811633146107e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6107ee8282611373565b5050565b600080516020612f1483398151915261080a81611347565b610812611395565b50565b600061082081611347565b6107ee826113e7565b61083161143e565b610839611486565b600061087c84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250610fa1915050565b915050803410156108a05760405163044044a560e21b815260040160405180910390fd5b60006108ac8234612689565b905060006108ef86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112d592505050565b603a54604051635569f33d60e01b8152600481018390526001600160401b03871660248201529192506000916001600160a01b0390911690635569f33d906044016020604051808303816000875af115801561094f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610973919061269c565b9050817fda0eda2cd32a098c8b27ed6a56aeb5c332b8abb98491f4357ea58e118b724c6d888887856040516109ab94939291906126e2565b60405180910390a282156109c3576109c333846114df565b6109cb611544565b5050505061076a60018055565b60005462010000900460ff16158080156109fd5750600054600161010090910460ff16105b80610a1d5750303b158015610a1d575060005460ff610100909104166001145b610a805760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107db565b6000805461ff0019166101001790558015610aa7576000805462ff00001916620100001790555b610abf600080516020612f148339815191528b61155a565b610aca60008c61155a565b610ad3836113e7565b610adc86611564565b610ae6878961159b565b603980546001600160a01b03808c166001600160a01b031992831617909255603a8054888416908316179055603b8054878416908316179055603d8054928516929091169190911790558015610b77576000805462ff000019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610bae81611347565b84801580610bbc5750808414155b15610bda57604051634ec4810560e11b815260040160405180910390fd5b60005b81811015610c6a5783603f60008a8a85818110610bfc57610bfc612716565b9050602002013581526020019081526020016000206000888885818110610c2557610c25612716565b9050602002016020810190610c3a9190612105565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bdd565b50336001600160a01b03167fb04cd4173c4030a0f2bf2acabc9484f9014ecf5654be55afb48f3694c0804e3b8888888888604051610cac95949392919061272c565b60405180910390a250505050505050565b600080516020612f14833981519152610cd581611347565b610812611625565b610ce561143e565b610ced611486565b86610cf781611662565b610d0088610f16565b610d1f57876040516308eee0fd60e31b81526004016107db9190612816565b6000610d2a896112d5565b603a546040516303e9e60960e01b8152600481018390529192506000916001600160a01b03909116906303e9e60990602401600060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610da191908101906128e3565b602090810151606001516000848152603f835260408082206001600160a01b038e168352909352919091205490915060ff16811580610dde575080155b15610e04578a8a8383604051631fc5717160e01b81526004016107db94939291906129c5565b600080610e118d8c61168a565b91509150610e268d8d8d8d8d8d8d89896116e2565b505050505050610e3560018055565b50505050505050565b6000828152600360205260408120610e56908361180c565b9392505050565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006003610e9583611818565b1015801561073f5750603b546040516303f6911960e21b81526001600160a01b0390911690630fda446490610ece908590600401612816565b602060405180830381865afa158015610eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0f91906129ff565b1592915050565b6000610f2182610e88565b801561073f5750603a546001600160a01b03166396e494e8610f42846112d5565b6040518263ffffffff1660e01b8152600401610f6091815260200190565b602060405180830381865afa158015610f7d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f91906129ff565b603c5460405163f4651f4960e01b81526000918291829182916001600160a01b039091169063f4651f4990610fdc9089908990600401612a1c565b608060405180830381865afa158015610ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101d9190612a77565b8051825192945090925061103091612aac565b9350806020015182602001516110469190612aac565b925050509250929050565b600061105c81611347565b6107ee82611564565b600081815260036020526040812061073f90611906565b61108461143e565b61108c611486565b6000611097896112d5565b603a546040516303e9e60960e01b8152600481018390529192506001600160a01b0316906303e9e60990602401600060405180830381865afa1580156110e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261110991908101906128e3565b60200151606001511561113157886040516331597a5760e21b81526004016107db9190612816565b60006111438a8a8a8a8a8a8a8a6111ad565b905061114f8882611910565b60008061115c8c8b61168a565b915091506111718c8c8c8b8b8b8b89896116e2565b5050505061117e60018055565b5050505050505050565b6000828152600260205260409020600101546111a381611347565b61076a8383611373565b6000886111b981611662565b83158015906111cf57506001600160a01b038616155b156111ed576040516334fd817160e21b815260040160405180910390fd5b6111f68a6112d5565b89898989898989604051602001611214989796959493929190612b50565b6040516020818303038152906040528051906020012091505098975050505050505050565b600061124481611347565b61076a838361159b565b600061125981611347565b50603980546001600160a01b0319166001600160a01b0392909216919091179055565b61128461143e565b6037546000828152603e602052604090205442916112a191612aac565b106112c257604051630a059d7160e01b8152600481018290526024016107db565b6000908152603e60205260409020429055565b600061073f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688836000918252805160209182012090526040902090565b60006001600160e01b03198216637965db0b60e01b148061073f57506301ffc9a760e01b6001600160e01b031983161461073f565b61081281336119c1565b61135b82826119f4565b600082815260036020526040902061076a9082611a7a565b61137d8282611a8f565b600082815260036020526040902061076a9082611af6565b61139d611b0b565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b603c80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fa0e5780c6b121c723ec81de517e849c838390affbdc0a70680a3065e47ff3655906020015b60405180910390a250565b60005460ff16156114845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107db565b565b6002600154036114d85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107db565b6002600155565b60006114eb8383611b54565b90508061076a57611504836001600160a01b0316611bca565b61150d83611be0565b60405160200161151e929190612bb0565b60408051601f198184030181529082905262461bcd60e51b82526107db91600401612816565b603954611484906001600160a01b0316476114df565b6107ee8282611351565b603881905560405181815233907f59dadbf6542974405b3c262294675f8dd6fb933e6e6556b04b41aaac6e42352c90602001611433565b428111156115bc57604051630b4319e560e21b815260040160405180910390fd5b8181116115dc576040516307cb550760e31b815260040160405180910390fd5b60368290556037819055604080518381526020810183905233917f26a34e9441e83658dfe0e99d79186a1f7cb28c0867d3caddf5cd8b79844adf8f910160405180910390a25050565b61162d61143e565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586113ca3390565b61166b81610f16565b61081257806040516308eee0fd60e31b81526004016107db9190612816565b6000806116978484610fa1565b9092509050348111156116bd5760405163044044a560e21b815260040160405180910390fd5b348181039082146116d2576116d233826114df565b506116db611544565b9250929050565b600080603a60009054906101000a90046001600160a01b03166001600160a01b0316630570891f7fba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d6888d8b8e8e6040518663ffffffff1660e01b815260040161174e959493929190612c2e565b60408051808303816000875af115801561176c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117909190612c79565b909250905085156117a7576117a788828989611bf7565b84156117b7576117b78b8b611c75565b896001600160a01b0316817f8b0e0cd1a643dbca06e60f7e03e5ff3c4e72b78e1c9842b5c3a29ad3ce8d384b8d8688876040516117f79493929190612ca7565b60405180910390a35050505050505050505050565b6000610e568383611d0c565b600080600080845190505b808310156118fe57600085848151811061183f5761183f612716565b01602001516001600160f81b0319169050600160ff1b811015611867576001840193506118f2565b600760fd1b6001600160f81b031982161015611888576002840193506118f2565b600f60fc1b6001600160f81b0319821610156118a9576003840193506118f2565b601f60fb1b6001600160f81b0319821610156118ca576004840193506118f2565b603f60fa1b6001600160f81b0319821610156118eb576005840193506118f2565b6006840193505b50600190910190611823565b509392505050565b600061073f825490565b603854826001600160401b03161015611947576040516378a3dfc160e11b81526001600160401b03831660048201526024016107db565b6000818152603e60205260408120546119609042612689565b905060365481101561198857604051635320bcf960e01b8152600481018390526024016107db565b8060375410156119ae5760405163cb7690d760e01b8152600481018390526024016107db565b506000908152603e602052604081205550565b6119cb8282610e5d565b6107ee576119d881611bca565b6119e3836020611d36565b60405160200161151e929190612cdf565b6119fe8282610e5d565b6107ee5760008281526002602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611a363390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e56836001600160a01b038416611ed1565b611a998282610e5d565b156107ee5760008281526002602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e56836001600160a01b038416611f20565b60005460ff166114845760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107db565b604080516000808252602082019092526001600160a01b038416908390604051611b7e9190612d54565b60006040518083038185875af1925050503d8060008114611bbb576040519150601f19603f3d011682016040523d82523d6000602084013e611bc0565b606091505b5090949350505050565b606061073f6001600160a01b0383166014611d36565b606061073f82611bef84612013565b600101611d36565b60405163e32954eb60e01b81526001600160a01b0385169063e32954eb90611c2790869086908690600401612d70565b6000604051808303816000875af1158015611c46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6e9190810190612d93565b5050505050565b603d546040516001600160a01b039091169063c9119941908390611c9d908690602001612e6a565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401611cc9929190612e92565b6020604051808303816000875af1158015611ce8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a9190612eb6565b6000826000018281548110611d2357611d23612716565b9060005260206000200154905092915050565b60606000611d45836002612ecf565b611d50906002612aac565b6001600160401b03811115611d6757611d67612343565b6040519080825280601f01601f191660200182016040528015611d91576020820181803683370190505b509050600360fc1b81600081518110611dac57611dac612716565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611ddb57611ddb612716565b60200101906001600160f81b031916908160001a9053506000611dff846002612ecf565b611e0a906001612aac565b90505b6001811115611e82576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611e3e57611e3e612716565b1a60f81b828281518110611e5457611e54612716565b60200101906001600160f81b031916908160001a90535060049490941c93611e7b81612ee6565b9050611e0d565b508315610e565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107db565b6000818152600183016020526040812054611f185750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561073f565b50600061073f565b60008181526001830160205260408120548015612009576000611f44600183612689565b8554909150600090611f5890600190612689565b9050818114611fbd576000866000018281548110611f7857611f78612716565b9060005260206000200154905080876000018481548110611f9b57611f9b612716565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fce57611fce612efd565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061073f565b600091505061073f565b600080608083901c1561202b5760809290921c916010015b604083901c156120405760409290921c916008015b602083901c156120555760209290921c916004015b601083901c1561206a5760109290921c916002015b600883901c1561073f5760010192915050565b60006020828403121561208f57600080fd5b81356001600160e01b031981168114610e5657600080fd5b6000602082840312156120b957600080fd5b5035919050565b6001600160a01b038116811461081257600080fd5b600080604083850312156120e857600080fd5b8235915060208301356120fa816120c0565b809150509250929050565b60006020828403121561211757600080fd5b8135610e56816120c0565b6001600160401b038116811461081257600080fd5b60008060006040848603121561214c57600080fd5b83356001600160401b038082111561216357600080fd5b818601915086601f83011261217757600080fd5b81358181111561218657600080fd5b87602082850101111561219857600080fd5b602092830195509350508401356121ae81612122565b809150509250925092565b6000806000806000806000806000806101408b8d0312156121d957600080fd5b8a356121e4816120c0565b995060208b01356121f4816120c0565b985060408b0135612204816120c0565b975060608b0135965060808b0135955060a08b0135945060c08b0135612229816120c0565b935060e08b0135612239816120c0565b92506101008b013561224a816120c0565b91506101208b013561225b816120c0565b809150509295989b9194979a5092959850565b60008083601f84011261228057600080fd5b5081356001600160401b0381111561229757600080fd5b6020830191508360208260051b85010111156116db57600080fd5b801515811461081257600080fd5b6000806000806000606086880312156122d857600080fd5b85356001600160401b03808211156122ef57600080fd5b6122fb89838a0161226e565b9097509550602088013591508082111561231457600080fd5b506123218882890161226e565b9094509250506040860135612335816122b2565b809150509295509295909350565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561237b5761237b612343565b60405290565b604051606081016001600160401b038111828210171561237b5761237b612343565b604051601f8201601f191681016001600160401b03811182821017156123cb576123cb612343565b604052919050565b60006001600160401b038211156123ec576123ec612343565b50601f01601f191660200190565b600082601f83011261240b57600080fd5b813561241e612419826123d3565b6123a3565b81815284602083860101111561243357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060c0888a03121561246b57600080fd5b87356001600160401b038082111561248257600080fd5b61248e8b838c016123fa565b985060208a013591506124a0826120c0565b9096506040890135906124b282612122565b9095506060890135906124c4826120c0565b909450608089013590808211156124da57600080fd5b506124e78a828b0161226e565b90945092505060a08801356124fb816122b2565b8091505092959891949750929550565b6000806040838503121561251e57600080fd5b50508035926020909101359150565b60006020828403121561253f57600080fd5b81356001600160401b0381111561255557600080fd5b612561848285016123fa565b949350505050565b6000806040838503121561257c57600080fd5b82356001600160401b0381111561259257600080fd5b61259e858286016123fa565b92505060208301356120fa81612122565b60008060008060008060008060e0898b0312156125cb57600080fd5b88356001600160401b03808211156125e257600080fd5b6125ee8c838d016123fa565b995060208b01359150612600826120c0565b90975060408a01359061261282612122565b90965060608a0135955060808a01359061262b826120c0565b90945060a08a0135908082111561264157600080fd5b5061264e8b828c0161226e565b90945092505060c0890135612662816122b2565b809150509295985092959890939650565b634e487b7160e01b600052601160045260246000fd5b8181038181111561073f5761073f612673565b6000602082840312156126ae57600080fd5b8151610e5681612122565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006126f66060830186886126b9565b90508360208301526001600160401b038316604083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b6060808252810185905260006001600160fb1b0386111561274c57600080fd5b8560051b8088608085013760809083018381038201602080860191909152918101869052869160009160a0015b878310156127a957833561278c816120c0565b6001600160a01b0316815292810192600192909201918101612779565b861515604087015293506127bc92505050565b9695505050505050565b60005b838110156127e15781810151838201526020016127c9565b50506000910152565b600081518084526128028160208601602086016127c6565b601f01601f19169290920160200192915050565b602081526000610e5660208301846127ea565b6000612837612419846123d3565b905082815283838301111561284b57600080fd5b610e568360208301846127c6565b60006080828403121561286b57600080fd5b604051608081018181106001600160401b038211171561288d5761288d612343565b806040525080915082516128a0816120c0565b815260208301516128b0816120c0565b602082015260408301516128c381612122565b604082015260608301516128d6816122b2565b6060919091015292915050565b600060208083850312156128f657600080fd5b82516001600160401b038082111561290d57600080fd5b9084019060a0828703121561292157600080fd5b612929612359565b82518281111561293857600080fd5b83016060818903121561294a57600080fd5b612952612381565b815160ff8116811461296357600080fd5b8152818601518682015260408201518481111561297f57600080fd5b82019350601f8401891361299257600080fd5b6129a0898551888701612829565b60408201528252506129b487848601612859565b848201528094505050505092915050565b6080815260006129d860808301876127ea565b6001600160a01b039590951660208301525091151560408301521515606090910152919050565b600060208284031215612a1157600080fd5b8151610e56816122b2565b604081526000612a2f60408301856127ea565b90506001600160401b03831660208301529392505050565b600060408284031215612a5957600080fd5b612a61612359565b9050815181526020820151602082015292915050565b60008060808385031215612a8a57600080fd5b612a948484612a47565b9150612aa38460408501612a47565b90509250929050565b8082018082111561073f5761073f612673565b81835260006020808501808196508560051b810191508460005b87811015612b435782840389528135601e19883603018112612afa57600080fd5b870185810190356001600160401b03811115612b1557600080fd5b803603821315612b2457600080fd5b612b2f8682846126b9565b9a87019a9550505090840190600101612ad9565b5091979650505050505050565b8881526001600160a01b0388811660208301526001600160401b0388166040830152606082018790528516608082015260e060a08201819052600090612b999083018587612abf565b905082151560c08301529998505050505050505050565b7f5472616e7366657248656c7065723a20636f756c64206e6f74207472616e7366815269032b9102927a7103a37960b51b602082015260008351612bfb81602a8501602088016127c6565b660103b30b63ab2960cd1b602a918401918201528351612c228160318401602088016127c6565b01603101949350505050565b85815260a060208201526000612c4760a08301876127ea565b6001600160a01b0395861660408401529390941660608201526001600160401b03919091166080909101529392505050565b60008060408385031215612c8c57600080fd5b8251612c9781612122565b6020939093015192949293505050565b608081526000612cba60808301876127ea565b60208301959095525060408101929092526001600160401b0316606090910152919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612d178160178501602088016127c6565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612d488160288401602088016127c6565b01602801949350505050565b60008251612d668184602087016127c6565b9190910192915050565b838152604060208201526000612d8a604083018486612abf565b95945050505050565b60006020808385031215612da657600080fd5b82516001600160401b0380821115612dbd57600080fd5b818501915085601f830112612dd157600080fd5b815181811115612de357612de3612343565b8060051b612df28582016123a3565b9182528381018501918581019089841115612e0c57600080fd5b86860192505b83831015612e5d57825185811115612e2a5760008081fd5b8601603f81018b13612e3c5760008081fd5b612e4d8b8983015160408401612829565b8352509186019190860190612e12565b9998505050505050505050565b60008251612e7c8184602087016127c6565b63173937b760e11b920191825250600401919050565b6001600160a01b0383168152604060208201819052600090612561908301846127ea565b600060208284031215612ec857600080fd5b5051919050565b808202811582820484141761073f5761073f612673565b600081612ef557612ef5612673565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa264697066735822122006f996c081232038f43c5a1b7c3f11015820d9739a2a8d4b25e938ce2da8ea5764736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "A registrar controller for registering and renewing names at fixed cost.", + "methods": { + "available(string)": { + "details": "Checks if a name is available for registration.", + "params": { + "name": "The name to check availability for." + }, + "returns": { + "_0": "A boolean indicating whether the name is available." + } + }, + "bulkWhitelistProtectedNames(uint256[],address[],bool)": { + "details": "Bulk (de)whitelist for buying protected names. Requirements: - The method caller is contract operator. Emits an event {ProtectedNamesWhitelisted}." + }, + "commit(bytes32)": { + "details": "Commits to a registration using the commitment hash.", + "params": { + "commitment": "The commitment hash." + } + }, + "computeCommitment(string,address,uint64,bytes32,address,bytes[],bool)": { + "details": "Generates the commitment hash for a registration.", + "params": { + "data": "Additional data associated with the registration.", + "duration": "The duration of the registration.", + "name": "The name to be registered.", + "owner": "The owner of the name.", + "resolver": "The resolver contract address.", + "reverseRecord": "Whether to use reverse record for additional data.", + "secret": "The secret used for the commitment." + }, + "returns": { + "_0": "The commitment hash." + } + }, + "computeId(string)": { + "details": "Calculate the corresponding id given RON_ID and name." + }, + "getCommitmentAgeRange()": { + "details": "Returns the range of commitment ages allowed." + }, + "getMinRegistrationDuration()": { + "details": "Returns the minimum registration duration." + }, + "getNameChecker()": { + "details": "Returns the INameChecker contract associated with this controller." + }, + "getPriceOracle()": { + "details": "Returns the INSDomainPrice contract associated with this controller." + }, + "getRNSUnified()": { + "details": "Returns the INSUnified contract associated with this controller." + }, + "getReverseRegistrar()": { + "details": "Returns the IReverseRegistrar contract associated with this controller." + }, + "getRoleAdmin(bytes32)": { + "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + }, + "getRoleMember(bytes32,uint256)": { + "details": "Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information." + }, + "getRoleMemberCount(bytes32)": { + "details": "Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role." + }, + "getTreasury()": { + "details": "Returns the treasury address." + }, + "getWhitelistProtectedNameStatus(uint256,address)": { + "details": "Returns the whitelist status for registering protected name." + }, + "grantRole(bytes32,address)": { + "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + }, + "hasRole(bytes32,address)": { + "details": "Returns `true` if `account` has been granted `role`." + }, + "pause()": { + "details": "Pauses the registrar controller's functionality. Requirements: - The caller must have the admin role." + }, + "paused()": { + "details": "Returns true if the contract is paused, and false otherwise." + }, + "register(string,address,uint64,bytes32,address,bytes[],bool)": { + "details": "Registers a new name.", + "params": { + "data": "Additional data associated with the registration.", + "duration": "The duration of the registration.", + "name": "The name to be registered.", + "owner": "The owner of the name.", + "resolver": "The resolver contract address.", + "reverseRecord": "Whether to use reverse record for additional data.", + "secret": "The secret used for the commitment." + } + }, + "registerProtectedName(string,address,uint64,address,bytes[],bool)": { + "details": "Registers a protected name. Requirements: - The owner is whitelisted for registering." + }, + "renew(string,uint64)": { + "details": "Renews an existing name registration.", + "params": { + "duration": "The duration of the renewal.", + "name": "The name to be renewed." + } + }, + "renounceRole(bytes32,address)": { + "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event." + }, + "rentPrice(string,uint64)": { + "details": "Retrieves the rent price for a given name and duration.", + "params": { + "duration": "The duration of the rent.", + "name": "The name for which to calculate the rent price." + }, + "returns": { + "ronPrice": "rent price in ron.", + "usdPrice": "rent price in usd." + } + }, + "revokeRole(bytes32,address)": { + "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + }, + "setCommitmentAge(uint256,uint256)": { + "details": "Sets the minimum and maximum commitment ages. Requirements: - Caller must have the DEFAULT_ADMIN_ROLE. - The `maxCommitmentAge` must be less than or equal to the current block timestamp. - The `maxCommitmentAge` must be greater than the `minCommitmentAge`. Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.", + "params": { + "maxCommitmentAge": "The maximum commitment age in seconds.", + "minCommitmentAge": "The minimum commitment age in seconds." + } + }, + "setMinRegistrationDuration(uint256)": { + "details": "Updates min registration duration. Requirements: - The caller must have the admin role." + }, + "setPriceOracle(address)": { + "details": "Updates price oracle address. Requirements: - The caller must have the admin role." + }, + "setTreasury(address)": { + "details": "Updates treasury address. Requirements: - The caller must have the admin role." + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "unpause()": { + "details": "Unpauses the registrar controller's functionality. Requirements: - The caller must have the admin role." + }, + "valid(string)": { + "details": "Checks if a name is valid.", + "params": { + "name": "The name to check validity for." + }, + "returns": { + "_0": "A boolean indicating whether the name is available." + } + } + }, + "events": { + "CommitmentAgeUpdated(address,uint256,uint256)": { + "details": "Emitted when the commitment age range is updated.", + "params": { + "maxCommitmentAge": "The new maximum commitment age in seconds.", + "minCommitmentAge": "The new minimum commitment age in seconds.", + "operator": "The address of the operator who triggered the update." + } + }, + "DomainPriceUpdated(address,address)": { + "details": "Emitted when RNSDomainPrice contract is updated.", + "params": { + "newDomainPrice": "The new duration domain price contract.", + "operator": "The address of the operator who triggered the update." + } + }, + "Initialized(uint8)": { + "details": "Triggered when the contract has been initialized or reinitialized." + }, + "MinRegistrationDurationUpdated(address,uint256)": { + "details": "Emitted when the min registration duration is updated.", + "params": { + "duration": "The new duration in seconds.", + "operator": "The address of the operator who triggered the update." + } + }, + "NameRegistered(string,uint256,address,uint256,uint256,uint64)": { + "details": "Emitted when a new name is successfully registered.", + "params": { + "expires": "The expiration timestamp of the registration.", + "id": "The namehash of the registered name.", + "name": "The registered name.", + "owner": "The owner of the registered name.", + "ronPrice": "The cost of the registration in RON.", + "usdPrice": "The cost of the registration in USD." + } + }, + "NameRenewed(string,uint256,uint256,uint64)": { + "details": "Emitted when a name is renewed.", + "params": { + "cost": "The cost of renewal.", + "expires": "The new expiration timestamp after renewal.", + "id": "The namehash of the registered name.", + "name": "The renewed name." + } + }, + "Paused(address)": { + "details": "Emitted when the pause is triggered by `account`." + }, + "ProtectedNamesWhitelisted(address,uint256[],address[],bool)": { + "details": "Emitted the whitelist status is updated for the owners of the protected names.", + "params": { + "operator": "The address of the operator who triggered the update." + } + }, + "RoleAdminChanged(bytes32,bytes32,bytes32)": { + "details": "Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._" + }, + "RoleGranted(bytes32,address,address)": { + "details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}." + }, + "RoleRevoked(bytes32,address,address)": { + "details": "Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)" + }, + "Unpaused(address)": { + "details": "Emitted when the pause is lifted by `account`." + } + }, + "errors": { + "CommitmentTooNew(bytes32)": [ + { + "details": "Error: The provided commitment timestamp is too new for registration." + } + ], + "CommitmentTooOld(bytes32)": [ + { + "details": "Error: The provided commitment timestamp is too old for registration." + } + ], + "DurationTooShort(uint64)": [ + { + "details": "Error: The requested duration for registration is too short." + } + ], + "ErrInvalidRegisterProtectedName(string,address,bool,bool)": [ + { + "details": "Thrown when received invalid params for registering protected name" + } + ], + "ErrRequestedForProtectedName(string)": [ + { + "details": "Thrown when some one requests for protected names" + } + ], + "InsufficientValue()": [ + { + "details": "Error: Insufficient value (RON) provided for registration." + } + ], + "InvalidArrayLength()": [ + { + "details": "Thrown when received invalid array length" + } + ], + "MaxCommitmentAgeTooHigh()": [ + { + "details": "Error: The maximum commitment age is set too high." + } + ], + "MaxCommitmentAgeTooLow()": [ + { + "details": "Error: The maximum commitment age is set too low." + } + ], + "NameNotAvailable(string)": [ + { + "details": "Error: The requested name is not available for registration." + } + ], + "ResolverRequiredWhenDataSupplied()": [ + { + "details": "Error: A resolver is required when additional data is supplied during registration." + } + ], + "Unauthorized(bytes32)": [ + { + "details": "Error: The sender is not authorized for the given RNS node." + } + ], + "UnexpiredCommitmentExists(bytes32)": [ + { + "details": "Error: An unexpired commitment already exists for the given commitment." + } + ] + }, + "title": "RONRegistrarController" + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"CommitmentTooNew\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"CommitmentTooOld\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"DurationTooShort\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"requestOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"nameProtected\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"ownerWhitelisted\",\"type\":\"bool\"}],\"name\":\"ErrInvalidRegisterProtectedName\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"ErrRequestedForProtectedName\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCommitmentAgeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCommitmentAgeTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameNotAvailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResolverRequiredWhenDataSupplied\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"UnexpiredCommitmentExists\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"}],\"name\":\"CommitmentAgeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"contract INSDomainPrice\",\"name\":\"newDomainPrice\",\"type\":\"address\"}],\"name\":\"DomainPriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"MinRegistrationDurationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"ronPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"expires\",\"type\":\"uint64\"}],\"name\":\"NameRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"expires\",\"type\":\"uint64\"}],\"name\":\"NameRenewed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"ProtectedNamesWhitelisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_DOMAIN_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPERATOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"available\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"owners\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"bulkWhitelistProtectedNames\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"secret\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"reverseRecord\",\"type\":\"bool\"}],\"name\":\"computeCommitment\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"computeId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCommitmentAgeRange\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinRegistrationDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNameChecker\",\"outputs\":[{\"internalType\":\"contract INameChecker\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceOracle\",\"outputs\":[{\"internalType\":\"contract INSDomainPrice\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRNSUnified\",\"outputs\":[{\"internalType\":\"contract INSUnified\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReverseRegistrar\",\"outputs\":[{\"internalType\":\"contract INSReverseRegistrar\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getRoleMember\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleMemberCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getWhitelistProtectedNameStatus\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pauser\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"treasury\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minRegistrationDuration\",\"type\":\"uint256\"},{\"internalType\":\"contract INSUnified\",\"name\":\"rnsUnified\",\"type\":\"address\"},{\"internalType\":\"contract INameChecker\",\"name\":\"nameChecker\",\"type\":\"address\"},{\"internalType\":\"contract INSDomainPrice\",\"name\":\"priceOracle\",\"type\":\"address\"},{\"internalType\":\"contract INSReverseRegistrar\",\"name\":\"reverseRegistrar\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"secret\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"reverseRecord\",\"type\":\"bool\"}],\"name\":\"register\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"},{\"internalType\":\"bool\",\"name\":\"reverseRecord\",\"type\":\"bool\"}],\"name\":\"registerProtectedName\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"renew\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"duration\",\"type\":\"uint64\"}],\"name\":\"rentPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"usdPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"ronPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minCommitmentAge\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCommitmentAge\",\"type\":\"uint256\"}],\"name\":\"setCommitmentAge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setMinRegistrationDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract INSDomainPrice\",\"name\":\"priceOracle\",\"type\":\"address\"}],\"name\":\"setPriceOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"valid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"A registrar controller for registering and renewing names at fixed cost.\",\"errors\":{\"CommitmentTooNew(bytes32)\":[{\"details\":\"Error: The provided commitment timestamp is too new for registration.\"}],\"CommitmentTooOld(bytes32)\":[{\"details\":\"Error: The provided commitment timestamp is too old for registration.\"}],\"DurationTooShort(uint64)\":[{\"details\":\"Error: The requested duration for registration is too short.\"}],\"ErrInvalidRegisterProtectedName(string,address,bool,bool)\":[{\"details\":\"Thrown when received invalid params for registering protected name\"}],\"ErrRequestedForProtectedName(string)\":[{\"details\":\"Thrown when some one requests for protected names\"}],\"InsufficientValue()\":[{\"details\":\"Error: Insufficient value (RON) provided for registration.\"}],\"InvalidArrayLength()\":[{\"details\":\"Thrown when received invalid array length\"}],\"MaxCommitmentAgeTooHigh()\":[{\"details\":\"Error: The maximum commitment age is set too high.\"}],\"MaxCommitmentAgeTooLow()\":[{\"details\":\"Error: The maximum commitment age is set too low.\"}],\"NameNotAvailable(string)\":[{\"details\":\"Error: The requested name is not available for registration.\"}],\"ResolverRequiredWhenDataSupplied()\":[{\"details\":\"Error: A resolver is required when additional data is supplied during registration.\"}],\"Unauthorized(bytes32)\":[{\"details\":\"Error: The sender is not authorized for the given RNS node.\"}],\"UnexpiredCommitmentExists(bytes32)\":[{\"details\":\"Error: An unexpired commitment already exists for the given commitment.\"}]},\"events\":{\"CommitmentAgeUpdated(address,uint256,uint256)\":{\"details\":\"Emitted when the commitment age range is updated.\",\"params\":{\"maxCommitmentAge\":\"The new maximum commitment age in seconds.\",\"minCommitmentAge\":\"The new minimum commitment age in seconds.\",\"operator\":\"The address of the operator who triggered the update.\"}},\"DomainPriceUpdated(address,address)\":{\"details\":\"Emitted when RNSDomainPrice contract is updated.\",\"params\":{\"newDomainPrice\":\"The new duration domain price contract.\",\"operator\":\"The address of the operator who triggered the update.\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"MinRegistrationDurationUpdated(address,uint256)\":{\"details\":\"Emitted when the min registration duration is updated.\",\"params\":{\"duration\":\"The new duration in seconds.\",\"operator\":\"The address of the operator who triggered the update.\"}},\"NameRegistered(string,uint256,address,uint256,uint256,uint64)\":{\"details\":\"Emitted when a new name is successfully registered.\",\"params\":{\"expires\":\"The expiration timestamp of the registration.\",\"id\":\"The namehash of the registered name.\",\"name\":\"The registered name.\",\"owner\":\"The owner of the registered name.\",\"ronPrice\":\"The cost of the registration in RON.\",\"usdPrice\":\"The cost of the registration in USD.\"}},\"NameRenewed(string,uint256,uint256,uint64)\":{\"details\":\"Emitted when a name is renewed.\",\"params\":{\"cost\":\"The cost of renewal.\",\"expires\":\"The new expiration timestamp after renewal.\",\"id\":\"The namehash of the registered name.\",\"name\":\"The renewed name.\"}},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"ProtectedNamesWhitelisted(address,uint256[],address[],bool)\":{\"details\":\"Emitted the whitelist status is updated for the owners of the protected names.\",\"params\":{\"operator\":\"The address of the operator who triggered the update.\"}},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"available(string)\":{\"details\":\"Checks if a name is available for registration.\",\"params\":{\"name\":\"The name to check availability for.\"},\"returns\":{\"_0\":\"A boolean indicating whether the name is available.\"}},\"bulkWhitelistProtectedNames(uint256[],address[],bool)\":{\"details\":\"Bulk (de)whitelist for buying protected names. Requirements: - The method caller is contract operator. Emits an event {ProtectedNamesWhitelisted}.\"},\"commit(bytes32)\":{\"details\":\"Commits to a registration using the commitment hash.\",\"params\":{\"commitment\":\"The commitment hash.\"}},\"computeCommitment(string,address,uint64,bytes32,address,bytes[],bool)\":{\"details\":\"Generates the commitment hash for a registration.\",\"params\":{\"data\":\"Additional data associated with the registration.\",\"duration\":\"The duration of the registration.\",\"name\":\"The name to be registered.\",\"owner\":\"The owner of the name.\",\"resolver\":\"The resolver contract address.\",\"reverseRecord\":\"Whether to use reverse record for additional data.\",\"secret\":\"The secret used for the commitment.\"},\"returns\":{\"_0\":\"The commitment hash.\"}},\"computeId(string)\":{\"details\":\"Calculate the corresponding id given RON_ID and name.\"},\"getCommitmentAgeRange()\":{\"details\":\"Returns the range of commitment ages allowed.\"},\"getMinRegistrationDuration()\":{\"details\":\"Returns the minimum registration duration.\"},\"getNameChecker()\":{\"details\":\"Returns the INameChecker contract associated with this controller.\"},\"getPriceOracle()\":{\"details\":\"Returns the INSDomainPrice contract associated with this controller.\"},\"getRNSUnified()\":{\"details\":\"Returns the INSUnified contract associated with this controller.\"},\"getReverseRegistrar()\":{\"details\":\"Returns the IReverseRegistrar contract associated with this controller.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getRoleMember(bytes32,uint256)\":{\"details\":\"Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.\"},\"getRoleMemberCount(bytes32)\":{\"details\":\"Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.\"},\"getTreasury()\":{\"details\":\"Returns the treasury address.\"},\"getWhitelistProtectedNameStatus(uint256,address)\":{\"details\":\"Returns the whitelist status for registering protected name.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"pause()\":{\"details\":\"Pauses the registrar controller's functionality. Requirements: - The caller must have the admin role.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"register(string,address,uint64,bytes32,address,bytes[],bool)\":{\"details\":\"Registers a new name.\",\"params\":{\"data\":\"Additional data associated with the registration.\",\"duration\":\"The duration of the registration.\",\"name\":\"The name to be registered.\",\"owner\":\"The owner of the name.\",\"resolver\":\"The resolver contract address.\",\"reverseRecord\":\"Whether to use reverse record for additional data.\",\"secret\":\"The secret used for the commitment.\"}},\"registerProtectedName(string,address,uint64,address,bytes[],bool)\":{\"details\":\"Registers a protected name. Requirements: - The owner is whitelisted for registering.\"},\"renew(string,uint64)\":{\"details\":\"Renews an existing name registration.\",\"params\":{\"duration\":\"The duration of the renewal.\",\"name\":\"The name to be renewed.\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"rentPrice(string,uint64)\":{\"details\":\"Retrieves the rent price for a given name and duration.\",\"params\":{\"duration\":\"The duration of the rent.\",\"name\":\"The name for which to calculate the rent price.\"},\"returns\":{\"ronPrice\":\"rent price in ron.\",\"usdPrice\":\"rent price in usd.\"}},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setCommitmentAge(uint256,uint256)\":{\"details\":\"Sets the minimum and maximum commitment ages. Requirements: - Caller must have the DEFAULT_ADMIN_ROLE. - The `maxCommitmentAge` must be less than or equal to the current block timestamp. - The `maxCommitmentAge` must be greater than the `minCommitmentAge`. Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\",\"params\":{\"maxCommitmentAge\":\"The maximum commitment age in seconds.\",\"minCommitmentAge\":\"The minimum commitment age in seconds.\"}},\"setMinRegistrationDuration(uint256)\":{\"details\":\"Updates min registration duration. Requirements: - The caller must have the admin role.\"},\"setPriceOracle(address)\":{\"details\":\"Updates price oracle address. Requirements: - The caller must have the admin role.\"},\"setTreasury(address)\":{\"details\":\"Updates treasury address. Requirements: - The caller must have the admin role.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"unpause()\":{\"details\":\"Unpauses the registrar controller's functionality. Requirements: - The caller must have the admin role.\"},\"valid(string)\":{\"details\":\"Checks if a name is valid.\",\"params\":{\"name\":\"The name to check validity for.\"},\"returns\":{\"_0\":\"A boolean indicating whether the name is available.\"}}},\"stateVariables\":{\"MIN_DOMAIN_LENGTH\":{\"details\":\"The minimum domain name's length\"},\"OPERATOR_ROLE\":{\"details\":\"Returns the operator role.\"},\"PAUSER_ROLE\":{\"details\":\"Returns the role identifier for the pauser role.\"},\"____gap\":{\"details\":\"Gap for upgradeability.\"},\"_committedAt\":{\"details\":\"Mapping from commitment hash => timestamp that commitment made.\"},\"_maxCommitmentAge\":{\"details\":\"Maximum duration between commitment and registration in second(s).\"},\"_minCommitmentAge\":{\"details\":\"Minimum duration between commitment and registration in second(s).\"},\"_minRegistrationDuration\":{\"details\":\"Min registration duration\"},\"_nameChecker\":{\"details\":\"The namechecker contract.\"},\"_priceOracle\":{\"details\":\"The price oracle.\"},\"_protectedNamesWhitelisted\":{\"details\":\"Mapping id => owner => flag indicating whether the owner is whitelisted to buy protected name\"},\"_reverseRegistrar\":{\"details\":\"The reverse registrar contract.\"},\"_rnsUnified\":{\"details\":\"The rns unified contract.\"},\"_treasury\":{\"details\":\"The treasury address.\"}},\"title\":\"RONRegistrarController\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/RONRegistrarController.sol\":\"RONRegistrarController\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../utils/introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev Contract module that allows children to implement role-based access\\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\\n * members except through off-chain means by accessing the contract event logs. Some\\n * applications may benefit from on-chain enumerability, for those cases see\\n * {AccessControlEnumerable}.\\n *\\n * Roles are referred to by their `bytes32` identifier. These should be exposed\\n * in the external API and be unique. The best way to achieve this is by\\n * using `public constant` hash digests:\\n *\\n * ```solidity\\n * bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\");\\n * ```\\n *\\n * Roles can be used to represent a set of permissions. To restrict access to a\\n * function call, use {hasRole}:\\n *\\n * ```solidity\\n * function foo() public {\\n * require(hasRole(MY_ROLE, msg.sender));\\n * ...\\n * }\\n * ```\\n *\\n * Roles can be granted and revoked dynamically via the {grantRole} and\\n * {revokeRole} functions. Each role has an associated admin role, and only\\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\\n *\\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\\n * that only accounts with this role will be able to grant or revoke other\\n * roles. More complex role relationships can be created by using\\n * {_setRoleAdmin}.\\n *\\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\\n * grant and revoke this role. Extra precautions should be taken to secure\\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\\n * to enforce additional security measures for this role.\\n */\\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\\n struct RoleData {\\n mapping(address => bool) members;\\n bytes32 adminRole;\\n }\\n\\n mapping(bytes32 => RoleData) private _roles;\\n\\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\\n\\n /**\\n * @dev Modifier that checks that an account has a specific role. Reverts\\n * with a standardized message including the required role.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n *\\n * _Available since v4.1._\\n */\\n modifier onlyRole(bytes32 role) {\\n _checkRole(role);\\n _;\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\\n return _roles[role].members[account];\\n }\\n\\n /**\\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\\n * Overriding this function changes the behavior of the {onlyRole} modifier.\\n *\\n * Format of the revert message is described in {_checkRole}.\\n *\\n * _Available since v4.6._\\n */\\n function _checkRole(bytes32 role) internal view virtual {\\n _checkRole(role, _msgSender());\\n }\\n\\n /**\\n * @dev Revert with a standard message if `account` is missing `role`.\\n *\\n * The format of the revert reason is given by the following regular expression:\\n *\\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\\n */\\n function _checkRole(bytes32 role, address account) internal view virtual {\\n if (!hasRole(role, account)) {\\n revert(\\n string(\\n abi.encodePacked(\\n \\\"AccessControl: account \\\",\\n Strings.toHexString(account),\\n \\\" is missing role \\\",\\n Strings.toHexString(uint256(role), 32)\\n )\\n )\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\\n return _roles[role].adminRole;\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function renounceRole(bytes32 role, address account) public virtual override {\\n require(account == _msgSender(), \\\"AccessControl: can only renounce roles for self\\\");\\n\\n _revokeRole(role, account);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event. Note that unlike {grantRole}, this function doesn't perform any\\n * checks on the calling account.\\n *\\n * May emit a {RoleGranted} event.\\n *\\n * [WARNING]\\n * ====\\n * This function should only be called from the constructor when setting\\n * up the initial roles for the system.\\n *\\n * Using this function in any other way is effectively circumventing the admin\\n * system imposed by {AccessControl}.\\n * ====\\n *\\n * NOTE: This function is deprecated in favor of {_grantRole}.\\n */\\n function _setupRole(bytes32 role, address account) internal virtual {\\n _grantRole(role, account);\\n }\\n\\n /**\\n * @dev Sets `adminRole` as ``role``'s admin role.\\n *\\n * Emits a {RoleAdminChanged} event.\\n */\\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\\n bytes32 previousAdminRole = getRoleAdmin(role);\\n _roles[role].adminRole = adminRole;\\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\\n }\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleGranted} event.\\n */\\n function _grantRole(bytes32 role, address account) internal virtual {\\n if (!hasRole(role, account)) {\\n _roles[role].members[account] = true;\\n emit RoleGranted(role, account, _msgSender());\\n }\\n }\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * Internal function without access restriction.\\n *\\n * May emit a {RoleRevoked} event.\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual {\\n if (hasRole(role, account)) {\\n _roles[role].members[account] = false;\\n emit RoleRevoked(role, account, _msgSender());\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0dd6e52cb394d7f5abe5dca2d4908a6be40417914720932de757de34a99ab87f\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (access/AccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControlEnumerable.sol\\\";\\nimport \\\"./AccessControl.sol\\\";\\nimport \\\"../utils/structs/EnumerableSet.sol\\\";\\n\\n/**\\n * @dev Extension of {AccessControl} that allows enumerating the members of each role.\\n */\\nabstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {\\n using EnumerableSet for EnumerableSet.AddressSet;\\n\\n mapping(bytes32 => EnumerableSet.AddressSet) private _roleMembers;\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId);\\n }\\n\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) public view virtual override returns (address) {\\n return _roleMembers[role].at(index);\\n }\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) public view virtual override returns (uint256) {\\n return _roleMembers[role].length();\\n }\\n\\n /**\\n * @dev Overload {_grantRole} to track enumerable memberships\\n */\\n function _grantRole(bytes32 role, address account) internal virtual override {\\n super._grantRole(role, account);\\n _roleMembers[role].add(account);\\n }\\n\\n /**\\n * @dev Overload {_revokeRole} to track enumerable memberships\\n */\\n function _revokeRole(bytes32 role, address account) internal virtual override {\\n super._revokeRole(role, account);\\n _roleMembers[role].remove(account);\\n }\\n}\\n\",\"keccak256\":\"0x13f5e15f2a0650c0b6aaee2ef19e89eaf4870d6e79662d572a393334c1397247\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev External interface of AccessControl declared to support ERC165 detection.\\n */\\ninterface IAccessControl {\\n /**\\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\\n *\\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\\n * {RoleAdminChanged} not being emitted signaling this.\\n *\\n * _Available since v3.1._\\n */\\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\\n\\n /**\\n * @dev Emitted when `account` is granted `role`.\\n *\\n * `sender` is the account that originated the contract call, an admin role\\n * bearer except when using {AccessControl-_setupRole}.\\n */\\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Emitted when `account` is revoked `role`.\\n *\\n * `sender` is the account that originated the contract call:\\n * - if using `revokeRole`, it is the admin role bearer\\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\\n */\\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\\n\\n /**\\n * @dev Returns `true` if `account` has been granted `role`.\\n */\\n function hasRole(bytes32 role, address account) external view returns (bool);\\n\\n /**\\n * @dev Returns the admin role that controls `role`. See {grantRole} and\\n * {revokeRole}.\\n *\\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\\n */\\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\\n\\n /**\\n * @dev Grants `role` to `account`.\\n *\\n * If `account` had not been already granted `role`, emits a {RoleGranted}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function grantRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from `account`.\\n *\\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\\n *\\n * Requirements:\\n *\\n * - the caller must have ``role``'s admin role.\\n */\\n function revokeRole(bytes32 role, address account) external;\\n\\n /**\\n * @dev Revokes `role` from the calling account.\\n *\\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\\n * purpose is to provide a mechanism for accounts to lose their privileges\\n * if they are compromised (such as when a trusted device is misplaced).\\n *\\n * If the calling account had been granted `role`, emits a {RoleRevoked}\\n * event.\\n *\\n * Requirements:\\n *\\n * - the caller must be `account`.\\n */\\n function renounceRole(bytes32 role, address account) external;\\n}\\n\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/access/IAccessControlEnumerable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControlEnumerable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IAccessControl.sol\\\";\\n\\n/**\\n * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.\\n */\\ninterface IAccessControlEnumerable is IAccessControl {\\n /**\\n * @dev Returns one of the accounts that have `role`. `index` must be a\\n * value between 0 and {getRoleMemberCount}, non-inclusive.\\n *\\n * Role bearers are not sorted in any particular way, and their ordering may\\n * change at any point.\\n *\\n * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure\\n * you perform all queries on the same block. See the following\\n * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]\\n * for more information.\\n */\\n function getRoleMember(bytes32 role, uint256 index) external view returns (address);\\n\\n /**\\n * @dev Returns the number of accounts that have `role`. Can be used\\n * together with {getRoleMember} to enumerate all bearers of a role.\\n */\\n function getRoleMemberCount(bytes32 role) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0xba4459ab871dfa300f5212c6c30178b63898c03533a1ede28436f11546626676\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/Address.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```solidity\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n *\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized != type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x3d6069be9b4c01fb81840fb9c2c4dc58dd6a6a4aafaa2c6837de8699574d84c6\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n _requireNotPaused();\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n _requirePaused();\\n _;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Throws if the contract is paused.\\n */\\n function _requireNotPaused() internal view virtual {\\n require(!paused(), \\\"Pausable: paused\\\");\\n }\\n\\n /**\\n * @dev Throws if the contract is not paused.\\n */\\n function _requirePaused() internal view virtual {\\n require(paused(), \\\"Pausable: not paused\\\");\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0x0849d93b16c9940beb286a7864ed02724b248b93e0d80ef6355af5ef15c64773\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Contract module that helps prevent reentrant calls to a function.\\n *\\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\\n * available, which can be applied to functions to make sure there are no nested\\n * (reentrant) calls to them.\\n *\\n * Note that because there is a single `nonReentrant` guard, functions marked as\\n * `nonReentrant` may not call one another. This can be worked around by making\\n * those functions `private`, and then adding `external` `nonReentrant` entry\\n * points to them.\\n *\\n * TIP: If you would like to learn more about reentrancy and alternative ways\\n * to protect against it, check out our blog post\\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\\n */\\nabstract contract ReentrancyGuard {\\n // Booleans are more expensive than uint256 or any type that takes up a full\\n // word because each write operation emits an extra SLOAD to first read the\\n // slot's contents, replace the bits taken up by the boolean, and then write\\n // back. This is the compiler's defense against contract upgrades and\\n // pointer aliasing, and it cannot be disabled.\\n\\n // The values being non-zero value makes deployment a bit more expensive,\\n // but in exchange the refund on every call to nonReentrant will be lower in\\n // amount. Since refunds are capped to a percentage of the total\\n // transaction's gas, it is best to keep them low in cases like this one, to\\n // increase the likelihood of the full refund coming into effect.\\n uint256 private constant _NOT_ENTERED = 1;\\n uint256 private constant _ENTERED = 2;\\n\\n uint256 private _status;\\n\\n constructor() {\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and making it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n _nonReentrantBefore();\\n _;\\n _nonReentrantAfter();\\n }\\n\\n function _nonReentrantBefore() private {\\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\\n require(_status != _ENTERED, \\\"ReentrancyGuard: reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n _status = _ENTERED;\\n }\\n\\n function _nonReentrantAfter() private {\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n _status = _NOT_ENTERED;\\n }\\n\\n /**\\n * @dev Returns true if the reentrancy guard is currently set to \\\"entered\\\", which indicates there is a\\n * `nonReentrant` function in the call stack.\\n */\\n function _reentrancyGuardEntered() internal view returns (bool) {\\n return _status == _ENTERED;\\n }\\n}\\n\",\"keccak256\":\"0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../../utils/introspection/IERC165.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721 is IERC165 {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC721.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721Metadata is IERC721 {\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./math/Math.sol\\\";\\nimport \\\"./math/SignedMath.sol\\\";\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary Strings {\\n bytes16 private constant _SYMBOLS = \\\"0123456789abcdef\\\";\\n uint8 private constant _ADDRESS_LENGTH = 20;\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n uint256 length = Math.log10(value) + 1;\\n string memory buffer = new string(length);\\n uint256 ptr;\\n /// @solidity memory-safe-assembly\\n assembly {\\n ptr := add(buffer, add(32, length))\\n }\\n while (true) {\\n ptr--;\\n /// @solidity memory-safe-assembly\\n assembly {\\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\\n }\\n value /= 10;\\n if (value == 0) break;\\n }\\n return buffer;\\n }\\n }\\n\\n /**\\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\\n */\\n function toString(int256 value) internal pure returns (string memory) {\\n return string(abi.encodePacked(value < 0 ? \\\"-\\\" : \\\"\\\", toString(SignedMath.abs(value))));\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\\n */\\n function toHexString(uint256 value) internal pure returns (string memory) {\\n unchecked {\\n return toHexString(value, Math.log256(value) + 1);\\n }\\n }\\n\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\\n */\\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\\n bytes memory buffer = new bytes(2 * length + 2);\\n buffer[0] = \\\"0\\\";\\n buffer[1] = \\\"x\\\";\\n for (uint256 i = 2 * length + 1; i > 1; --i) {\\n buffer[i] = _SYMBOLS[value & 0xf];\\n value >>= 4;\\n }\\n require(value == 0, \\\"Strings: hex length insufficient\\\");\\n return string(buffer);\\n }\\n\\n /**\\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\\n */\\n function toHexString(address addr) internal pure returns (string memory) {\\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\\n }\\n\\n /**\\n * @dev Returns true if the two strings are equal.\\n */\\n function equal(string memory a, string memory b) internal pure returns (bool) {\\n return keccak256(bytes(a)) == keccak256(bytes(b));\\n }\\n}\\n\",\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\\n * for the additional interface id that will be supported. For example:\\n *\\n * ```solidity\\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\\n * }\\n * ```\\n *\\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\\n */\\nabstract contract ERC165 is IERC165 {\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return interfaceId == type(IERC165).interfaceId;\\n }\\n}\\n\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n enum Rounding {\\n Down, // Toward negative infinity\\n Up, // Toward infinity\\n Zero // Toward zero\\n }\\n\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a == 0 ? 0 : (a - 1) / b + 1;\\n }\\n\\n /**\\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\\n * with further edits by Uniswap Labs also under MIT license.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\\n unchecked {\\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\\n // variables such that product = prod1 * 2^256 + prod0.\\n uint256 prod0; // Least significant 256 bits of the product\\n uint256 prod1; // Most significant 256 bits of the product\\n assembly {\\n let mm := mulmod(x, y, not(0))\\n prod0 := mul(x, y)\\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\\n }\\n\\n // Handle non-overflow cases, 256 by 256 division.\\n if (prod1 == 0) {\\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\\n // The surrounding unchecked block does not change this fact.\\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\\n return prod0 / denominator;\\n }\\n\\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\\n require(denominator > prod1, \\\"Math: mulDiv overflow\\\");\\n\\n ///////////////////////////////////////////////\\n // 512 by 256 division.\\n ///////////////////////////////////////////////\\n\\n // Make division exact by subtracting the remainder from [prod1 prod0].\\n uint256 remainder;\\n assembly {\\n // Compute remainder using mulmod.\\n remainder := mulmod(x, y, denominator)\\n\\n // Subtract 256 bit number from 512 bit number.\\n prod1 := sub(prod1, gt(remainder, prod0))\\n prod0 := sub(prod0, remainder)\\n }\\n\\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\\n // See https://cs.stackexchange.com/q/138556/92363.\\n\\n // Does not overflow because the denominator cannot be zero at this stage in the function.\\n uint256 twos = denominator & (~denominator + 1);\\n assembly {\\n // Divide denominator by twos.\\n denominator := div(denominator, twos)\\n\\n // Divide [prod1 prod0] by twos.\\n prod0 := div(prod0, twos)\\n\\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\\n twos := add(div(sub(0, twos), twos), 1)\\n }\\n\\n // Shift in bits from prod1 into prod0.\\n prod0 |= prod1 * twos;\\n\\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\\n // four bits. That is, denominator * inv = 1 mod 2^4.\\n uint256 inverse = (3 * denominator) ^ 2;\\n\\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\\n // in modular arithmetic, doubling the correct bits in each step.\\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\\n\\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\\n // is no longer required.\\n result = prod0 * inverse;\\n return result;\\n }\\n }\\n\\n /**\\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\\n uint256 result = mulDiv(x, y, denominator);\\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\\n result += 1;\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\\n *\\n * Inspired by Henry S. Warren, Jr.'s \\\"Hacker's Delight\\\" (Chapter 11).\\n */\\n function sqrt(uint256 a) internal pure returns (uint256) {\\n if (a == 0) {\\n return 0;\\n }\\n\\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\\n //\\n // We know that the \\\"msb\\\" (most significant bit) of our target number `a` is a power of 2 such that we have\\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\\n //\\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\\n // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\\n //\\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\\n uint256 result = 1 << (log2(a) >> 1);\\n\\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\\n // into the expected uint128 result.\\n unchecked {\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n result = (result + a / result) >> 1;\\n return min(result, a / result);\\n }\\n }\\n\\n /**\\n * @notice Calculates sqrt(a), following the selected rounding direction.\\n */\\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = sqrt(a);\\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 2, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 128;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 64;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 32;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 16;\\n }\\n if (value >> 8 > 0) {\\n value >>= 8;\\n result += 8;\\n }\\n if (value >> 4 > 0) {\\n value >>= 4;\\n result += 4;\\n }\\n if (value >> 2 > 0) {\\n value >>= 2;\\n result += 2;\\n }\\n if (value >> 1 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log2(value);\\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 10, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >= 10 ** 64) {\\n value /= 10 ** 64;\\n result += 64;\\n }\\n if (value >= 10 ** 32) {\\n value /= 10 ** 32;\\n result += 32;\\n }\\n if (value >= 10 ** 16) {\\n value /= 10 ** 16;\\n result += 16;\\n }\\n if (value >= 10 ** 8) {\\n value /= 10 ** 8;\\n result += 8;\\n }\\n if (value >= 10 ** 4) {\\n value /= 10 ** 4;\\n result += 4;\\n }\\n if (value >= 10 ** 2) {\\n value /= 10 ** 2;\\n result += 2;\\n }\\n if (value >= 10 ** 1) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log10(value);\\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\\n }\\n }\\n\\n /**\\n * @dev Return the log in base 256, rounded down, of a positive value.\\n * Returns 0 if given 0.\\n *\\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\\n */\\n function log256(uint256 value) internal pure returns (uint256) {\\n uint256 result = 0;\\n unchecked {\\n if (value >> 128 > 0) {\\n value >>= 128;\\n result += 16;\\n }\\n if (value >> 64 > 0) {\\n value >>= 64;\\n result += 8;\\n }\\n if (value >> 32 > 0) {\\n value >>= 32;\\n result += 4;\\n }\\n if (value >> 16 > 0) {\\n value >>= 16;\\n result += 2;\\n }\\n if (value >> 8 > 0) {\\n result += 1;\\n }\\n }\\n return result;\\n }\\n\\n /**\\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\\n * Returns 0 if given 0.\\n */\\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\\n unchecked {\\n uint256 result = log256(value);\\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\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) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message 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(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0x58b21219689909c4f8339af00813760337f7e2e7f169a97fe49e2896dcfb3b9a\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard signed math utilities missing in the Solidity language.\\n */\\nlibrary SignedMath {\\n /**\\n * @dev Returns the largest of two signed numbers.\\n */\\n function max(int256 a, int256 b) internal pure returns (int256) {\\n return a > b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two signed numbers.\\n */\\n function min(int256 a, int256 b) internal pure returns (int256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two signed numbers without overflow.\\n * The result is rounded towards zero.\\n */\\n function average(int256 a, int256 b) internal pure returns (int256) {\\n // Formula from the book \\\"Hacker's Delight\\\"\\n int256 x = (a & b) + ((a ^ b) >> 1);\\n return x + (int256(uint256(x) >> 255) & (a ^ b));\\n }\\n\\n /**\\n * @dev Returns the absolute unsigned value of a signed value.\\n */\\n function abs(int256 n) internal pure returns (uint256) {\\n unchecked {\\n // must be unchecked in order to support `n = type(int256).min`\\n return uint256(n >= 0 ? n : -n);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)\\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for managing\\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\\n * types.\\n *\\n * Sets have the following properties:\\n *\\n * - Elements are added, removed, and checked for existence in constant time\\n * (O(1)).\\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\\n *\\n * ```solidity\\n * contract Example {\\n * // Add the library methods\\n * using EnumerableSet for EnumerableSet.AddressSet;\\n *\\n * // Declare a set state variable\\n * EnumerableSet.AddressSet private mySet;\\n * }\\n * ```\\n *\\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\\n * and `uint256` (`UintSet`) are supported.\\n *\\n * [WARNING]\\n * ====\\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\\n * unusable.\\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\\n *\\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\\n * array of EnumerableSet.\\n * ====\\n */\\nlibrary EnumerableSet {\\n // To implement this library for multiple types with as little code\\n // repetition as possible, we write it in terms of a generic Set type with\\n // bytes32 values.\\n // The Set implementation uses private functions, and user-facing\\n // implementations (such as AddressSet) are just wrappers around the\\n // underlying Set.\\n // This means that we can only create new EnumerableSets for types that fit\\n // in bytes32.\\n\\n struct Set {\\n // Storage of set values\\n bytes32[] _values;\\n // Position of the value in the `values` array, plus 1 because index 0\\n // means a value is not in the set.\\n mapping(bytes32 => uint256) _indexes;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function _add(Set storage set, bytes32 value) private returns (bool) {\\n if (!_contains(set, value)) {\\n set._values.push(value);\\n // The value is stored at length-1, but we add 1 to all indexes\\n // and use 0 as a sentinel value\\n set._indexes[value] = set._values.length;\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function _remove(Set storage set, bytes32 value) private returns (bool) {\\n // We read and store the value's index to prevent multiple reads from the same storage slot\\n uint256 valueIndex = set._indexes[value];\\n\\n if (valueIndex != 0) {\\n // Equivalent to contains(set, value)\\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\\n // the array, and then remove the last element (sometimes called as 'swap and pop').\\n // This modifies the order of the array, as noted in {at}.\\n\\n uint256 toDeleteIndex = valueIndex - 1;\\n uint256 lastIndex = set._values.length - 1;\\n\\n if (lastIndex != toDeleteIndex) {\\n bytes32 lastValue = set._values[lastIndex];\\n\\n // Move the last value to the index where the value to delete is\\n set._values[toDeleteIndex] = lastValue;\\n // Update the index for the moved value\\n set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex\\n }\\n\\n // Delete the slot where the moved value was stored\\n set._values.pop();\\n\\n // Delete the index for the deleted slot\\n delete set._indexes[value];\\n\\n return true;\\n } else {\\n return false;\\n }\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\\n return set._indexes[value] != 0;\\n }\\n\\n /**\\n * @dev Returns the number of values on the set. O(1).\\n */\\n function _length(Set storage set) private view returns (uint256) {\\n return set._values.length;\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\\n return set._values[index];\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function _values(Set storage set) private view returns (bytes32[] memory) {\\n return set._values;\\n }\\n\\n // Bytes32Set\\n\\n struct Bytes32Set {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _add(set._inner, value);\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\\n return _remove(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\\n return _contains(set._inner, value);\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(Bytes32Set storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\\n return _at(set._inner, index);\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n bytes32[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // AddressSet\\n\\n struct AddressSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(AddressSet storage set, address value) internal returns (bool) {\\n return _add(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(AddressSet storage set, address value) internal returns (bool) {\\n return _remove(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(AddressSet storage set, address value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(uint256(uint160(value))));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(AddressSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\\n return address(uint160(uint256(_at(set._inner, index))));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(AddressSet storage set) internal view returns (address[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n address[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n\\n // UintSet\\n\\n struct UintSet {\\n Set _inner;\\n }\\n\\n /**\\n * @dev Add a value to a set. O(1).\\n *\\n * Returns true if the value was added to the set, that is if it was not\\n * already present.\\n */\\n function add(UintSet storage set, uint256 value) internal returns (bool) {\\n return _add(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Removes a value from a set. O(1).\\n *\\n * Returns true if the value was removed from the set, that is if it was\\n * present.\\n */\\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\\n return _remove(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns true if the value is in the set. O(1).\\n */\\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\\n return _contains(set._inner, bytes32(value));\\n }\\n\\n /**\\n * @dev Returns the number of values in the set. O(1).\\n */\\n function length(UintSet storage set) internal view returns (uint256) {\\n return _length(set._inner);\\n }\\n\\n /**\\n * @dev Returns the value stored at position `index` in the set. O(1).\\n *\\n * Note that there are no guarantees on the ordering of values inside the\\n * array, and it may change when more values are added or removed.\\n *\\n * Requirements:\\n *\\n * - `index` must be strictly less than {length}.\\n */\\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\\n return uint256(_at(set._inner, index));\\n }\\n\\n /**\\n * @dev Return the entire set in an array\\n *\\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\\n */\\n function values(UintSet storage set) internal view returns (uint256[] memory) {\\n bytes32[] memory store = _values(set._inner);\\n uint256[] memory result;\\n\\n /// @solidity memory-safe-assembly\\n assembly {\\n result := store\\n }\\n\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\"},\"lib/pyth-sdk-solidity/IPyth.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\nimport \\\"./PythStructs.sol\\\";\\nimport \\\"./IPythEvents.sol\\\";\\n\\n/// @title Consume prices from the Pyth Network (https://pyth.network/).\\n/// @dev Please refer to the guidance at https://docs.pyth.network/consumers/best-practices for how to consume prices safely.\\n/// @author Pyth Data Association\\ninterface IPyth is IPythEvents {\\n /// @notice Returns the period (in seconds) that a price feed is considered valid since its publish time\\n function getValidTimePeriod() external view returns (uint validTimePeriod);\\n\\n /// @notice Returns the price and confidence interval.\\n /// @dev Reverts if the price has not been updated within the last `getValidTimePeriod()` seconds.\\n /// @param id The Pyth Price Feed ID of which to fetch the price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price and confidence interval.\\n /// @dev Reverts if the EMA price is not available.\\n /// @param id The Pyth Price Feed ID of which to fetch the EMA price and confidence interval.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPrice(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price of a price feed without any sanity checks.\\n /// @dev This function returns the most recent price update in this contract without any recency checks.\\n /// This function is unsafe as the returned price update may be arbitrarily far in the past.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getPrice` or `getPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the price that is no older than `age` seconds of the current time.\\n /// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks.\\n /// @dev This function returns the same price as `getEmaPrice` in the case where the price is available.\\n /// However, if the price is not recent this function returns the latest available price.\\n ///\\n /// The returned price can be from arbitrarily far in the past; this function makes no guarantees that\\n /// the returned price is recent or useful for any particular application.\\n ///\\n /// Users of this function should check the `publishTime` in the price to ensure that the returned price is\\n /// sufficiently recent for their application. If you are considering using this function, it may be\\n /// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceUnsafe(\\n bytes32 id\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds\\n /// of the current time.\\n /// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in\\n /// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently\\n /// recently.\\n /// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.\\n function getEmaPriceNoOlderThan(\\n bytes32 id,\\n uint age\\n ) external view returns (PythStructs.Price memory price);\\n\\n /// @notice Update price feeds with given update messages.\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n /// Prices will be updated if they are more recent than the current stored prices.\\n /// The call will succeed even if the update is not the most recent.\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n function updatePriceFeeds(bytes[] calldata updateData) external payable;\\n\\n /// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is\\n /// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the\\n /// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n /// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime\\n /// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have\\n /// a newer or equal publish time than the given publish time, it will reject the transaction to save gas.\\n /// Otherwise, it calls updatePriceFeeds method to update the prices.\\n ///\\n /// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]`\\n function updatePriceFeedsIfNecessary(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64[] calldata publishTimes\\n ) external payable;\\n\\n /// @notice Returns the required fee to update an array of price updates.\\n /// @param updateData Array of price update data.\\n /// @return feeAmount The required fee in Wei.\\n function getUpdateFee(\\n bytes[] calldata updateData\\n ) external view returns (uint feeAmount);\\n\\n /// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published\\n /// within `minPublishTime` and `maxPublishTime`.\\n ///\\n /// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price;\\n /// otherwise, please consider using `updatePriceFeeds`. This method does not store the price updates on-chain.\\n ///\\n /// This method requires the caller to pay a fee in wei; the required fee can be computed by calling\\n /// `getUpdateFee` with the length of the `updateData` array.\\n ///\\n ///\\n /// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is\\n /// no update for any of the given `priceIds` within the given time range.\\n /// @param updateData Array of price update data.\\n /// @param priceIds Array of price ids.\\n /// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.\\n /// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.\\n /// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).\\n function parsePriceFeedUpdates(\\n bytes[] calldata updateData,\\n bytes32[] calldata priceIds,\\n uint64 minPublishTime,\\n uint64 maxPublishTime\\n ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);\\n}\\n\",\"keccak256\":\"0x949c65c65fea0578c09a6fc068e09ed1165adede2c835984cefcb25d76de1de2\",\"license\":\"Apache-2.0\"},\"lib/pyth-sdk-solidity/IPythEvents.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/// @title IPythEvents contains the events that Pyth contract emits.\\n/// @dev This interface can be used for listening to the updates for off-chain and testing purposes.\\ninterface IPythEvents {\\n /// @dev Emitted when the price feed with `id` has received a fresh update.\\n /// @param id The Pyth Price Feed ID.\\n /// @param publishTime Publish time of the given price update.\\n /// @param price Price of the given price update.\\n /// @param conf Confidence interval of the given price update.\\n event PriceFeedUpdate(\\n bytes32 indexed id,\\n uint64 publishTime,\\n int64 price,\\n uint64 conf\\n );\\n\\n /// @dev Emitted when a batch price update is processed successfully.\\n /// @param chainId ID of the source chain that the batch price update comes from.\\n /// @param sequenceNumber Sequence number of the batch price update.\\n event BatchPriceFeedUpdate(uint16 chainId, uint64 sequenceNumber);\\n}\\n\",\"keccak256\":\"0x048a35526c2e77d107d43ba336f1dcf31f64cef25ba429ae1f7a0fbc11c23320\",\"license\":\"Apache-2.0\"},\"lib/pyth-sdk-solidity/PythStructs.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\ncontract PythStructs {\\n // A price with a degree of uncertainty, represented as a price +- a confidence interval.\\n //\\n // The confidence interval roughly corresponds to the standard error of a normal distribution.\\n // Both the price and confidence are stored in a fixed-point numeric representation,\\n // `x * (10^expo)`, where `expo` is the exponent.\\n //\\n // Please refer to the documentation at https://docs.pyth.network/consumers/best-practices for how\\n // to how this price safely.\\n struct Price {\\n // Price\\n int64 price;\\n // Confidence interval around the price\\n uint64 conf;\\n // Price exponent\\n int32 expo;\\n // Unix timestamp describing when the price was published\\n uint publishTime;\\n }\\n\\n // PriceFeed represents a current aggregate price from pyth publisher feeds.\\n struct PriceFeed {\\n // The price ID.\\n bytes32 id;\\n // Latest available price\\n Price price;\\n // Latest available exponentially-weighted moving average price\\n Price emaPrice;\\n }\\n}\\n\",\"keccak256\":\"0x95ff0a6d64517348ef604b8bcf246b561a9445d7e607b8f48491c617cfda9b65\",\"license\":\"Apache-2.0\"},\"src/RONRegistrarController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { Initializable } from \\\"@openzeppelin/contracts/proxy/utils/Initializable.sol\\\";\\nimport { ReentrancyGuard } from \\\"@openzeppelin/contracts/security/ReentrancyGuard.sol\\\";\\nimport { AccessControlEnumerable } from \\\"@openzeppelin/contracts/access/AccessControlEnumerable.sol\\\";\\nimport { IPublicResolver } from \\\"./interfaces/resolvers/IPublicResolver.sol\\\";\\nimport {\\n INSUnified,\\n INameChecker,\\n INSDomainPrice,\\n INSReverseRegistrar,\\n IRONRegistrarController\\n} from \\\"./interfaces/IRONRegistrarController.sol\\\";\\nimport { LibString } from \\\"./libraries/LibString.sol\\\";\\nimport { LibRNSDomain } from \\\"./libraries/LibRNSDomain.sol\\\";\\nimport { RONTransferHelper } from \\\"./libraries/transfers/RONTransferHelper.sol\\\";\\n\\n/**\\n * @title RONRegistrarController\\n * @notice Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol\\n * @dev A registrar controller for registering and renewing names at fixed cost.\\n */\\ncontract RONRegistrarController is\\n Pausable,\\n Initializable,\\n ReentrancyGuard,\\n AccessControlEnumerable,\\n IRONRegistrarController\\n{\\n using LibString for string;\\n using LibRNSDomain for string;\\n\\n /// @dev The minimum domain name's length\\n uint8 public constant MIN_DOMAIN_LENGTH = 3;\\n /// @inheritdoc IRONRegistrarController\\n bytes32 public constant PAUSER_ROLE = keccak256(\\\"PAUSER_ROLE\\\");\\n /// @inheritdoc IRONRegistrarController\\n bytes32 public constant OPERATOR_ROLE = keccak256(\\\"OPERATOR_ROLE\\\");\\n\\n /// @dev Gap for upgradeability.\\n uint256[50] private ____gap;\\n\\n /// @dev Minimum duration between commitment and registration in second(s).\\n uint256 internal _minCommitmentAge;\\n /// @dev Maximum duration between commitment and registration in second(s).\\n uint256 internal _maxCommitmentAge;\\n /// @dev Min registration duration\\n uint256 internal _minRegistrationDuration;\\n\\n /// @dev The treasury address.\\n address payable internal _treasury;\\n /// @dev The rns unified contract.\\n INSUnified internal _rnsUnified;\\n /// @dev The namechecker contract.\\n INameChecker internal _nameChecker;\\n /// @dev The price oracle.\\n INSDomainPrice internal _priceOracle;\\n /// @dev The reverse registrar contract.\\n INSReverseRegistrar internal _reverseRegistrar;\\n\\n /// @dev Mapping from commitment hash => timestamp that commitment made.\\n mapping(bytes32 commitment => uint256 timestamp) internal _committedAt;\\n /// @dev Mapping id => owner => flag indicating whether the owner is whitelisted to buy protected name\\n mapping(uint256 id => mapping(address owner => bool)) internal _protectedNamesWhitelisted;\\n\\n modifier onlyAvailable(string memory name) {\\n _requireAvailable(name);\\n _;\\n }\\n\\n constructor() payable {\\n _disableInitializers();\\n }\\n\\n function initialize(\\n address admin,\\n address pauser,\\n address payable treasury,\\n uint256 maxCommitmentAge,\\n uint256 minCommitmentAge,\\n uint256 minRegistrationDuration,\\n INSUnified rnsUnified,\\n INameChecker nameChecker,\\n INSDomainPrice priceOracle,\\n INSReverseRegistrar reverseRegistrar\\n ) external initializer {\\n _setupRole(PAUSER_ROLE, pauser);\\n _setupRole(DEFAULT_ADMIN_ROLE, admin);\\n\\n _setPriceOracle(priceOracle);\\n _setMinRegistrationDuration(minRegistrationDuration);\\n _setCommitmentAge(minCommitmentAge, maxCommitmentAge);\\n\\n _treasury = treasury;\\n _rnsUnified = rnsUnified;\\n _nameChecker = nameChecker;\\n _reverseRegistrar = reverseRegistrar;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function pause() external onlyRole(PAUSER_ROLE) {\\n _pause();\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function unpause() external onlyRole(PAUSER_ROLE) {\\n _unpause();\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getMinRegistrationDuration() public view returns (uint256) {\\n return _minRegistrationDuration;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function rentPrice(string memory name, uint64 duration) public view returns (uint256 usdPrice, uint256 ronPrice) {\\n (INSDomainPrice.UnitPrice memory basePrice, INSDomainPrice.UnitPrice memory tax) =\\n _priceOracle.getRenewalFee(name, duration);\\n usdPrice = basePrice.usd + tax.usd;\\n ronPrice = basePrice.ron + tax.ron;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function valid(string memory name) public view returns (bool) {\\n return name.strlen() >= MIN_DOMAIN_LENGTH && !_nameChecker.forbidden(name);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function available(string memory name) public view returns (bool) {\\n return valid(name) && _rnsUnified.available(computeId(name));\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function computeCommitment(\\n string memory name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) public view onlyAvailable(name) returns (bytes32) {\\n if (data.length != 0 && resolver == address(0)) revert ResolverRequiredWhenDataSupplied();\\n return keccak256(abi.encode(computeId(name), owner, duration, secret, resolver, data, reverseRecord));\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function computeId(string memory name) public pure returns (uint256 id) {\\n return LibRNSDomain.toId(LibRNSDomain.RON_ID, name);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function commit(bytes32 commitment) external whenNotPaused {\\n if (_committedAt[commitment] + _maxCommitmentAge >= block.timestamp) revert UnexpiredCommitmentExists(commitment);\\n _committedAt[commitment] = block.timestamp;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setMinRegistrationDuration(uint256 duration) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setMinRegistrationDuration(duration);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function register(\\n string memory name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable whenNotPaused nonReentrant {\\n uint256 id = computeId(name);\\n if (_rnsUnified.getRecord(id).mut.protected) revert ErrRequestedForProtectedName(name);\\n\\n bytes32 commitHash = computeCommitment({\\n name: name,\\n owner: owner,\\n duration: duration,\\n secret: secret,\\n resolver: resolver,\\n data: data,\\n reverseRecord: reverseRecord\\n });\\n _validateCommitment(duration, commitHash);\\n\\n (uint256 usdPrice, uint256 ronPrice) = _handlePrice(name, duration);\\n _register(name, owner, duration, resolver, data, reverseRecord, usdPrice, ronPrice);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function renew(string calldata name, uint64 duration) external payable whenNotPaused nonReentrant {\\n (, uint256 ronPrice) = rentPrice(name, duration);\\n if (msg.value < ronPrice) revert InsufficientValue();\\n uint256 remainAmount = msg.value - ronPrice;\\n\\n uint256 id = computeId(name);\\n uint64 expiryTime = _rnsUnified.renew(id, duration);\\n emit NameRenewed(name, id, ronPrice, expiryTime);\\n\\n if (remainAmount != 0) RONTransferHelper.safeTransfer(payable(_msgSender()), remainAmount);\\n _transferRONToTreasury();\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function registerProtectedName(\\n string memory name,\\n address owner,\\n uint64 duration,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable whenNotPaused nonReentrant onlyAvailable(name) {\\n if (!available(name)) revert NameNotAvailable(name);\\n uint256 id = computeId(name);\\n bool protected = _rnsUnified.getRecord(id).mut.protected;\\n bool whitelisted = _protectedNamesWhitelisted[id][owner];\\n if (!protected || !whitelisted) revert ErrInvalidRegisterProtectedName(name, owner, protected, whitelisted);\\n\\n (uint256 usdPrice, uint256 ronPrice) = _handlePrice(name, duration);\\n _register(name, owner, duration, resolver, data, reverseRecord, usdPrice, ronPrice);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function bulkWhitelistProtectedNames(uint256[] calldata ids, address[] calldata owners, bool status)\\n external\\n onlyRole(OPERATOR_ROLE)\\n {\\n uint256 length = ids.length;\\n if (length == 0 || length != owners.length) revert InvalidArrayLength();\\n\\n for (uint256 i; i < length;) {\\n _protectedNamesWhitelisted[ids[i]][owners[i]] = status;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n\\n emit ProtectedNamesWhitelisted(_msgSender(), ids, owners, status);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getWhitelistProtectedNameStatus(uint256 id, address owner) external view returns (bool status) {\\n return _protectedNamesWhitelisted[id][owner];\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setTreasury(address payable addr) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _treasury = addr;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setCommitmentAge(minCommitmentAge, maxCommitmentAge);\\n }\\n\\n /**\\n * @dev Internal function to update the commitment age range.\\n * Requirements:\\n * - The `maxCommitmentAge` must be less than or equal to the current block timestamp.\\n * - The `maxCommitmentAge` must be greater than the `minCommitmentAge`.\\n * Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\\n * @param minCommitmentAge The minimum commitment age in seconds.\\n * @param maxCommitmentAge The maximum commitment age in seconds.\\n */\\n function _setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) internal {\\n if (maxCommitmentAge > block.timestamp) revert MaxCommitmentAgeTooHigh();\\n if (maxCommitmentAge <= minCommitmentAge) revert MaxCommitmentAgeTooLow();\\n\\n _minCommitmentAge = minCommitmentAge;\\n _maxCommitmentAge = maxCommitmentAge;\\n\\n emit CommitmentAgeUpdated(_msgSender(), minCommitmentAge, maxCommitmentAge);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function setPriceOracle(INSDomainPrice priceOracle) external onlyRole(DEFAULT_ADMIN_ROLE) {\\n _setPriceOracle(priceOracle);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getTreasury() external view returns (address) {\\n return _treasury;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getCommitmentAgeRange() external view returns (uint256 minCommitmentAge, uint256 maxCommitmentAge) {\\n return (_minCommitmentAge, _maxCommitmentAge);\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getRNSUnified() external view returns (INSUnified) {\\n return _rnsUnified;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getPriceOracle() external view returns (INSDomainPrice) {\\n return _priceOracle;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getNameChecker() external view returns (INameChecker) {\\n return _nameChecker;\\n }\\n\\n /**\\n * @inheritdoc IRONRegistrarController\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar) {\\n return _reverseRegistrar;\\n }\\n\\n /**\\n * @dev Validates commitment.\\n *\\n * Requirements:\\n * - The duration must larger than or equal to minimum registration duration.\\n * - The passed duration must in a valid range.\\n */\\n function _validateCommitment(uint64 duration, bytes32 commitment) internal {\\n if (duration < _minRegistrationDuration) revert DurationTooShort(duration);\\n\\n uint256 passedDuration = block.timestamp - _committedAt[commitment];\\n if (passedDuration < _minCommitmentAge) revert CommitmentTooNew(commitment);\\n if (_maxCommitmentAge < passedDuration) revert CommitmentTooOld(commitment);\\n\\n delete _committedAt[commitment];\\n }\\n\\n /**\\n * @dev Sets minimum registration duration.\\n * Emits a {MinRegistrationDurationUpdated} event indicating the successful update of the registration duration.\\n */\\n function _setMinRegistrationDuration(uint256 duration) internal {\\n _minRegistrationDuration = duration;\\n emit MinRegistrationDurationUpdated(_msgSender(), duration);\\n }\\n\\n /**\\n * @dev Sets data into resolver address contract.\\n */\\n function _setRecords(address resolverAddress, uint256 id, bytes[] calldata data) internal {\\n IPublicResolver(resolverAddress).multicallWithNodeCheck(bytes32(id), data);\\n }\\n\\n /**\\n * @dev Sets data into reverse registrar.\\n */\\n function _setReverseRecord(string memory name, address owner) internal {\\n _reverseRegistrar.setNameForAddr(owner, string.concat(name, \\\".ron\\\"));\\n }\\n\\n /**\\n * @dev Helper method to take fee into treasury address.\\n */\\n function _transferRONToTreasury() internal {\\n RONTransferHelper.safeTransfer(_treasury, address(this).balance);\\n }\\n\\n /**\\n * @dev Helper method to take renewal fee of a name.\\n */\\n function _handlePrice(string memory name, uint64 duration) internal returns (uint256 usdPrice, uint256 ronPrice) {\\n (usdPrice, ronPrice) = rentPrice(name, duration);\\n if (msg.value < ronPrice) revert InsufficientValue();\\n\\n unchecked {\\n uint256 remainAmount = msg.value - ronPrice;\\n if (remainAmount != 0) RONTransferHelper.safeTransfer(payable(_msgSender()), remainAmount);\\n }\\n\\n _transferRONToTreasury();\\n }\\n\\n /**\\n * @dev Helper method to register a name for owner.\\n *\\n * Emits an event {NameRegistered}.\\n */\\n function _register(\\n string memory name,\\n address owner,\\n uint64 duration,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord,\\n uint256 usdPrice,\\n uint256 ronPrice\\n ) internal {\\n (uint64 expiryTime, uint256 id) = _rnsUnified.mint(LibRNSDomain.RON_ID, name, resolver, owner, duration);\\n if (data.length != 0) _setRecords(resolver, id, data);\\n if (reverseRecord) _setReverseRecord(name, owner);\\n emit NameRegistered(name, id, owner, ronPrice, usdPrice, expiryTime);\\n }\\n\\n /**\\n * @dev Helper method to update RNSDomainPrice contract.\\n *\\n * Emits an event {DomainPriceUpdated}.\\n */\\n function _setPriceOracle(INSDomainPrice priceOracle) internal {\\n _priceOracle = priceOracle;\\n emit DomainPriceUpdated(_msgSender(), priceOracle);\\n }\\n\\n /**\\n * @dev Helper method to check if a domain name is available for register.\\n */\\n function _requireAvailable(string memory name) internal view {\\n if (!available(name)) revert NameNotAvailable(name);\\n }\\n}\\n\",\"keccak256\":\"0x5394d6c84b2adc85a27a6ee4e0cdfe0b3b09ba3293c363a5e520414d72a543c5\",\"license\":\"MIT\"},\"src/interfaces/IMulticallable.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\n/**\\n * @notice To multi-call to a specified contract which has multicall interface:\\n *\\n * ```solidity\\n * interface IMock is IMulticallable {\\n * function foo() external;\\n * function bar() external;\\n * }\\n *\\n * bytes[] memory calldatas = new bytes[](2);\\n * calldatas[0] = abi.encodeCall(IMock.foo,());\\n * calldatas[1] = abi.encodeCall(IMock.bar,());\\n * IMock(target).multicall(calldatas);\\n * ```\\n */\\ninterface IMulticallable {\\n /**\\n * @dev Executes bulk action to the original contract.\\n * Reverts if there is a single call failed.\\n *\\n * @param data The calldata to original contract.\\n *\\n */\\n function multicall(bytes[] calldata data) external returns (bytes[] memory results);\\n\\n /**\\n * @dev Executes bulk action to the original contract.\\n *\\n * @param requireSuccess Flag to indicating whether the contract reverts if there is a single call failed.\\n * @param data The calldata to original contract.\\n *\\n */\\n function tryMulticall(bool requireSuccess, bytes[] calldata data) external returns (bytes[] memory results);\\n}\\n\",\"keccak256\":\"0x0e76578b0efeafdf33915d77d3f98145ac2f74cdd311db03a9b94d4aa566d107\",\"license\":\"UNLICENSED\"},\"src/interfaces/INSDomainPrice.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { PeriodScaler } from \\\"../libraries/math/PeriodScalingUtils.sol\\\";\\nimport { IPyth } from \\\"@pythnetwork/IPyth.sol\\\";\\n\\ninterface INSDomainPrice {\\n error InvalidArrayLength();\\n error RenewalFeeIsNotOverriden();\\n error ExceedAuctionDomainExpiry();\\n\\n struct RenewalFee {\\n uint256 labelLength;\\n uint256 fee;\\n }\\n\\n struct UnitPrice {\\n uint256 usd;\\n uint256 ron;\\n }\\n\\n /// @dev Emitted when the renewal reservation ratio is updated.\\n event TaxRatioUpdated(address indexed operator, uint256 indexed ratio);\\n /// @dev Emitted when the maximum length of renewal fee is updated.\\n event MaxRenewalFeeLengthUpdated(address indexed operator, uint256 indexed maxLength);\\n /// @dev Emitted when the renew fee is updated.\\n event RenewalFeeByLengthUpdated(address indexed operator, uint256 indexed labelLength, uint256 renewalFee);\\n /// @dev Emitted when the renew fee of a domain is overridden. Value of `inverseRenewalFee` is 0 when not overridden.\\n event RenewalFeeOverridingUpdated(address indexed operator, bytes32 indexed labelHash, uint256 inverseRenewalFee);\\n\\n /// @dev Emitted when the domain price is updated.\\n event DomainPriceUpdated(\\n address indexed operator, bytes32 indexed labelHash, uint256 price, bytes32 indexed proofHash, uint256 setType\\n );\\n /// @dev Emitted when the rule to rescale domain price is updated.\\n event DomainPriceScaleRuleUpdated(address indexed operator, uint192 ratio, uint64 period);\\n\\n /// @dev Emitted when the Pyth Oracle config is updated.\\n event PythOracleConfigUpdated(\\n address indexed operator, IPyth indexed pyth, uint256 maxAcceptableAge, bytes32 indexed pythIdForRONUSD\\n );\\n\\n /**\\n * @dev Returns the Pyth oracle config.\\n */\\n function getPythOracleConfig() external view returns (IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD);\\n\\n /**\\n * @dev Sets the Pyth oracle config.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {PythOracleConfigUpdated}.\\n */\\n function setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) external;\\n\\n /**\\n * @dev Returns the percentage to scale from domain price each period.\\n */\\n function getScaleDownRuleForDomainPrice() external view returns (PeriodScaler memory dpScaleRule);\\n\\n /**\\n * @dev Sets the percentage to scale from domain price each period.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {DomainPriceScaleRuleUpdated}.\\n *\\n * @notice Applies for the business rule: -x% each y seconds.\\n */\\n function setScaleDownRuleForDomainPrice(PeriodScaler calldata scaleRule) external;\\n\\n /**\\n * @dev Returns the renewal fee by lengths.\\n */\\n function getRenewalFeeByLengths() external view returns (RenewalFee[] memory renewalFees);\\n\\n /**\\n * @dev Sets the renewal fee by lengths\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits events {RenewalFeeByLengthUpdated}.\\n * Emits an event {MaxRenewalFeeLengthUpdated} optionally.\\n */\\n function setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) external;\\n\\n /**\\n * @dev Returns tax ratio.\\n */\\n function getTaxRatio() external view returns (uint256 taxRatio);\\n\\n /**\\n * @dev Sets renewal reservation ratio.\\n *\\n * Requirements:\\n * - The method caller is admin.\\n *\\n * Emits an event {TaxRatioUpdated}.\\n */\\n function setTaxRatio(uint256 ratio) external;\\n\\n /**\\n * @dev Return the domain price.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n */\\n function getDomainPrice(string memory label) external view returns (uint256 usdPrice, uint256 ronPrice);\\n\\n /**\\n * @dev Returns the renewal fee in USD and RON.\\n * @param label The domain label to register (Eg, 'foo' for 'foo.ron').\\n * @param duration Amount of second(s).\\n */\\n function getRenewalFee(string calldata label, uint256 duration)\\n external\\n view\\n returns (UnitPrice memory basePrice, UnitPrice memory tax);\\n\\n /**\\n * @dev Returns the renewal fee of a label. Reverts if not overridden.\\n * @notice This method is to help developers check the domain renewal fee overriding. Consider using method\\n * {getRenewalFee} instead for full handling of renewal fees.\\n */\\n function getOverriddenRenewalFee(string memory label) external view returns (uint256 usdFee);\\n\\n /**\\n * @dev Bulk override renewal fees.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {RenewalFeeOverridingUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param usdPrices Array of prices in USD. Leave 2^256 - 1 to remove overriding.\\n */\\n function bulkOverrideRenewalFees(bytes32[] calldata lbHashes, uint256[] calldata usdPrices) external;\\n\\n /**\\n * @dev Bulk try to set domain prices. Returns a boolean array indicating whether domain prices at the corresponding\\n * indexes if set or not.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n * - The price should be larger than current domain price or it will not be updated.\\n *\\n * Emits events {DomainPriceUpdated} optionally.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkTrySetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external returns (bool[] memory updated);\\n\\n /**\\n * @dev Bulk override domain prices.\\n *\\n * Requirements:\\n * - The method caller is operator.\\n * - The input array lengths must be larger than 0 and the same.\\n *\\n * Emits events {DomainPriceUpdated}.\\n *\\n * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron')\\n * @param ronPrices Array of prices in (W)RON token.\\n * @param proofHashes Array of proof hashes.\\n * @param setTypes Array of update types from the operator service.\\n */\\n function bulkSetDomainPrice(\\n bytes32[] calldata lbHashes,\\n uint256[] calldata ronPrices,\\n bytes32[] calldata proofHashes,\\n uint256[] calldata setTypes\\n ) external;\\n\\n /**\\n * @dev Returns the converted amount from USD to RON.\\n */\\n function convertUSDToRON(uint256 usdAmount) external view returns (uint256 ronAmount);\\n\\n /**\\n * @dev Returns the converted amount from RON to USD.\\n */\\n function convertRONToUSD(uint256 ronAmount) external view returns (uint256 usdAmount);\\n\\n /**\\n * @dev Value equals to keccak256(\\\"OPERATOR_ROLE\\\").\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the overrider role.\\n */\\n function OVERRIDER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%]\\n */\\n function MAX_PERCENTAGE() external pure returns (uint64);\\n\\n /**\\n * @dev Decimal for USD.\\n */\\n function USD_DECIMALS() external pure returns (uint8);\\n}\\n\",\"keccak256\":\"0xcb57a6120bbe131d1c2a2ae72ce6a33ab95f5da4cae85e9cd1731496e26db7b1\",\"license\":\"MIT\"},\"src/interfaces/INSReverseRegistrar.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\nimport { INameResolver } from \\\"./resolvers/INameResolver.sol\\\";\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\n\\n/// @dev See https://eips.ethereum.org/EIPS/eip-181#registrar\\ninterface IERC181 {\\n /**\\n * @dev Claims the name hex(addr) + '.addr.reverse' for addr.\\n *\\n * @param addr The address to set as the addr of the reverse record in INS.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claim(address addr) external returns (uint256 id);\\n\\n /**\\n * @dev Claims the name hex(owner) + '.addr.reverse' for owner and sets resolver.\\n *\\n * @param addr The address to set as the owner of the reverse record in INS.\\n * @param resolver The address of the resolver to set; 0 to leave unchanged.\\n * @return id The INS node hash of the reverse record.\\n */\\n function claimWithResolver(address addr, address resolver) external returns (uint256 id);\\n\\n /**\\n * @dev Sets the name record for the reverse INS record associated with the calling account. First updates the\\n * resolver to the default reverse resolver if necessary.\\n *\\n * @param name The name to set for this address.\\n * @return The INS node hash of the reverse record.\\n */\\n function setName(string memory name) external returns (uint256);\\n}\\n\\ninterface INSReverseRegistrar is IERC181, IERC165 {\\n /// @dev Error: The provided id is not child node of `ADDR_REVERSE_ID`\\n error InvalidId();\\n /// @dev Error: The contract is not authorized for minting or modifying domain hex(addr) + '.addr.reverse'.\\n error InvalidConfig();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: The provided resolver address is null.\\n error NullAssignment();\\n\\n /// @dev Emitted when reverse node is claimed.\\n event ReverseClaimed(address indexed addr, uint256 indexed id);\\n /// @dev Emitted when the default resolver is changed.\\n event DefaultResolverChanged(INameResolver indexed resolver);\\n\\n /**\\n * @dev Returns the controller role.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns default resolver.\\n */\\n function getDefaultResolver() external view returns (INameResolver);\\n\\n /**\\n * @dev Returns RNSUnified contract.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Sets default resolver.\\n *\\n * Requirement:\\n *\\n * - The method caller must be admin.\\n *\\n * Emitted an event {DefaultResolverChanged}.\\n *\\n */\\n function setDefaultResolver(INameResolver resolver) external;\\n\\n /**\\n * @dev Same as {IERC181-setName}.\\n */\\n function setNameForAddr(address addr, string memory name) external returns (uint256 id);\\n\\n /**\\n * @dev Returns address that the reverse node resolves for.\\n * Eg. node namehash('{addr}.addr.reverse') will always resolve for `addr`.\\n */\\n function getAddress(uint256 id) external view returns (address);\\n\\n /**\\n * @dev Returns the id hash for a given account's reverse records.\\n * @param addr The address to hash\\n * @return The INS node hash.\\n */\\n function computeId(address addr) external pure returns (uint256);\\n}\\n\",\"keccak256\":\"0x3b88e9ea1dd7c128244b5d0c69cee9dcadcb16b05a7e13416cc7b95c071b60a4\",\"license\":\"MIT\"},\"src/interfaces/INSUnified.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { IERC721Metadata } from \\\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\\\";\\nimport { IAccessControlEnumerable } from \\\"@openzeppelin/contracts/access/IAccessControlEnumerable.sol\\\";\\nimport { ModifyingIndicator } from \\\"../types/ModifyingIndicator.sol\\\";\\n\\ninterface INSUnified is IAccessControlEnumerable, IERC721Metadata {\\n /// @dev Error: The provided token id is expired.\\n error Expired();\\n /// @dev Error: The provided token id is unexists.\\n error Unexists();\\n /// @dev Error: The provided token id's depth level is greater than 3.\\n error ThirdLevelDomainUnallowed();\\n /// @dev Error: The provided id expiry is greater than parent id expiry.\\n error ExceedParentExpiry();\\n /// @dev Error: The provided name is unavailable for registration.\\n error Unavailable();\\n /// @dev Error: The sender lacks the necessary permissions.\\n error Unauthorized();\\n /// @dev Error: Missing controller role required for modification.\\n error MissingControllerRole();\\n /// @dev Error: Attempting to set an immutable field, which cannot be modified.\\n error CannotSetImmutableField();\\n /// @dev Error: Missing protected settler role required for modification.\\n error MissingProtectedSettlerRole();\\n /// @dev Error: Attempting to set an expiry time that is not larger than the previous one.\\n error ExpiryTimeMustBeLargerThanTheOldOne();\\n /// @dev Error: The provided name must be registered or is in a grace period.\\n error NameMustBeRegisteredOrInGracePeriod();\\n\\n /**\\n * | Fields\\\\Idc | Modifying Indicator |\\n * | ---------- | ------------------- |\\n * | depth | 0b00000001 |\\n * | parentId | 0b00000010 |\\n * | label | 0b00000100 |\\n */\\n struct ImmutableRecord {\\n // The level-th of a domain.\\n uint8 depth;\\n // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron')\\n uint256 parentId;\\n // The label of a domain. Eg, label is vip for domain vip.duke.ron\\n string label;\\n }\\n\\n /**\\n * | Fields\\\\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender |\\n * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- |\\n * | resolver | 0b00001000 | x | | x |\\n * | owner | 0b00010000 | x | | x |\\n * | expiry | 0b00100000 | x | | |\\n * | protected | 0b01000000 | | x | |\\n * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender.\\n */\\n struct MutableRecord {\\n // The resolver address.\\n address resolver;\\n // The record owner. This field must equal to the owner of token.\\n address owner;\\n // Expiry timestamp.\\n uint64 expiry;\\n // Flag indicating whether the token is protected or not.\\n bool protected;\\n }\\n\\n struct Record {\\n ImmutableRecord immut;\\n MutableRecord mut;\\n }\\n\\n /// @dev Emitted when a base URI is updated.\\n event BaseURIUpdated(address indexed operator, string newURI);\\n /// @dev Emitted when the grace period for all domain is updated.\\n event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod);\\n\\n /**\\n * @dev Emitted when the record of node is updated.\\n * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right\\n * to left) needs to be updated.\\n * @param record The updated fields.\\n */\\n event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record);\\n\\n /**\\n * @dev Returns the controller role.\\n * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}.\\n */\\n function CONTROLLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the protected setter role.\\n * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`.\\n */\\n function PROTECTED_SETTLER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the reservation role.\\n * @notice Never expire for token owner has this role.\\n */\\n function RESERVATION_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the max expiry value.\\n */\\n function MAX_EXPIRY() external pure returns (uint64);\\n\\n /**\\n * @dev Returns the name hash output of a domain.\\n */\\n function namehash(string memory domain) external pure returns (bytes32 node);\\n\\n /**\\n * @dev Returns true if the specified name is available for registration.\\n * Note: Only available after passing the grace period.\\n */\\n function available(uint256 id) external view returns (bool);\\n\\n /**\\n * @dev Returns the grace period in second(s).\\n * Note: This period affects the availability of the domain.\\n */\\n function getGracePeriod() external view returns (uint64);\\n\\n /**\\n * @dev Returns the total minted ids.\\n * Note: Burning id will not affect `totalMinted`.\\n */\\n function totalMinted() external view returns (uint256);\\n\\n /**\\n * @dev Sets the grace period in second(s).\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Note: This period affects the availability of the domain.\\n */\\n function setGracePeriod(uint64) external;\\n\\n /**\\n * @dev Sets the base uri.\\n *\\n * Requirements:\\n * - The method caller must be contract owner.\\n *\\n */\\n function setBaseURI(string calldata baseTokenURI) external;\\n\\n /**\\n * @dev Mints token for subnode.\\n *\\n * Requirements:\\n * - The token must be available.\\n * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n *\\n * @param parentId The parent node to mint or create subnode.\\n * @param label The domain label. Eg, label is duke for domain duke.ron.\\n * @param resolver The resolver address.\\n * @param owner The token owner.\\n * @param duration Duration in second(s) to expire. Leave 0 to set as parent.\\n */\\n function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration)\\n external\\n returns (uint64 expiryTime, uint256 id);\\n\\n /**\\n * @dev Returns all record of a domain.\\n * Reverts if the token is non existent.\\n */\\n function getRecord(uint256 id) external view returns (Record memory record);\\n\\n /**\\n * @dev Returns the domain name of id.\\n */\\n function getDomain(uint256 id) external view returns (string memory domain);\\n\\n /**\\n * @dev Returns whether the requester is able to modify the record based on the updated index.\\n * Note: This method strictly follows the permission of struct {MutableRecord}.\\n */\\n function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator)\\n external\\n view\\n returns (bool, bytes4 error);\\n\\n /**\\n * @dev Sets record of existing token. Update operation for {Record.mut}.\\n *\\n * Requirements:\\n * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external;\\n\\n /**\\n * @dev Reclaims ownership. Update operation for {Record.mut.owner}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function reclaim(uint256 id, address owner) external;\\n\\n /**\\n * @dev Renews token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller should have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function renew(uint256 id, uint64 duration) external returns (uint64 expiry);\\n\\n /**\\n * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}.\\n *\\n * Requirements:\\n * - The method caller must have controller role.\\n *\\n * Emits an event {RecordUpdated}.\\n */\\n function setExpiry(uint256 id, uint64 expiry) external;\\n\\n /**\\n * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}.\\n *\\n * Requirements:\\n * - The method caller must have protected setter role.\\n *\\n * Emits events {RecordUpdated}.\\n */\\n function bulkSetProtected(uint256[] calldata ids, bool protected) external;\\n}\\n\",\"keccak256\":\"0x98e2e77490d7fd6d87a8e9800223bb2f60a33e7338e2f65f64a3aed4737c035c\",\"license\":\"MIT\"},\"src/interfaces/INameChecker.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\n/**\\n * @title INameChecker\\n * @dev The INameChecker interface provides functions for managing and checking substrings and forbidden words in strings.\\n */\\ninterface INameChecker {\\n /**\\n * @dev Emitted when the word range is updated.\\n * @param operator The address that updated the word range.\\n * @param min The minimum word length allowed.\\n * @param max The maximum word length allowed.\\n */\\n event WordRangeUpdated(address indexed operator, uint8 min, uint8 max);\\n\\n /**\\n * @dev Emitted when the forbidden words are updated.\\n * @param operator The address that updated the forbidden words list.\\n * @param wordCount The number of words in the list.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n event ForbiddenWordsUpdated(address indexed operator, uint256 wordCount, bool shouldForbid);\\n\\n /**\\n * @dev Returns an array of all substrings of a given string.\\n * @param str The input string to analyze.\\n * @return subStrings An array of all substrings.\\n */\\n function getAllSubStrings(string calldata str) external view returns (string[] memory subStrings);\\n\\n /**\\n * @dev Returns the total number of substrings for a given string length, as well as the minimum and maximum allowed word lengths.\\n * @param strlen The length of the input string.\\n * @return total The total number of substrings.\\n * @return min The minimum word length allowed.\\n * @return max The maximum word length allowed.\\n */\\n function totalSubString(uint256 strlen) external view returns (uint256 total, uint256 min, uint256 max);\\n\\n /**\\n * @dev Sets a list of forbidden words and specifies whether they should be forbidden.\\n * @param packedWords An array of packed word representations.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n function setForbiddenWords(uint256[] calldata packedWords, bool shouldForbid) external;\\n\\n /**\\n * @dev Sets a list of forbidden words and specifies whether they should be forbidden.\\n * @param words An array of raw words in string representations.\\n * @param shouldForbid Boolean indicating whether the specified words should be forbidden.\\n */\\n function setForbiddenWords(string[] calldata words, bool shouldForbid) external;\\n\\n /**\\n * @dev Sets the minimum and maximum word lengths allowed.\\n * @param min The minimum word length.\\n * @param max The maximum word length.\\n */\\n function setWordRange(uint8 min, uint8 max) external;\\n\\n /**\\n * @dev Retrieves the current minimum and maximum word lengths allowed.\\n * @return min The minimum word length allowed.\\n * @return max The maximum word length allowed.\\n */\\n function getWordRange() external view returns (uint8 min, uint8 max);\\n\\n /**\\n * @notice Checks if a given name contains any forbidden characters or blacklisted words.\\n * @param name The string to check.\\n * @return true if the name contains forbidden characters or blacklisted words, false otherwise.\\n */\\n function forbidden(string calldata name) external view returns (bool);\\n\\n /**\\n * @notice Checks if a given name contains any blacklisted words.\\n * @param name The string to check.\\n * @return true if the name contains blacklisted words, false otherwise.\\n */\\n function containsBlacklistedWord(string calldata name) external view returns (bool);\\n\\n /**\\n * @notice Checks if a given name contains any invalid characters.\\n * requirements:\\n * - all characters in name must in range [a-z] or [0-9].\\n * @param name The string to check.\\n * @return true if the name contains invalid characters, false otherwise.\\n */\\n function containsInvalidCharacter(string calldata name) external pure returns (bool);\\n\\n /**\\n * @dev Packs a string into a single word representation.\\n * @param str The string to be packed.\\n * @notice Returns `uint256(0)` if the length is zero or greater than 31.\\n * @return packed The packed value of the input string.\\n */\\n function pack(string memory str) external pure returns (uint256 packed);\\n\\n /**\\n * @dev Packs an array of strings into their single word representations.\\n * @param strs The array of strings to be packed.\\n * @notice Returns an array of packed values, along with the minimum and maximum string lengths.\\n * @return packeds An array containing the packed values of the input strings.\\n */\\n function packBulk(string[] memory strs) external pure returns (uint256[] memory packeds);\\n}\\n\",\"keccak256\":\"0x9f2b9f08f8d60f565f93925ad64353f01feaad671440d865f45008d1304d4794\",\"license\":\"MIT\"},\"src/interfaces/IRONRegistrarController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"./INSUnified.sol\\\";\\nimport { INSDomainPrice } from \\\"./INSDomainPrice.sol\\\";\\nimport { INameChecker } from \\\"./INameChecker.sol\\\";\\nimport { INSReverseRegistrar } from \\\"./INSReverseRegistrar.sol\\\";\\n\\n/**\\n * @title IRONRegistrarController\\n * @dev Interface for the Registrar Controller contract that manages the registration, renewal, and commitment of RNS\\n * names.\\n */\\ninterface IRONRegistrarController {\\n /// @dev Error: The provided commitment timestamp is too new for registration.\\n error CommitmentTooNew(bytes32 commitment);\\n /// @dev Error: The provided commitment timestamp is too old for registration.\\n error CommitmentTooOld(bytes32 commitment);\\n /// @dev Error: The requested name is not available for registration.\\n error NameNotAvailable(string name);\\n /// @dev Error: The requested duration for registration is too short.\\n error DurationTooShort(uint64 duration);\\n /// @dev Error: A resolver is required when additional data is supplied during registration.\\n error ResolverRequiredWhenDataSupplied();\\n /// @dev Error: An unexpired commitment already exists for the given commitment.\\n error UnexpiredCommitmentExists(bytes32 commitment);\\n /// @dev Error: Insufficient value (RON) provided for registration.\\n error InsufficientValue();\\n /// @dev Error: The sender is not authorized for the given RNS node.\\n error Unauthorized(bytes32 node);\\n /// @dev Error: The maximum commitment age is set too low.\\n error MaxCommitmentAgeTooLow();\\n /// @dev Error: The maximum commitment age is set too high.\\n error MaxCommitmentAgeTooHigh();\\n /// @dev Thrown when some one requests for protected names\\n error ErrRequestedForProtectedName(string name);\\n /// @dev Thrown when received invalid params for registering protected name\\n error ErrInvalidRegisterProtectedName(string name, address requestOwner, bool nameProtected, bool ownerWhitelisted);\\n /// @dev Thrown when received invalid array length\\n error InvalidArrayLength();\\n\\n /**\\n * @dev Emitted when the min registration duration is updated.\\n * @param operator The address of the operator who triggered the update.\\n * @param duration The new duration in seconds.\\n */\\n event MinRegistrationDurationUpdated(address indexed operator, uint256 duration);\\n\\n /**\\n * @dev Emitted when RNSDomainPrice contract is updated.\\n * @param operator The address of the operator who triggered the update.\\n * @param newDomainPrice The new duration domain price contract.\\n */\\n event DomainPriceUpdated(address indexed operator, INSDomainPrice newDomainPrice);\\n\\n /**\\n * @dev Emitted when the commitment age range is updated.\\n * @param operator The address of the operator who triggered the update.\\n * @param minCommitmentAge The new minimum commitment age in seconds.\\n * @param maxCommitmentAge The new maximum commitment age in seconds.\\n */\\n event CommitmentAgeUpdated(address indexed operator, uint256 minCommitmentAge, uint256 maxCommitmentAge);\\n\\n /**\\n * @dev Emitted when a new name is successfully registered.\\n * @param name The registered name.\\n * @param id The namehash of the registered name.\\n * @param owner The owner of the registered name.\\n * @param ronPrice The cost of the registration in RON.\\n * @param usdPrice The cost of the registration in USD.\\n * @param expires The expiration timestamp of the registration.\\n */\\n event NameRegistered(\\n string name, uint256 indexed id, address indexed owner, uint256 ronPrice, uint256 usdPrice, uint64 expires\\n );\\n\\n /**\\n * @dev Emitted when a name is renewed.\\n * @param name The renewed name.\\n * @param id The namehash of the registered name.\\n * @param cost The cost of renewal.\\n * @param expires The new expiration timestamp after renewal.\\n */\\n event NameRenewed(string name, uint256 indexed id, uint256 cost, uint64 expires);\\n\\n /**\\n * @dev Emitted the whitelist status is updated for the owners of the protected names.\\n * @param operator The address of the operator who triggered the update.\\n */\\n event ProtectedNamesWhitelisted(address indexed operator, uint256[] ids, address[] owners, bool status);\\n\\n /**\\n * @dev Retrieves the rent price for a given name and duration.\\n * @param name The name for which to calculate the rent price.\\n * @param duration The duration of the rent.\\n * @return usdPrice rent price in usd.\\n * @return ronPrice rent price in ron.\\n */\\n function rentPrice(string memory name, uint64 duration) external view returns (uint256 usdPrice, uint256 ronPrice);\\n\\n /**\\n * @dev Calculate the corresponding id given RON_ID and name.\\n */\\n function computeId(string memory name) external pure returns (uint256 id);\\n\\n /**\\n * @dev Checks if a name is valid.\\n * @param name The name to check validity for.\\n * @return A boolean indicating whether the name is available.\\n */\\n function valid(string memory name) external view returns (bool);\\n\\n /**\\n * @dev Checks if a name is available for registration.\\n * @param name The name to check availability for.\\n * @return A boolean indicating whether the name is available.\\n */\\n function available(string memory name) external returns (bool);\\n\\n /**\\n * @dev Generates the commitment hash for a registration.\\n * @param name The name to be registered.\\n * @param owner The owner of the name.\\n * @param duration The duration of the registration.\\n * @param secret The secret used for the commitment.\\n * @param resolver The resolver contract address.\\n * @param data Additional data associated with the registration.\\n * @param reverseRecord Whether to use reverse record for additional data.\\n * @return The commitment hash.\\n */\\n function computeCommitment(\\n string memory name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external view returns (bytes32);\\n\\n /**\\n * @dev Commits to a registration using the commitment hash.\\n * @param commitment The commitment hash.\\n */\\n function commit(bytes32 commitment) external;\\n\\n /**\\n * @dev Registers a new name.\\n * @param name The name to be registered.\\n * @param owner The owner of the name.\\n * @param duration The duration of the registration.\\n * @param secret The secret used for the commitment.\\n * @param resolver The resolver contract address.\\n * @param data Additional data associated with the registration.\\n * @param reverseRecord Whether to use reverse record for additional data.\\n */\\n function register(\\n string calldata name,\\n address owner,\\n uint64 duration,\\n bytes32 secret,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable;\\n\\n /**\\n * @dev Renews an existing name registration.\\n * @param name The name to be renewed.\\n * @param duration The duration of the renewal.\\n */\\n function renew(string calldata name, uint64 duration) external payable;\\n\\n /**\\n * @dev Registers a protected name.\\n *\\n * Requirements:\\n * - The owner is whitelisted for registering.\\n */\\n function registerProtectedName(\\n string memory name,\\n address owner,\\n uint64 duration,\\n address resolver,\\n bytes[] calldata data,\\n bool reverseRecord\\n ) external payable;\\n\\n /**\\n * @dev Updates min registration duration.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function setMinRegistrationDuration(uint256 duration) external;\\n\\n /**\\n * @dev Sets the minimum and maximum commitment ages.\\n *\\n * Requirements:\\n * - Caller must have the DEFAULT_ADMIN_ROLE.\\n * - The `maxCommitmentAge` must be less than or equal to the current block timestamp.\\n * - The `maxCommitmentAge` must be greater than the `minCommitmentAge`.\\n *\\n * Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range.\\n *\\n * @param minCommitmentAge The minimum commitment age in seconds.\\n * @param maxCommitmentAge The maximum commitment age in seconds.\\n */\\n function setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) external;\\n\\n /**\\n * @dev Bulk (de)whitelist for buying protected names.\\n *\\n * Requirements:\\n * - The method caller is contract operator.\\n *\\n * Emits an event {ProtectedNamesWhitelisted}.\\n */\\n function bulkWhitelistProtectedNames(uint256[] calldata ids, address[] calldata owners, bool status) external;\\n\\n /**\\n * @dev Returns the whitelist status for registering protected name.\\n */\\n function getWhitelistProtectedNameStatus(uint256 id, address owner) external view returns (bool status);\\n\\n /**\\n * @dev Updates treasury address.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function setTreasury(address payable) external;\\n\\n /**\\n * @dev Updates price oracle address.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n */\\n function setPriceOracle(INSDomainPrice) external;\\n\\n /**\\n * @dev Returns the treasury address.\\n */\\n function getTreasury() external view returns (address);\\n\\n /**\\n * @dev Pauses the registrar controller's functionality.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function pause() external;\\n\\n /**\\n * @dev Unpauses the registrar controller's functionality.\\n *\\n * Requirements:\\n * - The caller must have the admin role.\\n *\\n */\\n function unpause() external;\\n\\n /**\\n * @dev Returns the role identifier for the pauser role.\\n */\\n function PAUSER_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the operator role.\\n */\\n function OPERATOR_ROLE() external pure returns (bytes32);\\n\\n /**\\n * @dev Returns the threshold for valid name length.\\n */\\n function MIN_DOMAIN_LENGTH() external view returns (uint8);\\n\\n /**\\n * @dev Returns the minimum registration duration.\\n */\\n function getMinRegistrationDuration() external view returns (uint256);\\n\\n /**\\n * @dev Returns the range of commitment ages allowed.\\n */\\n function getCommitmentAgeRange() external view returns (uint256 minCommitmentAge, uint256 maxCommitmentAge);\\n\\n /**\\n * @dev Returns the INSUnified contract associated with this controller.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Returns the INSDomainPrice contract associated with this controller.\\n */\\n function getPriceOracle() external view returns (INSDomainPrice);\\n\\n /**\\n * @dev Returns the INameChecker contract associated with this controller.\\n */\\n function getNameChecker() external view returns (INameChecker);\\n\\n /**\\n * @dev Returns the IReverseRegistrar contract associated with this controller.\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar);\\n}\\n\",\"keccak256\":\"0x553ded8a480060073e6274dadb390c441d4caa968df64d2f65b2401ffd422b00\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IABIResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.0;\\n\\ninterface IABIResolver {\\n /// Thrown when the input content type is invalid.\\n error InvalidContentType();\\n\\n /// @dev Emitted when the ABI is changed.\\n event ABIChanged(bytes32 indexed node, uint256 indexed contentType);\\n\\n /**\\n * @dev Sets the ABI associated with an INS node. Nodes may have one ABI of each content type. To remove an ABI, set it\\n * to the empty string.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n * - The content type must be powers of 2.\\n *\\n * Emitted an event {ABIChanged}.\\n *\\n * @param node The node to update.\\n * @param contentType The content type of the ABI\\n * @param data The ABI data.\\n */\\n function setABI(bytes32 node, uint256 contentType, bytes calldata data) external;\\n\\n /**\\n * @dev Returns the ABI associated with an INS node.\\n * Defined in EIP-205, see more at https://eips.ethereum.org/EIPS/eip-205\\n *\\n * @param node The INS node to query\\n * @param contentTypes A bitwise OR of the ABI formats accepted by the caller.\\n * @return contentType The content type of the return value\\n * @return data The ABI data\\n */\\n function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256 contentType, bytes memory data);\\n}\\n\",\"keccak256\":\"0xc701a6cafa883d6607b5916dfb4277099f39c450930d776da36a7acc2b2498c0\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IAddressResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.0;\\n\\ninterface IAddressResolver {\\n /// @dev Emitted when an address of a node is changed.\\n event AddrChanged(bytes32 indexed node, address addr);\\n\\n /**\\n * @dev Sets the address associated with an INS node.\\n *\\n * Requirement:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {AddrChanged}.\\n *\\n * @param node The node to update.\\n * @param addr The address to set.\\n */\\n function setAddr(bytes32 node, address addr) external;\\n\\n /**\\n * @dev Returns the address associated with an INS node.\\n * @param node The INS node to query.\\n * @return The associated address.\\n */\\n function addr(bytes32 node) external view returns (address payable);\\n}\\n\",\"keccak256\":\"0xb914cb4a730d20c867805fd148e7574c6565bc6c0a129825cdf3cf4f2f7f72d0\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IContentHashResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IContentHashResolver {\\n /// @dev Emitted when the content hash of a node is changed.\\n event ContentHashChanged(bytes32 indexed node, bytes hash);\\n\\n /**\\n * @dev Sets the content hash associated with an INS node.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {ContentHashChanged}.\\n *\\n * @param node The node to update.\\n * @param hash The content hash to set\\n */\\n function setContentHash(bytes32 node, bytes calldata hash) external;\\n\\n /**\\n * @dev Returns the content hash associated with an INS node.\\n * @param node The INS node to query.\\n * @return The associated content hash.\\n */\\n function contentHash(bytes32 node) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0xfbdc7211a813065e5cc2bdd3640c13f01c87b5f31fda86e562b0525628602c00\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IDNSRecordResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4;\\n\\ninterface IDNSRecordResolver {\\n /// @dev Emitted whenever a given node/name/resource's RRSET is updated.\\n event DNSRecordChanged(bytes32 indexed node, bytes name, uint16 resource, bytes record);\\n /// @dev Emitted whenever a given node/name/resource's RRSET is deleted.\\n event DNSRecordDeleted(bytes32 indexed node, bytes name, uint16 resource);\\n\\n /**\\n * @dev Set one or more DNS records. Records are supplied in wire-format. Records with the same node/name/resource\\n * must be supplied one after the other to ensure the data is updated correctly. For example, if the data was\\n * supplied:\\n * a.example.com IN A 1.2.3.4\\n * a.example.com IN A 5.6.7.8\\n * www.example.com IN CNAME a.example.com.\\n * then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was\\n * supplied:\\n * a.example.com IN A 1.2.3.4\\n * www.example.com IN CNAME a.example.com.\\n * a.example.com IN A 5.6.7.8\\n * then this would store the first A record, the CNAME, then the second A record which would overwrite the first.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * @param node the namehash of the node for which to set the records\\n * @param data the DNS wire format records to set\\n */\\n function setDNSRecords(bytes32 node, bytes calldata data) external;\\n\\n /**\\n * @dev Obtain a DNS record.\\n * @param node the namehash of the node for which to fetch the record\\n * @param name the keccak-256 hash of the fully-qualified name for which to fetch the record\\n * @param resource the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\\n * @return the DNS record in wire format if present, otherwise empty\\n */\\n function dnsRecord(bytes32 node, bytes32 name, uint16 resource) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x2341266d70b60f5bb666c066aaf1fdb35be81277bcdd04e3bf93ee774ae4d2f6\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IDNSZoneResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.8.4;\\n\\ninterface IDNSZoneResolver {\\n /// @dev Emitted whenever a given node's zone hash is updated.\\n event DNSZonehashChanged(bytes32 indexed node, bytes lastzonehash, bytes zonehash);\\n\\n /**\\n * @dev Sets the hash for the zone.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {DNSZonehashChanged}.\\n *\\n * @param node The node to update.\\n * @param hash The zonehash to set\\n */\\n function setZonehash(bytes32 node, bytes calldata hash) external;\\n\\n /**\\n * @dev Obtains the hash for the zone.\\n * @param node The INS node to query.\\n * @return The associated contenthash.\\n */\\n function zonehash(bytes32 node) external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x42aa5409a184740461e7477b8894d7549fd3908596bb7dba9adab59b8ff4ebed\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IInterfaceResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IInterfaceResolver {\\n /// @dev Emitted when the interface of node is changed.\\n event InterfaceChanged(bytes32 indexed node, bytes4 indexed interfaceID, address implementer);\\n\\n /**\\n * @dev Sets an interface associated with a name.\\n * Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * @param node The node to update.\\n * @param interfaceID The EIP 165 interface ID.\\n * @param implementer The address of a contract that implements this interface for this node.\\n */\\n function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external;\\n\\n /**\\n * @dev Returns the address of a contract that implements the specified interface for this name.\\n *\\n * If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`.\\n * If `addr()` is set, a contract exists at that address, and that contract implements EIP165 and returns `true` for\\n * the specified interfaceID, its address will be returned.\\n *\\n * @param node The INS node to query.\\n * @param interfaceID The EIP 165 interface ID to check for.\\n * @return The address that implements this interface, or 0 if the interface is unsupported.\\n */\\n function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address);\\n}\\n\",\"keccak256\":\"0xb4a1867d5cb899bfdc2e812c4bf9b9d3d14b34e0f72cbeffb4e018f8659b13fc\",\"license\":\"MIT\"},\"src/interfaces/resolvers/INameResolver.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.0;\\n\\ninterface INameResolver {\\n /// @dev Emitted when a node name is changed.\\n event NameChanged(bytes32 indexed node, string name);\\n\\n /**\\n * @dev Sets the name associated with an INS node, for reverse records.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {NameChanged}.\\n *\\n * @param node The node to update.\\n */\\n function setName(bytes32 node, string calldata newName) external;\\n\\n /**\\n * @dev Returns the name associated with an INS node, for reverse records.\\n * @param node The INS node to query.\\n * @return The associated name.\\n */\\n function name(bytes32 node) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xf3dbbe3238d5f1e491a43dbccbd74755fcd325b5c6aef6b7f0819684bd1f9da3\",\"license\":\"UNLICENSED\"},\"src/interfaces/resolvers/IPublicKeyResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ninterface IPublicKeyResolver {\\n struct PublicKey {\\n bytes32 x;\\n bytes32 y;\\n }\\n\\n /// @dev Emitted when a node public key is changed.\\n event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);\\n\\n /**\\n * @dev Sets the SECP256k1 public key associated with an INS node.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {PubkeyChanged}.\\n *\\n * @param node The INS node to query\\n * @param x the X coordinate of the curve point for the public key.\\n * @param y the Y coordinate of the curve point for the public key.\\n */\\n function setPubkey(bytes32 node, bytes32 x, bytes32 y) external;\\n\\n /**\\n * @dev Returns the SECP256k1 public key associated with an INS node.\\n * Defined in EIP 619.\\n *\\n * @param node The INS node to query\\n * @return x The X coordinate of the curve point for the public key.\\n * @return y The Y coordinate of the curve point for the public key.\\n */\\n function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y);\\n}\\n\",\"keccak256\":\"0x2644fd8d9b951c2aca5521ba519b68d4f3de19b731dae7907b6372e1ceac07ae\",\"license\":\"MIT\"},\"src/interfaces/resolvers/IPublicResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport { INSUnified } from \\\"../INSUnified.sol\\\";\\nimport { INSReverseRegistrar } from \\\"../INSReverseRegistrar.sol\\\";\\nimport { IABIResolver } from \\\"./IABIResolver.sol\\\";\\nimport { IAddressResolver } from \\\"./IAddressResolver.sol\\\";\\nimport { IContentHashResolver } from \\\"./IContentHashResolver.sol\\\";\\nimport { IDNSRecordResolver } from \\\"./IDNSRecordResolver.sol\\\";\\nimport { IDNSZoneResolver } from \\\"./IDNSZoneResolver.sol\\\";\\nimport { IInterfaceResolver } from \\\"./IInterfaceResolver.sol\\\";\\nimport { INameResolver } from \\\"./INameResolver.sol\\\";\\nimport { IPublicKeyResolver } from \\\"./IPublicKeyResolver.sol\\\";\\nimport { ITextResolver } from \\\"./ITextResolver.sol\\\";\\nimport { IMulticallable } from \\\"../IMulticallable.sol\\\";\\n\\ninterface IPublicResolver is\\n IABIResolver,\\n IAddressResolver,\\n IContentHashResolver,\\n IDNSRecordResolver,\\n IDNSZoneResolver,\\n IInterfaceResolver,\\n INameResolver,\\n IPublicKeyResolver,\\n ITextResolver,\\n IMulticallable\\n{\\n /// @dev See {IERC1155-ApprovalForAll}. Logged when an operator is added or removed.\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /// @dev Logged when a delegate is approved or an approval is revoked.\\n event Approved(address owner, bytes32 indexed node, address indexed delegate, bool indexed approved);\\n\\n /**\\n * @dev Checks if an account is authorized to manage the resolution of a specific RNS node.\\n * @param node The RNS node.\\n * @param account The account address being checked for authorization.\\n * @return A boolean indicating whether the account is authorized.\\n */\\n function isAuthorized(bytes32 node, address account) external view returns (bool);\\n\\n /**\\n * @dev Retrieves the RNSUnified associated with this resolver.\\n */\\n function getRNSUnified() external view returns (INSUnified);\\n\\n /**\\n * @dev Retrieves the reverse registrar associated with this resolver.\\n */\\n function getReverseRegistrar() external view returns (INSReverseRegistrar);\\n\\n /**\\n * @dev This function provides an extra security check when called from privileged contracts (such as\\n * RONRegistrarController) that can set records on behalf of the node owners.\\n *\\n * Reverts if the node is not null but calldata is mismatched.\\n */\\n function multicallWithNodeCheck(bytes32 node, bytes[] calldata data) external returns (bytes[] memory results);\\n}\\n\",\"keccak256\":\"0x97b6f762f25a4dc3f6398a76bbcb7d3922f5f440ee9e0541c83579e09a8f87b7\",\"license\":\"MIT\"},\"src/interfaces/resolvers/ITextResolver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ninterface ITextResolver {\\n /// @dev Emitted when a node text is changed.\\n event TextChanged(bytes32 indexed node, string indexed indexedKey, string key, string value);\\n\\n /**\\n * @dev Sets the text data associated with an INS node and key.\\n *\\n * Requirements:\\n * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator\\n * {ModifyingIndicator.USER_FIELDS_INDICATOR}.\\n *\\n * Emits an event {TextChanged}.\\n *\\n * @param node The node to update.\\n * @param key The key to set.\\n * @param value The text data value to set.\\n */\\n function setText(bytes32 node, string calldata key, string calldata value) external;\\n\\n /**\\n * Returns the text data associated with an INS node and key.\\n * @param node The INS node to query.\\n * @param key The text data key to query.\\n * @return The associated text data.\\n */\\n function text(bytes32 node, string calldata key) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x05ce1760d3a16d99614b1a46c11308238e1ecd8be23f081fac146bbc58961ecf\",\"license\":\"MIT\"},\"src/libraries/LibRNSDomain.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nlibrary LibRNSDomain {\\n /// @dev Value equals to namehash('ron')\\n uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688;\\n /// @dev Value equals to namehash('addr.reverse')\\n uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n /**\\n * @dev Calculate the corresponding id given parentId and label.\\n */\\n function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(0x0, parentId)\\n mstore(0x20, keccak256(add(label, 32), mload(label)))\\n id := keccak256(0x0, 64)\\n }\\n }\\n\\n /**\\n * @dev Calculates the hash of the label.\\n */\\n function hashLabel(string memory label) internal pure returns (bytes32 hashed) {\\n assembly (\\\"memory-safe\\\") {\\n hashed := keccak256(add(label, 32), mload(label))\\n }\\n }\\n\\n /**\\n * @dev Calculate the RNS namehash of a str.\\n */\\n function namehash(string memory str) internal pure returns (bytes32 hashed) {\\n // notice: this method is case-sensitive, ensure the string is lowercased before calling this method\\n assembly (\\\"memory-safe\\\") {\\n // load str length\\n let len := mload(str)\\n // returns bytes32(0x0) if length is zero\\n if iszero(iszero(len)) {\\n let hashedLen\\n // compute pointer to str[0]\\n let head := add(str, 32)\\n // compute pointer to str[length - 1]\\n let tail := add(head, sub(len, 1))\\n // cleanup dirty bytes if contains any\\n mstore(0x0, 0)\\n // loop backwards from `tail` to `head`\\n for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } {\\n // check if `i` is `head`\\n let isHead := eq(i, head)\\n // check if `str[i-1]` is \\\".\\\"\\n // `0x2e` == bytes1(\\\".\\\")\\n let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e)\\n if or(isHead, isDotNext) {\\n // size = distance(length, i) - hashedLength + 1\\n let size := add(sub(sub(tail, i), hashedLen), 1)\\n mstore(0x20, keccak256(i, size))\\n mstore(0x0, keccak256(0x0, 64))\\n // skip \\\".\\\" thereby + 1\\n hashedLen := add(hashedLen, add(size, 1))\\n }\\n }\\n }\\n hashed := mload(0x0)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x715029b2b420c6ec00bc1f939b837acf45d247fde8426089575b0e7b5e84518b\",\"license\":\"MIT\"},\"src/libraries/LibString.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nlibrary LibString {\\n error InvalidStringLength();\\n error InvalidCharacter(bytes1 char);\\n\\n /// @dev Lookup constant for method. See more detail at https://eips.ethereum.org/EIPS/eip-181\\n bytes32 private constant LOOKUP = 0x3031323334353637383961626364656600000000000000000000000000000000;\\n\\n /**\\n * @dev Returns the length of a given string\\n *\\n * @param s The string to measure the length of\\n * @return The length of the input string\\n */\\n function strlen(string memory s) internal pure returns (uint256) {\\n unchecked {\\n uint256 i;\\n uint256 len;\\n uint256 bytelength = bytes(s).length;\\n for (len; i < bytelength; len++) {\\n bytes1 b = bytes(s)[i];\\n if (b < 0x80) {\\n i += 1;\\n } else if (b < 0xE0) {\\n i += 2;\\n } else if (b < 0xF0) {\\n i += 3;\\n } else if (b < 0xF8) {\\n i += 4;\\n } else if (b < 0xFC) {\\n i += 5;\\n } else {\\n i += 6;\\n }\\n }\\n return len;\\n }\\n }\\n\\n /**\\n * @dev Converts an address to string.\\n */\\n function toString(address addr) internal pure returns (string memory stringifiedAddr) {\\n assembly (\\\"memory-safe\\\") {\\n mstore(stringifiedAddr, 40)\\n let ptr := add(stringifiedAddr, 0x20)\\n for { let i := 40 } gt(i, 0) { } {\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n\\n i := sub(i, 1)\\n mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP))\\n addr := div(addr, 0x10)\\n }\\n }\\n }\\n\\n /**\\n * @dev Converts string to address.\\n * Reverts if the string length is not equal to 40.\\n */\\n function parseAddr(string memory stringifiedAddr) internal pure returns (address) {\\n unchecked {\\n if (bytes(stringifiedAddr).length != 40) revert InvalidStringLength();\\n uint160 addr;\\n for (uint256 i = 0; i < 40; i += 2) {\\n addr *= 0x100;\\n addr += uint160(hexCharToDec(bytes(stringifiedAddr)[i])) * 0x10;\\n addr += hexCharToDec(bytes(stringifiedAddr)[i + 1]);\\n }\\n return address(addr);\\n }\\n }\\n\\n /**\\n * @dev Converts a hex char (0-9, a-f, A-F) to decimal number.\\n * Reverts if the char is invalid.\\n */\\n function hexCharToDec(bytes1 c) private pure returns (uint8 r) {\\n unchecked {\\n if ((bytes1(\\\"a\\\") <= c) && (c <= bytes1(\\\"f\\\"))) r = uint8(c) - 87;\\n else if ((bytes1(\\\"A\\\") <= c) && (c <= bytes1(\\\"F\\\"))) r = uint8(c) - 55;\\n else if ((bytes1(\\\"0\\\") <= c) && (c <= bytes1(\\\"9\\\"))) r = uint8(c) - 48;\\n else revert InvalidCharacter(c);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d456b294f0e44ccaabded43a3d96db6270761a167535155a762fe41e968b905\",\"license\":\"MIT\"},\"src/libraries/math/PeriodScalingUtils.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\nimport { PowMath } from \\\"./PowMath.sol\\\";\\n\\nstruct PeriodScaler {\\n uint192 ratio;\\n uint64 period;\\n}\\n\\nlibrary LibPeriodScaler {\\n using PowMath for uint256;\\n\\n error PeriodNumOverflowedUint16(uint256 n);\\n\\n /// @dev The precision number of calculation is 2\\n uint256 public constant MAX_PERCENTAGE = 100_00;\\n\\n /**\\n * @dev Scales down the input value `v` for a percentage of `self.ratio` each period `self.period`.\\n * Reverts if the passed period is larger than 2^16 - 1.\\n *\\n * @param self The period scaler with specific period and ratio\\n * @param v The original value to scale based on the rule `self`\\n * @param maxR The maximum value of 100%. Eg, if the `self.ratio` in range of [0;100_00] reflexes 0-100%, this param\\n * must be 100_00\\n * @param dur The passed duration in the same uint with `self.period`\\n */\\n function scaleDown(PeriodScaler memory self, uint256 v, uint64 maxR, uint256 dur) internal pure returns (uint256 rs) {\\n uint256 n = dur / uint256(self.period);\\n if (n == 0 || self.ratio == 0) return v;\\n if (maxR == self.ratio) return 0;\\n if (n > type(uint16).max) revert PeriodNumOverflowedUint16(n);\\n\\n unchecked {\\n // Normalizes the input ratios to be in range of [0;MAX_PERCENTAGE]\\n uint256 p = Math.mulDiv(maxR - self.ratio, MAX_PERCENTAGE, maxR);\\n return v.mulDiv({ y: p, d: MAX_PERCENTAGE, n: uint16(n) });\\n }\\n }\\n}\\n\",\"keccak256\":\"0x502d004fbd130a99f3f1e6685aebff9f47300565fbc5a65b4912824ea5eb5b78\",\"license\":\"MIT\"},\"src/libraries/math/PowMath.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Math } from \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nlibrary PowMath {\\n using Math for uint256;\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Negative exponent n for x*10^n.\\n */\\n function exp10(uint256 x, int32 n) internal pure returns (uint256) {\\n if (n < 0) {\\n return x / 10 ** uint32(-n);\\n } else if (n > 0) {\\n return x * 10 ** uint32(n);\\n } else {\\n return x;\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with full precision.\\n */\\n function mulDiv(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256 r) {\\n unchecked {\\n if (y == d || n == 0) return x;\\n r = x;\\n\\n bool ok;\\n uint256 r_;\\n uint16 nd_;\\n\\n {\\n uint16 ye = uint16(Math.min(n, findMaxExponent(y)));\\n while (ye > 0) {\\n (ok, r_) = r.tryMul(y ** ye);\\n if (ok) {\\n r = r_;\\n n -= ye;\\n nd_ += ye;\\n }\\n ye = uint16(Math.min(ye / 2, n));\\n }\\n }\\n\\n while (n > 0) {\\n (ok, r_) = r.tryMul(y);\\n if (ok) {\\n r = r_;\\n n--;\\n nd_++;\\n } else if (nd_ > 0) {\\n r /= d;\\n nd_--;\\n } else {\\n r = r.mulDiv(y, d);\\n n--;\\n }\\n }\\n\\n uint16 de = findMaxExponent(d);\\n while (nd_ > 0) {\\n uint16 e = uint16(Math.min(de, nd_));\\n r /= d ** e;\\n nd_ -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Calculates floor(x * (y / d)**n) with low precision.\\n */\\n function mulDivLowPrecision(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256) {\\n return uncheckedMulDiv(x, y, d, n, findMaxExponent(Math.max(y, d)));\\n }\\n\\n /**\\n * @dev Aggregated calculate multiplications.\\n * ```\\n * r = x*(y/d)^k\\n * = \\\\prod(x*(y/d)^{k_i}) \\\\ where \\\\ sum(k_i) = k\\n * ```\\n */\\n function uncheckedMulDiv(uint256 x, uint256 y, uint256 d, uint16 n, uint16 maxE) internal pure returns (uint256 r) {\\n unchecked {\\n r = x;\\n uint16 e;\\n while (n > 0) {\\n e = uint16(Math.min(n, maxE));\\n r = r.mulDiv(y ** e, d ** e);\\n n -= e;\\n }\\n }\\n }\\n\\n /**\\n * @dev Returns the largest exponent `k` where, x^k <= 2^256-1\\n * Note: n = Surd[2^256-1,k]\\n * = 10^( log2(2^256-1) / k * log10(2) )\\n */\\n function findMaxExponent(uint256 x) internal pure returns (uint16 k) {\\n if (x < 3) k = 255;\\n else if (x < 4) k = 128;\\n else if (x < 16) k = 64;\\n else if (x < 256) k = 32;\\n else if (x < 7132) k = 20;\\n else if (x < 11376) k = 19;\\n else if (x < 19113) k = 18;\\n else if (x < 34132) k = 17;\\n else if (x < 65536) k = 16;\\n else if (x < 137271) k = 15;\\n else if (x < 319558) k = 14;\\n else if (x < 847180) k = 13;\\n else if (x < 2642246) k = 12;\\n else if (x < 10134189) k = 11;\\n else if (x < 50859009) k = 10;\\n else if (x < 365284285) k = 9;\\n else if (x < 4294967296) k = 8;\\n else if (x < 102116749983) k = 7;\\n else if (x < 6981463658332) k = 6;\\n else if (x < 2586638741762875) k = 5;\\n else if (x < 18446744073709551616) k = 4;\\n else if (x < 48740834812604276470692695) k = 3;\\n else if (x < 340282366920938463463374607431768211456) k = 2;\\n else k = 1;\\n }\\n}\\n\",\"keccak256\":\"0x29f943cf7c61149bc9a624244901720fc3a349adb418555db1db2a045fcdfb70\",\"license\":\"MIT\"},\"src/libraries/transfers/RONTransferHelper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Strings } from \\\"@openzeppelin/contracts/utils/Strings.sol\\\";\\n\\n/**\\n * @title RONTransferHelper\\n */\\nlibrary RONTransferHelper {\\n using Strings for *;\\n\\n /**\\n * @dev Transfers RON and wraps result for the method caller to a recipient.\\n */\\n function safeTransfer(address payable _to, uint256 _value) internal {\\n bool _success = send(_to, _value);\\n if (!_success) {\\n revert(\\n string.concat(\\\"TransferHelper: could not transfer RON to \\\", _to.toHexString(), \\\" value \\\", _value.toHexString())\\n );\\n }\\n }\\n\\n /**\\n * @dev Returns whether the call was success.\\n * Note: this function should use with the `ReentrancyGuard`.\\n */\\n function send(address payable _to, uint256 _value) internal returns (bool _success) {\\n (_success,) = _to.call{ value: _value }(new bytes(0));\\n }\\n}\\n\",\"keccak256\":\"0x733e60374ee0a33d0da2ee24976b893ca6b6d9764243b175e1ac8025240394da\",\"license\":\"MIT\"},\"src/types/ModifyingIndicator.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\ntype ModifyingIndicator is uint256;\\n\\nusing { hasAny } for ModifyingIndicator global;\\nusing { or as | } for ModifyingIndicator global;\\nusing { and as & } for ModifyingIndicator global;\\nusing { eq as == } for ModifyingIndicator global;\\nusing { not as ~ } for ModifyingIndicator global;\\nusing { xor as ^ } for ModifyingIndicator global;\\nusing { neq as != } for ModifyingIndicator global;\\n\\n/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}.\\nModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7);\\n\\n/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}.\\nModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18);\\n\\n/// @dev Indicator when modifying all of the fields in {ModifyingField}.\\nModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max);\\n\\nfunction eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other);\\n}\\n\\nfunction neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return !eq(self, other);\\n}\\n\\nfunction xor(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) ^ ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction not(ModifyingIndicator self) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self));\\n}\\n\\nfunction or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) {\\n return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other));\\n}\\n\\nfunction hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) {\\n return self & other != ModifyingIndicator.wrap(0);\\n}\\n\",\"keccak256\":\"0x2e42fbba358c470ff6b57268367d248f0e2fcf8d7142d762688f7aef5efae7ee\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182607, + "numDeployments": 2, + "storageLayout": { + "storage": [ + { + "astId": 49882, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_paused", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 49702, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_initialized", + "offset": 1, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 49705, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_initializing", + "offset": 2, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 49983, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_status", + "offset": 0, + "slot": "1", + "type": "t_uint256" + }, + { + "astId": 48175, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_roles", + "offset": 0, + "slot": "2", + "type": "t_mapping(t_bytes32,t_struct(RoleData)48170_storage)" + }, + { + "astId": 48485, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_roleMembers", + "offset": 0, + "slot": "3", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)54054_storage)" + }, + { + "astId": 62816, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "____gap", + "offset": 0, + "slot": "4", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 62819, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_minCommitmentAge", + "offset": 0, + "slot": "54", + "type": "t_uint256" + }, + { + "astId": 62822, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_maxCommitmentAge", + "offset": 0, + "slot": "55", + "type": "t_uint256" + }, + { + "astId": 62825, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_minRegistrationDuration", + "offset": 0, + "slot": "56", + "type": "t_uint256" + }, + { + "astId": 62828, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_treasury", + "offset": 0, + "slot": "57", + "type": "t_address_payable" + }, + { + "astId": 62832, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_rnsUnified", + "offset": 0, + "slot": "58", + "type": "t_contract(INSUnified)64975" + }, + { + "astId": 62836, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_nameChecker", + "offset": 0, + "slot": "59", + "type": "t_contract(INameChecker)65094" + }, + { + "astId": 62840, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_priceOracle", + "offset": 0, + "slot": "60", + "type": "t_contract(INSDomainPrice)64599" + }, + { + "astId": 62844, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_reverseRegistrar", + "offset": 0, + "slot": "61", + "type": "t_contract(INSReverseRegistrar)64718" + }, + { + "astId": 62849, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_committedAt", + "offset": 0, + "slot": "62", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 62856, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_protectedNamesWhitelisted", + "offset": 0, + "slot": "63", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_bool))" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "encoding": "dynamic_array", + "label": "bytes32[]", + "numberOfBytes": "32", + "base": "t_bytes32" + }, + "t_array(t_uint256)50_storage": { + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600", + "base": "t_uint256" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(INSDomainPrice)64599": { + "encoding": "inplace", + "label": "contract INSDomainPrice", + "numberOfBytes": "20" + }, + "t_contract(INSReverseRegistrar)64718": { + "encoding": "inplace", + "label": "contract INSReverseRegistrar", + "numberOfBytes": "20" + }, + "t_contract(INSUnified)64975": { + "encoding": "inplace", + "label": "contract INSUnified", + "numberOfBytes": "20" + }, + "t_contract(INameChecker)65094": { + "encoding": "inplace", + "label": "contract INameChecker", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)54054_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct EnumerableSet.AddressSet)", + "numberOfBytes": "32", + "value": "t_struct(AddressSet)54054_storage" + }, + "t_mapping(t_bytes32,t_struct(RoleData)48170_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct AccessControl.RoleData)", + "numberOfBytes": "32", + "value": "t_struct(RoleData)48170_storage" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_struct(AddressSet)54054_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.AddressSet", + "numberOfBytes": "64", + "members": [ + { + "astId": 54053, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_inner", + "offset": 0, + "slot": "0", + "type": "t_struct(Set)53739_storage" + } + ] + }, + "t_struct(RoleData)48170_storage": { + "encoding": "inplace", + "label": "struct AccessControl.RoleData", + "numberOfBytes": "64", + "members": [ + { + "astId": 48167, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "members", + "offset": 0, + "slot": "0", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 48169, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "adminRole", + "offset": 0, + "slot": "1", + "type": "t_bytes32" + } + ] + }, + "t_struct(Set)53739_storage": { + "encoding": "inplace", + "label": "struct EnumerableSet.Set", + "numberOfBytes": "64", + "members": [ + { + "astId": 53734, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_values", + "offset": 0, + "slot": "0", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "astId": 53738, + "contract": "src/RONRegistrarController.sol:RONRegistrarController", + "label": "_indexes", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + }, + "timestamp": 1698144132, + "userdoc": { + "version": 1, + "kind": "user", + "notice": "Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol" + } +} \ No newline at end of file diff --git a/deployments/ronin-testnet/RONRegistrarControllerProxy.json b/deployments/ronin-testnet/RONRegistrarControllerProxy.json new file mode 100644 index 00000000..fe3fe996 --- /dev/null +++ b/deployments/ronin-testnet/RONRegistrarControllerProxy.json @@ -0,0 +1,120 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "address": "0x512699B52ac2dC2b2aD505d9f29DcDad078FA799", + "args": "0x64c65705000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c07000000000000000000000000968d0cd7343f711216817e617d3f92a23dc91c070000000000000000000000000000000000000000000000000000000000015180000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0c99c9677eda0d13291c093b27e6512e4acdf83000000000000000000000000bc07dfda8f91aae03141b98278cb2321e36ec2f300000000000000000000000051caf51678f469e9dd4c878a7b0cebebbd4a4ab50000000000000000000000000cc07f120dffdf507a6e983c54bcb402fc6bf716", + "blockNumber": 21224275, + "bytecode": "0x608060405260405162000e3a38038062000e3a833981016040819052620000269162000424565b828162000036828260006200004d565b50620000449050826200007f565b50505062000557565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000df3833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e136027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000df38339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b6060600080856001600160a01b031685604051620002b6919062000504565b600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030c8683838762000316565b9695505050505050565b606083156200038a57825160000362000382576001600160a01b0385163b620003825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001c4565b508162000396565b6200039683836200039e565b949350505050565b815115620003af5781518083602001fd5b8060405162461bcd60e51b8152600401620001c4919062000522565b80516001600160a01b0381168114620003e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200041b57818101518382015260200162000401565b50506000910152565b6000806000606084860312156200043a57600080fd5b6200044584620003cb565b92506200045560208501620003cb565b60408501519092506001600160401b03808211156200047357600080fd5b818601915086601f8301126200048857600080fd5b8151818111156200049d576200049d620003e8565b604051601f8201601f19908116603f01168101908382118183101715620004c857620004c8620003e8565b81604052828152896020848701011115620004e257600080fd5b620004f5836020830160208801620003fe565b80955050505050509250925092565b6000825162000518818460208701620003fe565b9190910192915050565b602081526000825180602084015262000543816040850160208701620003fe565b601f01601f19169190910160400192915050565b61088c80620005676000396000f3fe60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "chainId": 2021, + "contractName": "TransparentUpgradeableProxy", + "deployedBytecode": "0x60806040523661001357610011610017565b005b6100115b61001f610169565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a5761005361019c565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a576100536101f3565b63070d7c6960e41b6001600160e01b031982160161009a57610053610239565b621eb96f60e61b6001600160e01b03198216016100b95761005361026a565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102aa565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102be565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a66102ce565b60006101b53660048184610683565b8101906101c291906106c9565b90506101df816040518060200160405280600081525060006102d9565b505060408051602081019091526000815290565b60606000806102053660048184610683565b81019061021291906106fa565b91509150610222828260016102d9565b604051806020016040528060008152509250505090565b60606102436102ce565b60006102523660048184610683565b81019061025f91906106c9565b90506101df81610305565b60606102746102ce565b600061027e610169565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102b46102ce565b600061027e61035c565b6101676102c961035c565b61036b565b341561016757600080fd5b6102e28361038f565b6000825111806102ef5750805b15610300576102fe83836103cf565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e610169565b604080516001600160a01b03928316815291841660208301520160405180910390a1610359816103fb565b50565b60006103666104a4565b905090565b3660008037600080366000845af43d6000803e80801561038a573d6000f35b3d6000fd5b610398816104cc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606103f4838360405180606001604052806027815260200161083060279139610560565b9392505050565b6001600160a01b0381166104605760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018d565b6001600160a01b0381163b6105395760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610483565b6060600080856001600160a01b03168560405161057d91906107e0565b600060405180830381855af49150503d80600081146105b8576040519150601f19603f3d011682016040523d82523d6000602084013e6105bd565b606091505b50915091506105ce868383876105d8565b9695505050505050565b60608315610647578251600003610640576001600160a01b0385163b6106405760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b5081610651565b6106518383610659565b949350505050565b8151156106695781518083602001fd5b8060405162461bcd60e51b815260040161014e91906107fc565b6000808585111561069357600080fd5b838611156106a057600080fd5b5050820193919092039150565b80356001600160a01b03811681146106c457600080fd5b919050565b6000602082840312156106db57600080fd5b6103f4826106ad565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561070d57600080fd5b610716836106ad565b9150602083013567ffffffffffffffff8082111561073357600080fd5b818501915085601f83011261074757600080fd5b813581811115610759576107596106e4565b604051601f8201601f19908116603f01168101908382118183101715610781576107816106e4565b8160405282815288602084870101111561079a57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107d75781810151838201526020016107bf565b50506000910152565b600082516107f28184602087016107bc565b9190910192915050565b602081526000825180602084015261081b8160408501602087016107bc565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220130b58f7bc010ac02031dd7780671f2962205075f8f200c6ae190f4b528bb57d64736f6c63430008150033", + "deployer": "0x968D0Cd7343f711216817E617d3f92a23dC91c07", + "devdoc": { + "version": 1, + "kind": "dev", + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.", + "methods": { + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + } + }, + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is changed." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + } + }, + "isFoundry": true, + "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy. NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to fully implement transparency without decoding reverts caused by selector clashes between the proxy and the implementation. WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler will not check that there are no selector conflicts, due to the note above. A selector clash between any new function and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/buffer/=lib/buffer/\",\":@ensdomains/ens-contracts/=lib/ens-contracts/contracts/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@pythnetwork/=lib/pyth-sdk-solidity/\",\":@rns-contracts/=src/\",\":buffer/=lib/buffer/contracts/\",\":contract-template/=lib/contract-template/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":ens-contracts/=lib/ens-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":foundry-deployment-kit/=lib/foundry-deployment-kit/script/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":pyth-sdk-solidity/=lib/pyth-sdk-solidity/\",\":solady/=lib/solady/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC1967.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\\n *\\n * _Available since v4.8.3._\\n */\\ninterface IERC1967 {\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Emitted when the beacon is changed.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n}\\n\",\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/IERC1967.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n */\\nabstract contract ERC1967Upgrade is IERC1967 {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(address newImplementation, bytes memory data, bool forceCall) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(address newImplementation, bytes memory data, bool forceCall) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(address newBeacon, bytes memory data, bool forceCall) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev Interface for {TransparentUpgradeableProxy}. In order to implement transparency, {TransparentUpgradeableProxy}\\n * does not implement this interface directly, and some of its functions are implemented by an internal dispatch\\n * mechanism. The compiler is unaware that these functions are implemented by {TransparentUpgradeableProxy} and will not\\n * include them in the ABI so this interface must be used to interact with it.\\n */\\ninterface ITransparentUpgradeableProxy is IERC1967 {\\n function admin() external view returns (address);\\n\\n function implementation() external view returns (address);\\n\\n function changeAdmin(address) external;\\n\\n function upgradeTo(address) external;\\n\\n function upgradeToAndCall(address, bytes memory) external payable;\\n}\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n *\\n * NOTE: The real interface of this proxy is that defined in `ITransparentUpgradeableProxy`. This contract does not\\n * inherit from that interface, and instead the admin functions are implicitly implemented using a custom dispatch\\n * mechanism in `_fallback`. Consequently, the compiler will not produce an ABI for this contract. This is necessary to\\n * fully implement transparency without decoding reverts caused by selector clashes between the proxy and the\\n * implementation.\\n *\\n * WARNING: It is not recommended to extend this contract to add additional external functions. If you do so, the compiler\\n * will not check that there are no selector conflicts, due to the note above. A selector clash between any new function\\n * and the functions declared in {ITransparentUpgradeableProxy} will be resolved in favor of the new one. This could\\n * render the admin operations inaccessible, which could prevent upgradeability. Transparency may also be compromised.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n *\\n * CAUTION: This modifier is deprecated, as it could cause issues if the modified function has arguments, and the\\n * implementation provides a function with the same selector.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev If caller is the admin process the call internally, otherwise transparently fallback to the proxy behavior\\n */\\n function _fallback() internal virtual override {\\n if (msg.sender == _getAdmin()) {\\n bytes memory ret;\\n bytes4 selector = msg.sig;\\n if (selector == ITransparentUpgradeableProxy.upgradeTo.selector) {\\n ret = _dispatchUpgradeTo();\\n } else if (selector == ITransparentUpgradeableProxy.upgradeToAndCall.selector) {\\n ret = _dispatchUpgradeToAndCall();\\n } else if (selector == ITransparentUpgradeableProxy.changeAdmin.selector) {\\n ret = _dispatchChangeAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.admin.selector) {\\n ret = _dispatchAdmin();\\n } else if (selector == ITransparentUpgradeableProxy.implementation.selector) {\\n ret = _dispatchImplementation();\\n } else {\\n revert(\\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n }\\n assembly {\\n return(add(ret, 0x20), mload(ret))\\n }\\n } else {\\n super._fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function _dispatchAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address admin = _getAdmin();\\n return abi.encode(admin);\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function _dispatchImplementation() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address implementation = _implementation();\\n return abi.encode(implementation);\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _dispatchChangeAdmin() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newAdmin = abi.decode(msg.data[4:], (address));\\n _changeAdmin(newAdmin);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n */\\n function _dispatchUpgradeTo() private returns (bytes memory) {\\n _requireZeroValue();\\n\\n address newImplementation = abi.decode(msg.data[4:], (address));\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n */\\n function _dispatchUpgradeToAndCall() private returns (bytes memory) {\\n (address newImplementation, bytes memory data) = abi.decode(msg.data[4:], (address, bytes));\\n _upgradeToAndCall(newImplementation, data, true);\\n\\n return \\\"\\\";\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * CAUTION: This function is deprecated. Use {ERC1967Upgrade-_getAdmin} instead.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev To keep this contract fully transparent, all `ifAdmin` functions must be payable. This helper is here to\\n * emulate some proxy functions being non-payable while still allowing value to pass through.\\n */\\n function _requireZeroValue() private {\\n require(msg.value == 0);\\n }\\n}\\n\",\"keccak256\":\"0x168e36d7e616bd41f6abab4a83009da64513ae9e638aa6d5980066e2a92db689\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n *\\n * Furthermore, `isContract` will also return true if the target contract within\\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\\n * which only has an effect at the end of a transaction.\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)\\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```solidity\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._\\n * _Available since v4.9 for `string`, `bytes`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n struct StringSlot {\\n string value;\\n }\\n\\n struct BytesSlot {\\n bytes value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\\n */\\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\\n */\\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\\n */\\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\\n */\\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := store.slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\"}},\"version\":1}", + "nonce": 182508, + "numDeployments": 1, + "storageLayout": { + "storage": [], + "types": {} + }, + "timestamp": 1697372891, + "userdoc": { + "version": 1, + "kind": "user" + } +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 7f75d685..c7bbca5a 100644 --- a/foundry.toml +++ b/foundry.toml @@ -2,7 +2,7 @@ src = "src" out = "out" libs = ["lib"] - +ffi = true # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options solc = '0.8.21' @@ -14,9 +14,12 @@ fs_permissions = [{ access = "read-write", path = "./" }] [fmt] line_length = 120 tab_width = 2 +bracket_spacing = true [rpc_endpoints] -ronin-mainnet = "https://api.roninchain.com/rpc" +ethereum = "https://eth.llamarpc.com" +goerli = "https://ethereum-goerli.publicnode.com" +ronin-mainnet = "https://api-partner.roninchain.com/rpc" ronin-testnet = "https://saigon-archive.roninchain.com/rpc" localhost = "http://localhost:8545" diff --git a/hardhat.config.ts b/hardhat.config.ts new file mode 100644 index 00000000..04147d0e --- /dev/null +++ b/hardhat.config.ts @@ -0,0 +1,33 @@ +import "hardhat-deploy"; +import { + HardhatUserConfig, + NetworkUserConfig, +} from "hardhat/types"; +import * as dotenv from 'dotenv'; + +dotenv.config(); + +const { TESTNET_URL, MAINNET_URL } = process.env; + +const testnet: NetworkUserConfig = { + chainId: 2021, + url: TESTNET_URL || "https://saigon-testnet.roninchain.com/rpc", +}; + +const mainnet: NetworkUserConfig = { + chainId: 2020, + url: MAINNET_URL || "https://api.roninchain.com/rpc", +}; + +const config: HardhatUserConfig = { + paths: { + sources: "./src", + }, + + networks: { + "ronin-testnet": testnet, + "ronin-mainnet": mainnet, + }, +}; + +export default config; diff --git a/lib/buffer b/lib/buffer new file mode 160000 index 00000000..688aa09e --- /dev/null +++ b/lib/buffer @@ -0,0 +1 @@ +Subproject commit 688aa09e9ad241a94609e6af539e65f229912b16 diff --git a/lib/contract-template b/lib/contract-template new file mode 160000 index 00000000..e2a2fadc --- /dev/null +++ b/lib/contract-template @@ -0,0 +1 @@ +Subproject commit e2a2fadc1034eec37214e571c9db4e56319b681c diff --git a/lib/ens-contracts b/lib/ens-contracts new file mode 160000 index 00000000..0c75ba23 --- /dev/null +++ b/lib/ens-contracts @@ -0,0 +1 @@ +Subproject commit 0c75ba23fae76165d51c9c80d76d22261e06179d diff --git a/lib/foundry-deployment-kit b/lib/foundry-deployment-kit new file mode 160000 index 00000000..83cff062 --- /dev/null +++ b/lib/foundry-deployment-kit @@ -0,0 +1 @@ +Subproject commit 83cff062c81a7846b29c241a14a84ac10edf9df9 diff --git a/lib/pyth-sdk-solidity b/lib/pyth-sdk-solidity new file mode 160000 index 00000000..11d6bcfc --- /dev/null +++ b/lib/pyth-sdk-solidity @@ -0,0 +1 @@ +Subproject commit 11d6bcfc2e56885535a9a8e3c8417847cb20be14 diff --git a/lib/solady b/lib/solady new file mode 160000 index 00000000..2ba1cc1e --- /dev/null +++ b/lib/solady @@ -0,0 +1 @@ +Subproject commit 2ba1cc1eaa3bffd5c093d94f76ef1b87b167ff3c diff --git a/package.json b/package.json index 8f1cb1e6..773d0937 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,13 @@ "src/**/*.sol" ], "devDependencies": { + "dotenv": "^16.3.1", + "hardhat": "^2.12.7", + "hardhat-deploy": "0.11.29", "husky": "^8.0.3", - "lint-staged": "^14.0.1" + "lint-staged": "^14.0.1", + "ts-node": "^10.4.0", + "typescript": "^4.5.4" }, "lint-staged": { "{src,script,test}/**/*.sol": [ @@ -20,4 +25,4 @@ "scripts": { "prepare": "husky install" } -} +} \ No newline at end of file diff --git a/remappings.txt b/remappings.txt index a72797d1..e0444d22 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,3 +1,10 @@ +@rns-contracts/=src/ ds-test/=lib/forge-std/lib/ds-test/src/ forge-std/=lib/forge-std/src/ -@openzeppelin/=lib/openzeppelin-contracts/ \ No newline at end of file +@openzeppelin/=lib/openzeppelin-contracts/ +contract-template/=lib/contract-template/src/ +solady/=lib/solady/src/ +@ensdomains/ens-contracts/=lib/ens-contracts/contracts/ +@ensdomains/buffer/=lib/buffer/ +@pythnetwork/=lib/pyth-sdk-solidity/ +foundry-deployment-kit/=lib/foundry-deployment-kit/script/ \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100755 index 00000000..84a90ca2 --- /dev/null +++ b/run.sh @@ -0,0 +1,27 @@ +verify_arg="" +extra_argument="" +op_command="" + +for arg in "$@"; do + case $arg in + --trezor) + op_command="" + extra_argument+=trezor@ + ;; + --broadcast) + op_command="op run --env-file="./.env" --" + # verify_arg="--verify --verifier sourcify --verifier-url https://sourcify.roninchain.com/server/" + ;; + --log) + set -- "${@/#--log/}" + extra_argument+=log@ + ;; + *) ;; + esac +done + +# Remove the @ character from the end of extra_argument +extra_argument="${extra_argument%%@}" + +calldata=$(cast calldata 'run()') +${op_command} forge script ${verify_arg} --legacy ${@} --sig 'run(bytes,string)' ${calldata} "${extra_argument}" diff --git a/script/20231015-deploy/20231015_Deploy.s.sol b/script/20231015-deploy/20231015_Deploy.s.sol new file mode 100644 index 00000000..ec2307e9 --- /dev/null +++ b/script/20231015-deploy/20231015_Deploy.s.sol @@ -0,0 +1,239 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { console2 } from "forge-std/console2.sol"; +import { StdStyle } from "forge-std/StdStyle.sol"; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; +import { LibRNSDomain } from "@rns-contracts/libraries/LibRNSDomain.sol"; +import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { + RONRegistrarController, RONRegistrarControllerDeploy +} from "script/contracts/RONRegistrarControllerDeploy.s.sol"; +import { RNSUnified, RNSUnifiedDeploy } from "script/contracts/RNSUnifiedDeploy.s.sol"; +import { RNSAuction, RNSAuctionDeploy } from "script/contracts/RNSAuctionDeploy.s.sol"; +import { NameChecker, NameCheckerDeploy } from "script/contracts/NameCheckerDeploy.s.sol"; +import { RNSDomainPrice, RNSDomainPriceDeploy } from "script/contracts/RNSDomainPriceDeploy.s.sol"; +import { PublicResolver, PublicResolverDeploy } from "script/contracts/PublicResolverDeploy.s.sol"; +import { RNSReverseRegistrar, RNSReverseRegistrarDeploy } from "script/contracts/RNSReverseRegistrarDeploy.s.sol"; +import { INSDomainPrice, RNSDeploy } from "../RNSDeploy.s.sol"; + +contract Migration__20231015_Deploy is RNSDeploy { + using Strings for *; + using LibRNSDomain for string; + + RNSUnified internal _rns; + RNSAuction internal _auction; + NameChecker internal _nameChecker; + RNSDomainPrice internal _domainPrice; + PublicResolver internal _publicResolver; + RNSReverseRegistrar internal _reverseRegistrar; + RONRegistrarController internal _ronController; + + string[] internal _blacklistedWords; + + function run() public trySetUp { + _rns = new RNSUnifiedDeploy().run(); + _auction = new RNSAuctionDeploy().run(); + _nameChecker = new NameCheckerDeploy().run(); + _domainPrice = new RNSDomainPriceDeploy().run(); + _reverseRegistrar = new RNSReverseRegistrarDeploy().run(); + _publicResolver = new PublicResolverDeploy().run(); + _ronController = new RONRegistrarControllerDeploy().run(); + + address admin = _rns.getRoleMember(_rns.DEFAULT_ADMIN_ROLE(), 0); + { + string memory data = vm.readFile("./script/20231015-deploy/data/data.json"); + _blacklistedWords = vm.parseJsonStringArray(data, ".words"); + } + uint256[] memory packedWords = _nameChecker.packBulk(_blacklistedWords); + + vm.resumeGasMetering(); + vm.startBroadcast(admin); + + _rns.grantRole(_rns.CONTROLLER_ROLE(), address(_auction)); + _rns.grantRole(_rns.RESERVATION_ROLE(), address(_auction)); + _rns.grantRole(_rns.CONTROLLER_ROLE(), address(_ronController)); + + (, uint256 ronId) = _rns.mint(0x0, "ron", address(0), admin, _rns.MAX_EXPIRY()); + (, uint256 reverseId) = _rns.mint(0x0, "reverse", address(0), admin, _rns.MAX_EXPIRY()); + (, uint256 addrReverseId) = _rns.mint(reverseId, "addr", address(0), admin, _rns.MAX_EXPIRY()); + + _rns.setApprovalForAll(address(_auction), true); + _rns.setApprovalForAll(address(_ronController), true); + _rns.approve(address(_reverseRegistrar), addrReverseId); + + _reverseRegistrar.setDefaultResolver(_publicResolver); + _nameChecker.setForbiddenWords({ packedWords: packedWords, shouldForbid: true }); + + vm.stopBroadcast(); + vm.pauseGasMetering(); + + _validateAuction(); + _validateController(); + _validateDomainPrice(); + _validateReverseRegistrar(); + _validateNameChecker(); + _validateRNSUnified(ronId, addrReverseId); + + console2.log(StdStyle.green(unicode"✅ All checks are passed")); + } + + function _validateController() internal logFn("_validateController") { + Account memory user = makeAccount("tudo"); + uint64 duration = 30 days; + bytes32 secret = keccak256("secret"); + string memory domain = "tudo-controller-promax"; + + bytes[] memory data; + bytes32 commitment = + _ronController.computeCommitment(domain, user.addr, duration, secret, address(_publicResolver), data, true); + + (, uint256 ronPrice) = _ronController.rentPrice(domain, duration); + console2.log("domain price:", ronPrice); + vm.deal(user.addr, ronPrice); + + vm.startPrank(user.addr); + _ronController.commit(commitment); + vm.warp(block.timestamp + 1 hours); + _ronController.register{ value: ronPrice }( + domain, user.addr, duration, secret, address(_publicResolver), data, true + ); + vm.stopPrank(); + + uint256 expectedId = uint256(string.concat(domain, ".ron").namehash()); + assertEq(_rns.ownerOf(expectedId), user.addr); + console2.log(unicode"✅ Controller checks are passed"); + } + + function _validateRNSUnified(uint256 ronId, uint256 addrReverseId) internal logFn("validateRNSUnified") { + assertEq(ronId, LibRNSDomain.RON_ID); + assertEq(addrReverseId, LibRNSDomain.ADDR_REVERSE_ID); + assertTrue(_rns.hasRole(_rns.CONTROLLER_ROLE(), address(_auction)), "grant controller role failed"); + assertTrue(_rns.hasRole(_rns.RESERVATION_ROLE(), address(_auction)), "grant reservation role failed"); + assertEq(address(_ronController.getPriceOracle()), address(_domainPrice), "set price oracle failed"); + + console2.log(unicode"✅ RNSUnified checks are passed"); + } + + function _validateReverseRegistrar() internal logFn("validateReverseRegistrar") { + assertEq(_rns.getApproved(LibRNSDomain.ADDR_REVERSE_ID), address(_reverseRegistrar)); + } + + function _validateAuction() internal logFn("validateAuction") { + address operator = _auction.getRoleMember(_auction.OPERATOR_ROLE(), 0); + string[] memory domainNames = new string[](1); + string memory domainName = "tudo-reserved-provip"; + domainNames[0] = domainName; + bytes32[] memory lbHashes = new bytes32[](1); + lbHashes[0] = LibRNSDomain.hashLabel(domainName); + uint256[] memory setTypes = new uint256[](1); + uint256[] memory ronPrices = new uint256[](1); + bytes32[] memory proofHashes = new bytes32[](1); + ronPrices[0] = _domainPrice.convertUSDToRON(2e18); + + vm.startPrank(operator); + + _auction.bulkRegister(domainNames); + _domainPrice.bulkSetDomainPrice(lbHashes, ronPrices, proofHashes, setTypes); + + uint256 id = LibRNSDomain.toId(LibRNSDomain.RON_ID, domainNames[0]); + (, INSDomainPrice.UnitPrice memory tax) = _domainPrice.getRenewalFee(domainName, 365 days); + assertTrue(tax.usd != 0, "reversed name not have tax"); + + vm.stopPrank(); + + assertTrue(_auction.reserved(id), "invalid bulkRegister"); + assertEq(_rns.getRecord(id).mut.expiry, _rns.MAX_EXPIRY(), "invalid expiry time"); + + console2.log(unicode"✅ Auction checks are passed"); + } + + function _validateDomainPrice() internal logFn("validateDomainPrice") { + address operator = _domainPrice.getRoleMember(_domainPrice.OPERATOR_ROLE(), 0); + string memory domainName = "tudo-provip"; + bytes32[] memory lbHashes = new bytes32[](1); + lbHashes[0] = LibRNSDomain.hashLabel(domainName); + uint256[] memory overriddenFees = new uint256[](1); + overriddenFees[0] = 1; + + vm.startPrank(operator); + + { + (INSDomainPrice.UnitPrice memory basePrice,) = _domainPrice.getRenewalFee(domainName, 365 days); + assertApproxEqAbs(basePrice.usd, 5e18, 1e16, "get renewal fee failed"); + } + { + _domainPrice.bulkOverrideRenewalFees(lbHashes, overriddenFees); + (INSDomainPrice.UnitPrice memory basePrice,) = _domainPrice.getRenewalFee(domainName, 365 days); + assertEq(basePrice.usd, 365 days, "get overridden renewal fee failed"); + } + { + uint256[] memory setTypes = new uint256[](1); + uint256[] memory ronPrices = new uint256[](1); + bytes32[] memory proofHashes = new bytes32[](1); + + ronPrices[0] = _domainPrice.convertUSDToRON(2e18); + _domainPrice.bulkTrySetDomainPrice(lbHashes, ronPrices, proofHashes, setTypes); + (uint256 usdPrice,) = _domainPrice.getDomainPrice(domainName); + assertApproxEqAbs(usdPrice, 2e18, 1e16, "get domain price 1 failed"); + + ronPrices[0] = _domainPrice.convertUSDToRON(1e18); + _domainPrice.bulkTrySetDomainPrice(lbHashes, ronPrices, proofHashes, setTypes); + (usdPrice,) = _domainPrice.getDomainPrice(domainName); + assertApproxEqAbs(usdPrice, 2e18, 1e16, "get domain price 2 failed"); + + ronPrices[0] = _domainPrice.convertUSDToRON(1e18); + _domainPrice.bulkSetDomainPrice(lbHashes, ronPrices, proofHashes, setTypes); + (usdPrice,) = _domainPrice.getDomainPrice(domainName); + assertApproxEqAbs(usdPrice, 1e18, 1e16, "get domain price 3 failed"); + } + + vm.stopPrank(); + + console2.log("Tax Raio:", _domainPrice.getTaxRatio()); + console2.log("Converting 1 USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18)); + console2.log("Converting 1 RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether)); + console2.log("Converting 1m USD (18 decimals) to RON:", _domainPrice.convertUSDToRON(1e18 * 1e6)); + console2.log("Converting 1m RON to USD (18 decimals):", _domainPrice.convertRONToUSD(1 ether * 1e6)); + console2.log(unicode"✅ Domain price checks are passed"); + } + + function _validateNameChecker() internal logFn("validateNameChecker") { + string[] memory blacklistedWords = _blacklistedWords; + (uint8 min, uint8 max) = _nameChecker.getWordRange(); + bool valid; + bool forbidden; + string memory word; + uint256 expectedMax; + uint256 expectedMin = type(uint256).max; + + console2.log(StdStyle.blue("Blacklisted words count"), blacklistedWords.length); + console2.log(StdStyle.blue("Word"), "RONRegistrarController::valid()", "NameChecker::forbidden()"); + console2.log(StdStyle.blue("Word Range"), string.concat("min: ", min.toString(), " ", "max: ", max.toString())); + + for (uint256 i; i < blacklistedWords.length;) { + word = blacklistedWords[i]; + expectedMin = Math.min(bytes(word).length, expectedMin); + expectedMax = Math.max(bytes(word).length, expectedMax); + valid = _ronController.valid(word); + forbidden = _nameChecker.forbidden(word); + + if (i % 50 == 0) { + console2.log(StdStyle.blue(word), valid ? unicode"✅" : unicode"❌", forbidden ? unicode"✅" : unicode"❌"); + } + + assertTrue(!valid); + assertTrue(forbidden); + + unchecked { + ++i; + } + } + + assertEq(min, expectedMin); + assertEq(max, expectedMax); + + console2.log(unicode"✅ NameChecker checks are passed"); + } +} diff --git a/script/20231015-deploy/data/data.json b/script/20231015-deploy/data/data.json new file mode 100644 index 00000000..dc3b67af --- /dev/null +++ b/script/20231015-deploy/data/data.json @@ -0,0 +1,1012 @@ +{ + "words": [ + "\ud83d\udd95", + "2 girls 1 cup", + "2g1c", + "4r5e", + "5h1t", + "5hit", + "a_s_s", + "a55", + "abortion", + "acrotomophilia", + "alabama hot pocket", + "alaskan pipeline", + "anal", + "anilingus", + "anus", + "apeshit", + "ar5e", + "arrse", + "arse", + "arsehole", + "ass", + "ass-fucker", + "ass-hat", + "ass-pirate", + "assbag", + "assbandit", + "assbanger", + "assbite", + "assclown", + "asscock", + "asscracker", + "asses", + "assface", + "assfucker", + "assfukka", + "assgoblin", + "asshat", + "asshead", + "asshole", + "assholes", + "asshopper", + "assjacker", + "asslick", + "asslicker", + "assmonkey", + "assmunch", + "assmuncher", + "asspirate", + "assshole", + "asssucker", + "asswad", + "asswhole", + "asswipe", + "auto erotic", + "autoerotic", + "b!tch", + "b00bs", + "b17ch", + "b1tch", + "babeland", + "baby batter", + "baby juice", + "ball gag", + "ball gravy", + "ball kicking", + "ball licking", + "ball sack", + "ball sucking", + "ballbag", + "balllicker", + "balls", + "ballsack", + "bampot", + "bangbros", + "bareback", + "barely legal", + "barelylegal", + "barenaked", + "bastard", + "bastardo", + "bastinado", + "bbw", + "bdsm", + "beaner", + "beaners", + "beastial", + "beastiality", + "beastility", + "beatyourmeat", + "beaver cleaver", + "beaver lips", + "bellend", + "bestial", + "bestiality", + "bi+ch", + "biatch", + "big black", + "big breasts", + "big knockers", + "big tits", + "bimbos", + "birdlock", + "bisexual", + "bitch", + "bitcher", + "bitchers", + "bitches", + "bitchin", + "bitching", + "black cock", + "blonde action", + "blonde on blonde action", + "bloody", + "blow job", + "blow your load", + "blowjob", + "blowjobs", + "blue waffle", + "blumpkin", + "boiolas", + "bollock", + "bollocks", + "bollok", + "bollox", + "bondage", + "boner", + "boob", + "boobie", + "boobies", + "boobs", + "booger", + "booobs", + "boooobs", + "booooobs", + "booooooobs", + "booty", + "booty call", + "breast", + "breasts", + "brothel", + "brown showers", + "brunette action", + "buceta", + "buddha", + "bugger", + "bukkake", + "bulldyke", + "bullet vibe", + "bullshit", + "bum", + "bung hole", + "bunghole", + "bunny fucker", + "busty", + "butt", + "butt-pirate", + "buttcheeks", + "butthole", + "buttmunch", + "buttplug", + "c0ck", + "c0cksucker", + "camel toe", + "cameltoe", + "camgirl", + "camslut", + "camwhore", + "cancer", + "carpet muncher", + "carpetmuncher", + "castrate", + "catholic", + "cawk", + "chinc", + "chink", + "choad", + "chocolate rosebuds", + "chode", + "cipa", + "circlejerk", + "cl1t", + "cleveland steamer", + "clit", + "clitface", + "clitoris", + "clits", + "clover clamps", + "clusterfuck", + "cnut", + "cocaine", + "cock", + "cock-sucker", + "cockbite", + "cockblock", + "cockburger", + "cockface", + "cockhead", + "cockjockey", + "cockknoker", + "cocklicker", + "cockmaster", + "cockmongler", + "cockmongruel", + "cockmonkey", + "cockmunch", + "cockmuncher", + "cocknose", + "cocknugget", + "cocks", + "cockshit", + "cocksmith", + "cocksmoker", + "cocksuck", + "cocksucked", + "cocksucker", + "cocksucking", + "cocksucks", + "cocksuka", + "cocksukka", + "cok", + "cokmuncher", + "coksucka", + "condom", + "coochie", + "coochy", + "coon", + "coons", + "cooter", + "coprolagnia", + "coprophilia", + "copulate", + "cornhole", + "cox", + "crap", + "creampie", + "crotch", + "cum", + "cumbubble", + "cumdumpster", + "cumguzzler", + "cumjockey", + "cummer", + "cumming", + "cums", + "cumshot", + "cumslut", + "cumtart", + "cunilingus", + "cunillingus", + "cunnie", + "cunnilingus", + "cunt", + "cuntface", + "cunthole", + "cuntlick", + "cuntlicker", + "cuntlicking", + "cuntrag", + "cunts", + "cyalis", + "cyberfuc", + "cyberfuck", + "cyberfucked", + "cyberfucker", + "cyberfuckers", + "cyberfucking", + "cybersex", + "d1ck", + "dammit", + "damn", + "darkie", + "date rape", + "daterape", + "deep throat", + "deepthroat", + "dendrophilia", + "dick", + "dickbag", + "dickbeater", + "dickface", + "dickhead", + "dickhole", + "dickjuice", + "dickmilk", + "dickmonger", + "dickslap", + "dicksucker", + "dickwad", + "dickweasel", + "dickweed", + "dickwod", + "dike", + "dildo", + "dildos", + "dingleberries", + "dingleberry", + "dink", + "dinks", + "dipshit", + "dirsa", + "dirty pillows", + "dirty sanchez", + "dlck", + "dog style", + "dog-fucker", + "doggie style", + "doggiestyle", + "doggin", + "dogging", + "doggy style", + "doggystyle", + "dolcett", + "domination", + "dominatrix", + "dommes", + "donkey punch", + "donkeyribber", + "doochbag", + "dookie", + "doosh", + "double dong", + "double penetration", + "douche", + "douchebag", + "dp action", + "dry hump", + "duche", + "dumbass", + "dumbshit", + "dumshit", + "dvda", + "dyke", + "eat my ass", + "ecchi", + "ejaculate", + "ejaculated", + "ejaculates", + "ejaculating", + "ejaculatings", + "ejaculation", + "ejakulate", + "erection", + "erotic", + "erotism", + "escort", + "eunuch", + "excrement", + "f u c k", + "f u c k e r", + "f_u_c_k", + "f4nny", + "fag", + "fagbag", + "fagg", + "fagging", + "faggit", + "faggitt", + "faggot", + "faggs", + "fagot", + "fagots", + "fags", + "fagtard", + "fanny", + "fannyflaps", + "fannyfucker", + "fanyy", + "fart", + "farted", + "farting", + "farty", + "fatass", + "fcuk", + "fcuker", + "fcuking", + "fecal", + "feces", + "feck", + "fecker", + "felatio", + "felch", + "felching", + "fellate", + "fellatio", + "feltch", + "female squirting", + "femdom", + "figging", + "fingerbang", + "fingerfuck", + "fingerfucked", + "fingerfucker", + "fingerfuckers", + "fingerfucking", + "fingerfucks", + "fingering", + "fistfuck", + "fistfucked", + "fistfucker", + "fistfuckers", + "fistfucking", + "fistfuckings", + "fistfucks", + "fisting", + "flamer", + "flange", + "fook", + "fooker", + "foot fetish", + "footjob", + "footlicker", + "frotting", + "fuck", + "fuck buttons", + "fucka", + "fucked", + "fucker", + "fuckers", + "fuckhead", + "fuckheads", + "fuckin", + "fucking", + "fuckings", + "fuckingshitmotherfucker", + "fuckme", + "fucks", + "fucktards", + "fuckwhit", + "fuckwit", + "fudge packer", + "fudgepacker", + "fuk", + "fuker", + "fukker", + "fukkin", + "fuks", + "fukwhit", + "fukwit", + "futanari", + "fux", + "fux0r", + "g-spot", + "gang bang", + "gangbang", + "gangbanged", + "gangbangs", + "gay", + "gay sex", + "gayass", + "gaybob", + "gaydo", + "gaylord", + "gaysex", + "gaytard", + "gaywad", + "genital", + "genitals", + "giant cock", + "gigolo", + "girl on", + "girl on top", + "girls gone wild", + "goatcx", + "goatse", + "god damn", + "god-dam", + "god-damned", + "goddamn", + "goddamned", + "gokkun", + "golden shower", + "gonorrhea", + "goo girl", + "gooch", + "goodpoop", + "gook", + "goregasm", + "gringo", + "grope", + "group sex", + "guido", + "guro", + "hand job", + "handjob", + "hard core", + "hardcore", + "hardcoresex", + "heeb", + "hell", + "hentai", + "herpes", + "heshe", + "heterosexual", + "hitler", + "ho", + "hoar", + "hoare", + "hoe", + "hoer", + "homo", + "homoerotic", + "homosexual", + "honkey", + "honky", + "hooker", + "hore", + "horniest", + "horny", + "hosejob", + "hot carl", + "hot chick", + "hotsex", + "how to kill", + "how to murder", + "huge fat", + "humping", + "idiot", + "incest", + "intercourse", + "interracial", + "jack off", + "jack-off", + "jackass", + "jackoff", + "jail bait", + "jailbait", + "jap", + "jelly donut", + "jerk off", + "jerk-off", + "jerkoff", + "jesus", + "jewish", + "jigaboo", + "jiggaboo", + "jiggerboo", + "jism", + "jiz", + "jizm", + "jizz", + "juggs", + "kawk", + "kike", + "kinbaku", + "kinkster", + "kinky", + "kiunt", + "knob", + "knobbing", + "knobead", + "knobed", + "knobend", + "knobhead", + "knobjocky", + "knobjokey", + "kock", + "kondum", + "kondums", + "kooch", + "kootch", + "kum", + "kumer", + "kummer", + "kumming", + "kums", + "kunilingus", + "kunt", + "kyke", + "l3i+ch", + "l3itch", + "labia", + "leather restraint", + "leather straight jacket", + "lemon party", + "lesbian", + "lesbo", + "lezzie", + "libido", + "lmfao", + "lolita", + "lovemaking", + "lust", + "lusting", + "m0f0", + "m0fo", + "m45terbate", + "ma5terb8", + "ma5terbate", + "make me come", + "male squirting", + "marijuana", + "masochist", + "master-bate", + "masterb8", + "masterbat*", + "masterbat3", + "masterbate", + "masterbation", + "masterbations", + "masturbate", + "meatbeater", + "menage a trois", + "milf", + "minge", + "missionary position", + "mo-fo", + "mof0", + "mofo", + "molester", + "mongoloid", + "mormon", + "moron", + "mothafuck", + "mothafucka", + "mothafuckas", + "mothafuckaz", + "mothafucked", + "mothafucker", + "mothafuckers", + "mothafuckin", + "mothafucking", + "mothafuckings", + "mothafucks", + "mother fucker", + "motherfuck", + "motherfucked", + "motherfucker", + "motherfuckers", + "motherfuckin", + "motherfucking", + "motherfuckings", + "motherfuckka", + "motherfucks", + "mound of venus", + "mr hands", + "muff", + "muff diver", + "muffdiver", + "muffdiving", + "muslim", + "mutha", + "muthafecker", + "muthafuckker", + "muther", + "mutherfucker", + "n1gga", + "n1gger", + "nambla", + "nawashi", + "nazi", + "negro", + "neonazi", + "nig nog", + "nigg3r", + "nigg4h", + "nigga", + "niggah", + "niggas", + "niggaz", + "nigger", + "niggers", + "niglet", + "nimphomania", + "nipple", + "nipples", + "nob", + "nob jokey", + "nobhead", + "nobjocky", + "nobjokey", + "nsfw images", + "nude", + "nudity", + "numbnuts", + "nutsack", + "nympho", + "nymphomania", + "octopussy", + "omorashi", + "one cup two girls", + "one guy one jar", + "orgasim", + "orgasims", + "orgasm", + "orgasms", + "orgy", + "p0rn", + "paedophile", + "paki", + "panooch", + "panties", + "panty", + "pawn", + "pecker", + "peckerhead", + "pedobear", + "pedophile", + "peehole", + "pegging", + "penis", + "penisfucker", + "phone sex", + "phonesex", + "phuck", + "phuk", + "phuked", + "phuking", + "phukked", + "phukking", + "phuks", + "phuq", + "piece of shit", + "pigfucker", + "pimpis", + "pis", + "pises", + "pisin", + "pising", + "pisof", + "piss", + "piss pig", + "pissed", + "pisser", + "pissers", + "pisses", + "pissflap", + "pissflaps", + "pissin", + "pissing", + "pissoff", + "pisspig", + "playboy", + "pleasure chest", + "pole smoker", + "polesmoker", + "pollock", + "ponyplay", + "poo", + "poof", + "poon", + "poonani", + "poonany", + "poontang", + "poop", + "poop chute", + "poopchute", + "porn", + "porno", + "pornography", + "pornos", + "prick", + "pricks", + "prince albert piercing", + "pron", + "prostitute", + "pthc", + "pube", + "pubes", + "pubic", + "punanny", + "punany", + "punta", + "pusies", + "pusse", + "pussi", + "pussies", + "pussy", + "pussylicking", + "pussys", + "pusy", + "puto", + "queaf", + "queef", + "queer", + "queerbait", + "queerhole", + "quim", + "racist", + "raghead", + "raging boner", + "rape", + "raping", + "rapist", + "rectum", + "renob", + "retard", + "reverse cowgirl", + "rimjaw", + "rimjob", + "rimming", + "rosy palm", + "rosy palm and her 5 sisters", + "ruski", + "rusty trombone", + "s hit", + "s_h_i_t", + "s.o.b.", + "s&m", + "sadism", + "sadist", + "santorum", + "scat", + "schlong", + "scissoring", + "screwing", + "scroat", + "scrote", + "scrotum", + "scumbag", + "semen", + "sex", + "sexo", + "sexy", + "sh!+", + "sh!t", + "sh1t", + "shag", + "shagger", + "shaggin", + "shagging", + "shaved beaver", + "shaved pussy", + "shemale", + "shi+", + "shibari", + "shit", + "shit-ass", + "shit-bag", + "shit-bagger", + "shit-brain", + "shit-breath", + "shit-cunt", + "shit-dick", + "shit-eating", + "shit-face", + "shit-faced", + "shit-fit", + "shit-head", + "shit-heel", + "shit-hole", + "shit-house", + "shit-load", + "shit-pot", + "shit-spitter", + "shit-stain", + "shitass", + "shitbag", + "shitbagger", + "shitblimp", + "shitbrain", + "shitbreath", + "shitcunt", + "shitdick", + "shite", + "shiteating", + "shited", + "shitey", + "shitface", + "shitfaced", + "shitfit", + "shitfuck", + "shitfull", + "shithead", + "shitheel", + "shithole", + "shithouse", + "shiting", + "shitings", + "shitload", + "shitpot", + "shits", + "shitspitter", + "shitstain", + "shitted", + "shitter", + "shitters", + "shittiest", + "shitting", + "shittings", + "shitty", + "shity", + "shiz", + "shiznit", + "shota", + "shrimping", + "skank", + "skeet", + "slanteye", + "slut", + "slutbag", + "sluts", + "smeg", + "smegma", + "smut", + "snatch", + "snowballing", + "sodomize", + "sodomy", + "son-of-a-bitch", + "spac", + "sperm", + "spic", + "spick", + "splooge", + "splooge moose", + "spooge", + "spread legs", + "spunk", + "strap on", + "strapon", + "strappado", + "strip club", + "stupid", + "style doggy", + "suck", + "sucks", + "suicide", + "suicide girls", + "sultry women", + "swastika", + "swinger", + "syphilis", + "t1tt1e5", + "t1tties", + "tainted love", + "tard", + "taste my", + "tea bagging", + "teets", + "teez", + "testical", + "testicle", + "testicles", + "threesome", + "throating", + "thundercunt", + "tied up", + "tight white", + "tit", + "titfuck", + "tits", + "titt", + "tittie5", + "tittiefucker", + "titties", + "titty", + "tittyfuck", + "tittywank", + "titwank", + "tongue in a", + "topless", + "tosser", + "towelhead", + "tranny", + "tribadism", + "tub girl", + "tubgirl", + "turd", + "tushy", + "tw4t", + "twat", + "twathead", + "twatlips", + "twatty", + "twink", + "twinkie", + "two girls one cup", + "twunt", + "twunter", + "undressing", + "upskirt", + "urethra play", + "urophilia", + "v14gra", + "v1gra", + "va-j-j", + "vag", + "vagina", + "venus mound", + "viagra", + "vibrator", + "violet wand", + "vjayjay", + "vorarephilia", + "voyeur", + "vulva", + "w00se", + "wang", + "wank", + "wanker", + "wanky", + "weed", + "wet dream", + "wetback", + "white power", + "whoar", + "whore", + "willies", + "willy", + "wrapping men", + "wrinkled starfish", + "xrated", + "xx", + "xxx", + "yaoi", + "yellow showers", + "yiffy", + "zoophilia" + ] +} \ No newline at end of file diff --git a/script/20231020-rns-upgrade/20231020_RNSUpgrade.s.sol b/script/20231020-rns-upgrade/20231020_RNSUpgrade.s.sol new file mode 100644 index 00000000..88041b89 --- /dev/null +++ b/script/20231020-rns-upgrade/20231020_RNSUpgrade.s.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { RNSDeploy } from "script/RNSDeploy.s.sol"; + +contract Migration__20231020_RNSUpgrade is RNSDeploy { + function run() public trySetUp { + _upgradeProxy(ContractKey.RNSUnified, EMPTY_ARGS); + } +} diff --git a/script/20231021-upgrade-domain-price-and-auction/20231021_UpgradeDomainPriceAndAuction.s.sol b/script/20231021-upgrade-domain-price-and-auction/20231021_UpgradeDomainPriceAndAuction.s.sol new file mode 100644 index 00000000..ca410c29 --- /dev/null +++ b/script/20231021-upgrade-domain-price-and-auction/20231021_UpgradeDomainPriceAndAuction.s.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { RNSDeploy } from "script/RNSDeploy.s.sol"; + +contract Migration__20231021_UpgradeDomainPriceAndAuction is RNSDeploy { + function run() public trySetUp { + _upgradeProxy(ContractKey.RNSAuction, EMPTY_ARGS); + _upgradeProxy(ContractKey.RNSDomainPrice, EMPTY_ARGS); + } +} diff --git a/script/20231024-upgrade-auction/20231024_UpgradeAuction.s.sol b/script/20231024-upgrade-auction/20231024_UpgradeAuction.s.sol new file mode 100644 index 00000000..ec80d3ea --- /dev/null +++ b/script/20231024-upgrade-auction/20231024_UpgradeAuction.s.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { RNSDeploy } from "script/RNSDeploy.s.sol"; + +contract Migration__20231024_UpgradeAuction is RNSDeploy { + function run() public trySetUp { + _upgradeProxy(ContractKey.RNSAuction, EMPTY_ARGS); + } +} diff --git a/script/20231024-upgrade-domain-price/20231024_Config.s.sol b/script/20231024-upgrade-domain-price/20231024_Config.s.sol new file mode 100644 index 00000000..51ef33f6 --- /dev/null +++ b/script/20231024-upgrade-domain-price/20231024_Config.s.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Network, RNSDeploy } from "script/RNSDeploy.s.sol"; + +abstract contract Config__20231024 is RNSDeploy { + function _buildMigrationConfig() internal view virtual override returns (Config memory config) { + config = super._buildMigrationConfig(); + if (_network == Network.RoninTestnet) { + config.overrider = config.operator; + } else if (_network == Network.RoninMainnet) { + revert("Missing config"); + } else { + revert("Missing config"); + } + } +} diff --git a/script/20231024-upgrade-domain-price/20231024_UpgradeDomainPrice.s.sol b/script/20231024-upgrade-domain-price/20231024_UpgradeDomainPrice.s.sol new file mode 100644 index 00000000..030a984e --- /dev/null +++ b/script/20231024-upgrade-domain-price/20231024_UpgradeDomainPrice.s.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { console2 } from "forge-std/console2.sol"; +import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { RNSDomainPrice } from "@rns-contracts/RNSDomainPrice.sol"; +import { Config__20231024 } from "./20231024_Config.s.sol"; + +contract Migration__20231024_UpgradeDomainPrice is Config__20231024 { + function run() public trySetUp { + Config memory config = getConfig(); + _upgradeProxy(ContractKey.RNSDomainPrice, EMPTY_ARGS); + + console2.log("operator", config.operator); + console2.log("overrider", config.overrider); + + RNSDomainPrice domainPrice = RNSDomainPrice(_config.getAddressFromCurrentNetwork(ContractKey.RNSDomainPrice)); + address admin = domainPrice.getRoleMember(0x00, 0); + bytes32 overriderRole = domainPrice.OVERRIDER_ROLE(); + vm.broadcast(admin); + domainPrice.grantRole(overriderRole, config.overrider); + } +} diff --git a/script/20231024-upgrade-rns-unified/20231024_UpgradeRNSUnified.s.sol b/script/20231024-upgrade-rns-unified/20231024_UpgradeRNSUnified.s.sol new file mode 100644 index 00000000..2f467a8a --- /dev/null +++ b/script/20231024-upgrade-rns-unified/20231024_UpgradeRNSUnified.s.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { RNSDeploy } from "script/RNSDeploy.s.sol"; + +contract Migration__20231024_UpgradeRNSUnified is RNSDeploy { + function run() public trySetUp { + _upgradeProxy(ContractKey.RNSUnified, EMPTY_ARGS); + } +} diff --git a/script/20231025-upgrade-controller/20231025_UpgradeController.s.sol b/script/20231025-upgrade-controller/20231025_UpgradeController.s.sol new file mode 100644 index 00000000..e04f5ef5 --- /dev/null +++ b/script/20231025-upgrade-controller/20231025_UpgradeController.s.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { ContractKey } from "foundry-deployment-kit/configs/ContractConfig.sol"; +import { RNSDeploy } from "script/RNSDeploy.s.sol"; + +contract Migration__20231025_UpgradeController is RNSDeploy { + function run() public trySetUp { + _upgradeProxy(ContractKey.RONRegistrarController, EMPTY_ARGS); + } +} diff --git a/script/Debug.s.sol b/script/Debug.s.sol new file mode 100644 index 00000000..811e6082 --- /dev/null +++ b/script/Debug.s.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { RNSDeploy } from "./RNSDeploy.s.sol"; +import { ErrorHandler } from "@rns-contracts/libraries/ErrorHandler.sol"; + +contract Debug is RNSDeploy { + using ErrorHandler for *; + + function debug(uint256 forkBlock, address from, address to, uint256 value, bytes calldata callData) external { + if (forkBlock != 0) { + vm.rollFork(forkBlock); + } + vm.prank(from); + (bool success, bytes memory returnOrRevertData) = to.call{ value: value }(callData); + success.handleRevert(returnOrRevertData); + } +} diff --git a/script/RNSDeploy.s.sol b/script/RNSDeploy.s.sol new file mode 100644 index 00000000..beaab181 --- /dev/null +++ b/script/RNSDeploy.s.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { IPyth, INSDomainPrice, PeriodScaler } from "@rns-contracts/RNSDomainPrice.sol"; +import { BaseDeploy, Network } from "foundry-deployment-kit/BaseDeploy.s.sol"; + +abstract contract RNSDeploy is BaseDeploy { + struct Config { + IPyth pyth; + address admin; + address pauser; + address overrider; + address controller; + uint8 minWord; + uint8 maxWord; + address operator; + uint256 taxRatio; + uint64 gracePeriod; + string baseTokenURI; + uint256 bidGapRatio; + address protectedSettler; + address payable treasury; + uint256 maxAcceptableAge; + bytes32 pythIdForRONUSD; + uint256 maxCommitmentAge; + uint256 minCommitmentAge; + uint256 minRegistrationDuration; + PeriodScaler domainPriceScaleRule; + INSDomainPrice.RenewalFee[] renewalFees; + } + + function _buildMigrationConfig() internal view virtual returns (Config memory config) { + config.minWord = 2; + config.maxWord = 3; + config.minCommitmentAge = 10 seconds; + config.maxCommitmentAge = 1 days; + config.gracePeriod = 90 days; + config.baseTokenURI = "https://metadata-rns.skymavis.one/saigon/"; + { + config.renewalFees = new INSDomainPrice.RenewalFee[](3); + config.renewalFees[0] = INSDomainPrice.RenewalFee(5, uint256(5e18) / 365 days); + config.renewalFees[1] = INSDomainPrice.RenewalFee(4, uint256(100e18) / 365 days); + config.renewalFees[2] = INSDomainPrice.RenewalFee(3, uint256(300e18) / 365 days); + } + config.bidGapRatio = 1000; // 10% + config.taxRatio = 1500; // 15% + config.maxAcceptableAge = 24 hours; + config.domainPriceScaleRule = PeriodScaler({ ratio: 500, period: 30 days * 3 }); + + if (_network == Network.RoninTestnet) { + config.admin = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + config.pauser = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + config.operator = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + config.controller = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + config.pyth = IPyth(0xA2aa501b19aff244D90cc15a4Cf739D2725B5729); + config.protectedSettler = 0x968D0Cd7343f711216817E617d3f92a23dC91c07; + config.treasury = payable(0x968D0Cd7343f711216817E617d3f92a23dC91c07); + config.pythIdForRONUSD = 0x4cb9d530b042004b042e165ee0904b12fe534d40dac5fe1c71dfcdb522e6e3c2; + } else if (_network == Network.RoninMainnet) { + revert("Missing config"); + } else { + revert("Missing config"); + } + } + + function _buildMigrationRawConfig() internal view override returns (bytes memory rawConfig) { + Config memory config = _buildMigrationConfig(); + rawConfig = abi.encode(config); + } + + function getConfig() public view returns (Config memory config) { + bytes memory rawConfig = _config.getMigrationRawConfig(); + config = abi.decode(rawConfig, (Config)); + } +} diff --git a/script/contracts/NameCheckerDeploy.s.sol b/script/contracts/NameCheckerDeploy.s.sol new file mode 100644 index 00000000..f1db6117 --- /dev/null +++ b/script/contracts/NameCheckerDeploy.s.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { NameChecker } from "@rns-contracts/NameChecker.sol"; +import { RNSDeploy } from "../RNSDeploy.s.sol"; + +contract NameCheckerDeploy is RNSDeploy { + function _defaultArguments() internal virtual override returns (bytes memory args) { + Config memory config = getConfig(); + args = abi.encodeCall(NameChecker.initialize, (config.admin, config.minWord, config.maxWord)); + } + + function run() public virtual trySetUp returns (NameChecker) { + return NameChecker(_deployProxy(ContractKey.NameChecker)); + } +} diff --git a/script/contracts/PublicResolverDeploy.s.sol b/script/contracts/PublicResolverDeploy.s.sol new file mode 100644 index 00000000..72190be0 --- /dev/null +++ b/script/contracts/PublicResolverDeploy.s.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { PublicResolver } from "@rns-contracts/resolvers/PublicResolver.sol"; +import { RNSUnified, RNSUnifiedDeploy } from "./RNSUnifiedDeploy.s.sol"; +import { RNSReverseRegistrar, RNSReverseRegistrarDeploy } from "./RNSReverseRegistrarDeploy.s.sol"; +import { RNSDeploy } from "../RNSDeploy.s.sol"; + +contract PublicResolverDeploy is RNSDeploy { + function _injectDependencies() internal virtual override { + _setDependencyDeployScript(ContractKey.RNSUnified, new RNSUnifiedDeploy()); + _setDependencyDeployScript(ContractKey.RNSReverseRegistrar, new RNSReverseRegistrarDeploy()); + } + + function _defaultArguments() internal virtual override returns (bytes memory args) { + args = abi.encodeCall( + PublicResolver.initialize, + ( + RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified)), + RNSReverseRegistrar(loadContractOrDeploy(ContractKey.RNSReverseRegistrar)) + ) + ); + } + + function run() public virtual trySetUp returns (PublicResolver) { + return PublicResolver(_deployProxy(ContractKey.PublicResolver)); + } +} diff --git a/script/contracts/RNSAuctionDeploy.s.sol b/script/contracts/RNSAuctionDeploy.s.sol new file mode 100644 index 00000000..a9866bf0 --- /dev/null +++ b/script/contracts/RNSAuctionDeploy.s.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { RNSAuction } from "@rns-contracts/RNSAuction.sol"; +import { RNSUnified, RNSUnifiedDeploy } from "./RNSUnifiedDeploy.s.sol"; +import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { RNSDeploy } from "../RNSDeploy.s.sol"; + +contract RNSAuctionDeploy is RNSDeploy { + function _injectDependencies() internal virtual override { + _setDependencyDeployScript(ContractKey.RNSUnified, new RNSUnifiedDeploy()); + } + + function _defaultArguments() internal virtual override returns (bytes memory args) { + Config memory config = getConfig(); + address[] memory operators = new address[](1); + operators[0] = config.operator; + args = abi.encodeCall( + RNSAuction.initialize, + ( + config.admin, + operators, + RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified)), + config.treasury, + config.bidGapRatio + ) + ); + } + + function run() public virtual trySetUp returns (RNSAuction) { + return RNSAuction(_deployProxy(ContractKey.RNSAuction)); + } +} diff --git a/script/contracts/RNSDomainPriceDeploy.s.sol b/script/contracts/RNSDomainPriceDeploy.s.sol new file mode 100644 index 00000000..09c84d31 --- /dev/null +++ b/script/contracts/RNSDomainPriceDeploy.s.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { RNSDomainPrice } from "@rns-contracts/RNSDomainPrice.sol"; +import { RNSAuction, RNSAuctionDeploy } from "./RNSAuctionDeploy.s.sol"; +import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { RNSDeploy } from "../RNSDeploy.s.sol"; + +contract RNSDomainPriceDeploy is RNSDeploy { + function _injectDependencies() internal virtual override { + _setDependencyDeployScript(ContractKey.RNSAuction, new RNSAuctionDeploy()); + } + + function _defaultArguments() internal virtual override returns (bytes memory args) { + Config memory config = getConfig(); + address[] memory operators = new address[](1); + operators[0] = config.operator; + args = abi.encodeCall( + RNSDomainPrice.initialize, + ( + config.admin, + operators, + config.renewalFees, + config.taxRatio, + config.domainPriceScaleRule, + config.pyth, + RNSAuction(loadContractOrDeploy(ContractKey.RNSAuction)), + config.maxAcceptableAge, + config.pythIdForRONUSD + ) + ); + } + + function run() public virtual trySetUp returns (RNSDomainPrice) { + return RNSDomainPrice(_deployProxy(ContractKey.RNSDomainPrice)); + } +} diff --git a/script/contracts/RNSReverseRegistrarDeploy.s.sol b/script/contracts/RNSReverseRegistrarDeploy.s.sol new file mode 100644 index 00000000..370a1c1e --- /dev/null +++ b/script/contracts/RNSReverseRegistrarDeploy.s.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { RNSReverseRegistrar } from "@rns-contracts/RNSReverseRegistrar.sol"; +import { RNSUnified, RNSUnifiedDeploy } from "./RNSUnifiedDeploy.s.sol"; +import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { RNSDeploy } from "../RNSDeploy.s.sol"; + +contract RNSReverseRegistrarDeploy is RNSDeploy { + function _injectDependencies() internal virtual override { + _setDependencyDeployScript(ContractKey.RNSUnified, new RNSUnifiedDeploy()); + } + + function _defaultArguments() internal virtual override returns (bytes memory args) { + Config memory config = getConfig(); + address[] memory operators = new address[](1); + operators[0] = config.operator; + args = abi.encodeCall( + RNSReverseRegistrar.initialize, (config.admin, RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified))) + ); + } + + function run() public virtual trySetUp returns (RNSReverseRegistrar) { + return RNSReverseRegistrar(_deployProxy(ContractKey.RNSReverseRegistrar)); + } +} diff --git a/script/contracts/RNSUnifiedDeploy.s.sol b/script/contracts/RNSUnifiedDeploy.s.sol new file mode 100644 index 00000000..406fa9e9 --- /dev/null +++ b/script/contracts/RNSUnifiedDeploy.s.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { RNSUnified } from "@rns-contracts/RNSUnified.sol"; +import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { RNSDeploy } from "../RNSDeploy.s.sol"; + +contract RNSUnifiedDeploy is RNSDeploy { + function _defaultArguments() internal view override returns (bytes memory args) { + Config memory config = getConfig(); + args = abi.encodeCall( + RNSUnified.initialize, + (config.admin, config.pauser, config.controller, config.protectedSettler, config.gracePeriod, config.baseTokenURI) + ); + } + + function run() public virtual trySetUp returns (RNSUnified) { + return RNSUnified(_deployProxy(ContractKey.RNSUnified)); + } +} diff --git a/script/contracts/RONRegistrarControllerDeploy.s.sol b/script/contracts/RONRegistrarControllerDeploy.s.sol new file mode 100644 index 00000000..830d41d8 --- /dev/null +++ b/script/contracts/RONRegistrarControllerDeploy.s.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { RONRegistrarController } from "@rns-contracts/RONRegistrarController.sol"; +import { RNSUnified, RNSUnifiedDeploy } from "./RNSUnifiedDeploy.s.sol"; +import { NameChecker, NameCheckerDeploy } from "./NameCheckerDeploy.s.sol"; +import { RNSDomainPrice, RNSDomainPriceDeploy } from "./RNSDomainPriceDeploy.s.sol"; +import { RNSReverseRegistrar, RNSReverseRegistrarDeploy } from "./RNSReverseRegistrarDeploy.s.sol"; +import { BaseDeploy, ContractKey } from "foundry-deployment-kit/BaseDeploy.s.sol"; +import { RNSDeploy } from "../RNSDeploy.s.sol"; + +contract RONRegistrarControllerDeploy is RNSDeploy { + function _injectDependencies() internal virtual override { + _setDependencyDeployScript(ContractKey.RNSUnified, new RNSUnifiedDeploy()); + _setDependencyDeployScript(ContractKey.NameChecker, new NameCheckerDeploy()); + _setDependencyDeployScript(ContractKey.RNSDomainPrice, new RNSDomainPriceDeploy()); + _setDependencyDeployScript(ContractKey.RNSReverseRegistrar, new RNSReverseRegistrarDeploy()); + } + + function _defaultArguments() internal virtual override returns (bytes memory args) { + Config memory config = getConfig(); + address[] memory operators = new address[](1); + operators[0] = config.operator; + args = abi.encodeCall( + RONRegistrarController.initialize, + ( + config.admin, + config.pauser, + config.treasury, + config.maxAcceptableAge, + config.minCommitmentAge, + config.minRegistrationDuration, + RNSUnified(loadContractOrDeploy(ContractKey.RNSUnified)), + NameChecker(loadContractOrDeploy(ContractKey.NameChecker)), + RNSDomainPrice(loadContractOrDeploy(ContractKey.RNSDomainPrice)), + RNSReverseRegistrar(loadContractOrDeploy(ContractKey.RNSReverseRegistrar)) + ) + ); + } + + function run() public virtual trySetUp returns (RONRegistrarController) { + return RONRegistrarController(_deployProxy(ContractKey.RONRegistrarController)); + } +} diff --git a/src/NameChecker.sol b/src/NameChecker.sol new file mode 100644 index 00000000..267da96d --- /dev/null +++ b/src/NameChecker.sol @@ -0,0 +1,209 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { AccessControlEnumerable } from "@openzeppelin/contracts/access/AccessControlEnumerable.sol"; +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import { BitMaps } from "@openzeppelin/contracts/utils/structs/BitMaps.sol"; +import { Math, LibSubString } from "./libraries/LibSubString.sol"; +import { INameChecker } from "./interfaces/INameChecker.sol"; + +contract NameChecker is Initializable, AccessControlEnumerable, INameChecker { + using LibSubString for *; + using BitMaps for BitMaps.BitMap; + + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + LibSubString.WordRange internal _wordRange; + BitMaps.BitMap internal _forbiddenWordMap; + + constructor() payable { + _disableInitializers(); + } + + function initialize(address admin, uint8 min, uint8 max) external initializer { + _setupRole(DEFAULT_ADMIN_ROLE, admin); + _setWordRange(min, max); + } + + /** + * @inheritdoc INameChecker + */ + function getWordRange() external view returns (uint8 min, uint8 max) { + LibSubString.WordRange memory wordRange = _wordRange; + return (wordRange.min, wordRange.max); + } + + /** + * @inheritdoc INameChecker + */ + function setWordRange(uint8 min, uint8 max) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setWordRange(min, max); + } + + /** + * @inheritdoc INameChecker + */ + function forbidden(string calldata name) public view returns (bool) { + return containsInvalidCharacter(name) || containsBlacklistedWord(name); + } + + /** + * @inheritdoc INameChecker + */ + function containsBlacklistedWord(string calldata name) public view returns (bool) { + string[] memory sstrs = getAllSubStrings(name); + uint256 length = sstrs.length; + + for (uint256 i; i < length;) { + if (_forbiddenWordMap.get(pack(sstrs[i]))) return true; + + unchecked { + ++i; + } + } + + return false; + } + + /** + * @inheritdoc INameChecker + */ + function containsInvalidCharacter(string calldata name) public pure returns (bool) { + unchecked { + bytes1 char; + bytes memory bName = bytes(name); + uint256 length = bName.length; + + uint256 tail = length - 1; + // Check if the name is empty or starts or ends with a hyphen (-) + if (length == 0 || bName[0] == 0x2d || bName[tail] == 0x2d) return true; + + // [0x30, 0x39] => [0-9] + // [0x61, 0x7a] => [a-z] + for (uint256 i; i < length; ++i) { + char = bName[i]; + if (char == 0x2d) { + // Check consecutive hyphens + if (i != tail && bName[i + 1] == 0x2d) return true; + } + // Check for invalid character (not (-) || [0-9] || [a-z]) + else if (!((char >= 0x30 && char <= 0x39) || (char >= 0x61 && char <= 0x7a))) { + return true; + } + } + + return false; + } + } + + /** + * @inheritdoc INameChecker + */ + function pack(string memory str) public pure returns (uint256 packed) { + assembly ("memory-safe") { + // We don't need to zero right pad the string, + // since this is our own custom non-standard packing scheme. + packed := + mul( + // Load the length and the bytes. + mload(add(str, 0x1f)), + // `length != 0 && length < 32`. Abuses underflow. + // Assumes that the length is valid and within the block gas limit. + lt(sub(mload(str), 1), 0x1f) + ) + } + } + + /** + * @inheritdoc INameChecker + */ + function packBulk(string[] memory strs) public pure returns (uint256[] memory packeds) { + uint256 length = strs.length; + packeds = new uint256[](length); + + for (uint256 i; i < length;) { + packeds[i] = pack(strs[i]); + + unchecked { + ++i; + } + } + } + + /** + * @inheritdoc INameChecker + */ + function setForbiddenWords(string[] calldata words, bool shouldForbid) external onlyRole(DEFAULT_ADMIN_ROLE) { + uint256[] memory packedWords = packBulk(words); + _setForbiddenWords(packedWords, shouldForbid); + } + + /** + * @inheritdoc INameChecker + */ + function setForbiddenWords(uint256[] calldata packedWords, bool shouldForbid) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setForbiddenWords(packedWords, shouldForbid); + } + + /** + * @inheritdoc INameChecker + */ + function totalSubString(uint256 strlen) public view returns (uint256 total, uint256 min, uint256 max) { + (total, min, max) = strlen.totalSubString(_wordRange); + } + + /** + * @inheritdoc INameChecker + */ + function getAllSubStrings(string calldata str) public view returns (string[] memory subStrings) { + subStrings = str.getAllSubStrings(_wordRange); + } + + /** + * @dev Set the forbidden status of packed words. + * @param packedWords An array of packed word representations. + * @param shouldForbid A boolean flag indicating whether to forbid or unforbid the words. + * @notice It ensures that packed words are not zero, indicating their validity. + * @notice Emits a `ForbiddenWordsUpdated` event upon successful execution. + */ + function _setForbiddenWords(uint256[] memory packedWords, bool shouldForbid) internal { + uint256 length = packedWords.length; + uint256 strlen; + uint256 max; + uint256 min = type(uint256).max; + + for (uint256 i; i < length;) { + require(packedWords[i] != 0, "NameChecker: invalid packed word"); + strlen = packedWords[i] >> 0xf8; + min = Math.min(min, strlen); + max = Math.max(max, strlen); + _forbiddenWordMap.setTo(packedWords[i], shouldForbid); + + unchecked { + ++i; + } + } + + if (shouldForbid) { + LibSubString.WordRange memory wordRange = _wordRange; + min = Math.min(min, wordRange.min); + max = Math.max(max, wordRange.max); + if (!(min == wordRange.min && max == wordRange.max)) _setWordRange(uint8(min), uint8(max)); + } + + emit ForbiddenWordsUpdated(_msgSender(), length, shouldForbid); + } + + /** + * @dev Set the allowed word length range. + * @param min The minimum word length allowed. + * @param max The maximum word length allowed. + * @notice The minimum word length must be greater than 0, and it must not exceed the maximum word length. + */ + function _setWordRange(uint8 min, uint8 max) internal { + require(min != 0 && min <= max, "NameChecker: min word length > max word length"); + _wordRange = LibSubString.WordRange(min, max); + emit WordRangeUpdated(_msgSender(), min, max); + } +} diff --git a/src/RNSAuction.sol b/src/RNSAuction.sol new file mode 100644 index 00000000..585d68db --- /dev/null +++ b/src/RNSAuction.sol @@ -0,0 +1,340 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import { AccessControlEnumerable } from "@openzeppelin/contracts/access/AccessControlEnumerable.sol"; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; +import { BitMaps } from "@openzeppelin/contracts/utils/structs/BitMaps.sol"; +import { INSUnified, INSAuction } from "./interfaces/INSAuction.sol"; +import { LibSafeRange } from "./libraries/math/LibSafeRange.sol"; +import { LibRNSDomain } from "./libraries/LibRNSDomain.sol"; +import { LibEventRange, EventRange } from "./libraries/LibEventRange.sol"; +import { RONTransferHelper } from "./libraries/transfers/RONTransferHelper.sol"; + +contract RNSAuction is Initializable, AccessControlEnumerable, INSAuction { + using LibSafeRange for uint256; + using BitMaps for BitMaps.BitMap; + using LibEventRange for EventRange; + + /// @inheritdoc INSAuction + uint64 public constant MAX_EXPIRY = type(uint64).max; + /// @inheritdoc INSAuction + uint256 public constant MAX_PERCENTAGE = 100_00; + /// @inheritdoc INSAuction + uint64 public constant DOMAIN_EXPIRY_DURATION = 365 days; + /// @inheritdoc INSAuction + uint64 public constant MAX_AUCTION_DOMAIN_EXPIRY = 365 days * 3; + /// @inheritdoc INSAuction + bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE"); + + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + /// @dev The RNSUnified contract. + INSUnified internal _rnsUnified; + /// @dev Mapping from auction Id => event range + mapping(bytes32 auctionId => EventRange) internal _auctionRange; + /// @dev Mapping from id of domain names => auction detail. + mapping(uint256 id => DomainAuction) internal _domainAuction; + + /// @dev The treasury. + address payable internal _treasury; + /// @dev The gap ratio between 2 bids with the starting price. + uint256 internal _bidGapRatio; + /// @dev Mapping from id => bool reserved status + BitMaps.BitMap internal _reserved; + + modifier whenNotStarted(bytes32 auctionId) { + _requireNotStarted(auctionId); + _; + } + + modifier onlyValidEventRange(EventRange calldata range) { + _requireValidEventRange(range); + _; + } + + constructor() payable { + _disableInitializers(); + } + + function initialize( + address admin, + address[] calldata operators, + INSUnified rnsUnified, + address payable treasury, + uint256 bidGapRatio + ) external initializer { + _setTreasury(treasury); + _setBidGapRatio(bidGapRatio); + _setupRole(DEFAULT_ADMIN_ROLE, admin); + + uint256 length = operators.length; + bytes32 operatorRole = OPERATOR_ROLE; + + for (uint256 i; i < length;) { + _setupRole(operatorRole, operators[i]); + + unchecked { + ++i; + } + } + + _rnsUnified = rnsUnified; + } + + /** + * @inheritdoc INSAuction + */ + function bulkRegister(string[] calldata labels) external onlyRole(OPERATOR_ROLE) returns (uint256[] memory ids) { + uint256 length = labels.length; + if (length == 0) revert InvalidArrayLength(); + ids = new uint256[](length); + INSUnified rnsUnified = _rnsUnified; + uint256 parentId = LibRNSDomain.RON_ID; + uint64 domainExpiryDuration = DOMAIN_EXPIRY_DURATION; + + for (uint256 i; i < length;) { + (, ids[i]) = rnsUnified.mint(parentId, labels[i], address(0x0), address(this), domainExpiryDuration); + _reserved.set(ids[i]); + + unchecked { + ++i; + } + } + } + + /** + * @inheritdoc INSAuction + */ + function reserved(uint256 id) public view returns (bool) { + return _reserved.get(id); + } + + /** + * @inheritdoc INSAuction + */ + function createAuctionEvent(EventRange calldata range) + external + onlyRole(DEFAULT_ADMIN_ROLE) + onlyValidEventRange(range) + returns (bytes32 auctionId) + { + auctionId = keccak256(abi.encode(_msgSender(), range)); + _auctionRange[auctionId] = range; + emit AuctionEventSet(auctionId, range); + } + + /** + * @inheritdoc INSAuction + */ + function setAuctionEvent(bytes32 auctionId, EventRange calldata range) + external + onlyRole(DEFAULT_ADMIN_ROLE) + onlyValidEventRange(range) + whenNotStarted(auctionId) + { + _auctionRange[auctionId] = range; + emit AuctionEventSet(auctionId, range); + } + + /** + * @inheritdoc INSAuction + */ + function getAuctionEvent(bytes32 auctionId) public view returns (EventRange memory) { + return _auctionRange[auctionId]; + } + + /** + * @inheritdoc INSAuction + */ + function listNamesForAuction(bytes32 auctionId, uint256[] calldata ids, uint256[] calldata startingPrices) + external + onlyRole(OPERATOR_ROLE) + whenNotStarted(auctionId) + { + uint256 length = ids.length; + if (length == 0 || length != startingPrices.length) revert InvalidArrayLength(); + uint256 id; + bytes32 mAuctionId; + DomainAuction storage sAuction; + + for (uint256 i; i < length;) { + id = ids[i]; + if (!reserved(id)) revert NameNotReserved(); + + sAuction = _domainAuction[id]; + mAuctionId = sAuction.auctionId; + if (!(mAuctionId == 0 || mAuctionId == auctionId || sAuction.bid.timestamp == 0)) { + revert AlreadyBidding(); + } + + sAuction.auctionId = auctionId; + sAuction.startingPrice = startingPrices[i]; + + unchecked { + ++i; + } + } + + emit LabelsListed(auctionId, ids, startingPrices); + } + + /** + * @inheritdoc INSAuction + */ + function placeBid(uint256 id) external payable { + DomainAuction memory auction = _domainAuction[id]; + EventRange memory range = _auctionRange[auction.auctionId]; + uint256 beatPrice = _getBeatPrice(auction, range); + + if (!range.isInPeriod()) revert QueryIsNotInPeriod(); + if (msg.value < beatPrice) revert InsufficientAmount(); + address payable bidder = payable(_msgSender()); + // check whether the bidder can receive RON + if (bidder != tx.origin) revert ContractBidderIsForbidden(); + address payable prvBidder = auction.bid.bidder; + uint256 prvPrice = auction.bid.price; + + Bid storage sBid = _domainAuction[id].bid; + sBid.price = msg.value; + sBid.bidder = bidder; + sBid.timestamp = block.timestamp; + emit BidPlaced(auction.auctionId, id, msg.value, bidder, prvPrice, prvBidder); + + // refund for previous bidder + if (prvPrice != 0) RONTransferHelper.safeTransfer(prvBidder, prvPrice); + } + + /** + * @inheritdoc INSAuction + */ + function bulkClaimBidNames(uint256[] calldata ids) external returns (uint256[] memory claimedAts) { + uint256 id; + uint256 accumulatedRON; + EventRange memory range; + DomainAuction memory auction; + uint256 length = ids.length; + claimedAts = new uint256[](length); + INSUnified rnsUnified = _rnsUnified; + uint64 expiry = uint64(block.timestamp.addWithUpperbound(DOMAIN_EXPIRY_DURATION, MAX_EXPIRY)); + + for (uint256 i; i < length;) { + id = ids[i]; + auction = _domainAuction[id]; + range = _auctionRange[auction.auctionId]; + + if (auction.bid.claimedAt == 0) { + if (!range.isEnded()) revert NotYetEnded(); + if (auction.bid.timestamp == 0) revert NoOneBidded(); + + accumulatedRON += auction.bid.price; + rnsUnified.setExpiry(id, expiry); + rnsUnified.transferFrom(address(this), auction.bid.bidder, id); + + _domainAuction[id].bid.claimedAt = claimedAts[i] = block.timestamp; + } + + unchecked { + ++i; + } + } + + RONTransferHelper.safeTransfer(_treasury, accumulatedRON); + } + + /** + * @inheritdoc INSAuction + */ + function getRNSUnified() external view returns (INSUnified) { + return _rnsUnified; + } + + /** + * @inheritdoc INSAuction + */ + function getTreasury() external view returns (address) { + return _treasury; + } + + /** + * @inheritdoc INSAuction + */ + function getBidGapRatio() external view returns (uint256) { + return _bidGapRatio; + } + + /** + * @inheritdoc INSAuction + */ + function setTreasury(address payable addr) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setTreasury(addr); + } + + /** + * @inheritdoc INSAuction + */ + + function setBidGapRatio(uint256 ratio) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setBidGapRatio(ratio); + } + + /** + * @inheritdoc INSAuction + */ + function getAuction(uint256 id) public view returns (DomainAuction memory auction, uint256 beatPrice) { + auction = _domainAuction[id]; + EventRange memory range = getAuctionEvent(auction.auctionId); + beatPrice = _getBeatPrice(auction, range); + } + + /** + * @dev Helper method to set treasury. + * + * Emits an event {TreasuryUpdated}. + */ + function _setTreasury(address payable addr) internal { + if (addr == address(0)) revert NullAssignment(); + _treasury = addr; + emit TreasuryUpdated(addr); + } + + /** + * @dev Helper method to set bid gap ratio. + * + * Emits an event {BidGapRatioUpdated}. + */ + function _setBidGapRatio(uint256 ratio) internal { + if (ratio > MAX_PERCENTAGE) revert RatioIsTooLarge(); + _bidGapRatio = ratio; + emit BidGapRatioUpdated(ratio); + } + + /** + * @dev Helper method to get beat price. + */ + function _getBeatPrice(DomainAuction memory auction, EventRange memory range) + internal + view + returns (uint256 beatPrice) + { + beatPrice = Math.max(auction.startingPrice, auction.bid.price); + // Beats price increases if domain is already bided and the event is not yet ended. + if (auction.bid.price != 0 && !range.isEnded()) { + beatPrice += Math.mulDiv(auction.startingPrice, _bidGapRatio, MAX_PERCENTAGE); + } + } + + /** + * @dev Helper method to ensure event range is valid. + */ + function _requireValidEventRange(EventRange calldata range) internal view { + if (!(range.valid() && range.isNotYetStarted())) revert InvalidEventRange(); + } + + /** + * @dev Helper method to ensure the auction is not yet started or not created. + */ + function _requireNotStarted(bytes32 auctionId) internal view { + if (!_auctionRange[auctionId].isNotYetStarted()) revert EventIsNotCreatedOrAlreadyStarted(); + } +} diff --git a/src/RNSDomainPrice.sol b/src/RNSDomainPrice.sol new file mode 100644 index 00000000..0187f2a6 --- /dev/null +++ b/src/RNSDomainPrice.sol @@ -0,0 +1,412 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import { AccessControlEnumerable } from "@openzeppelin/contracts/access/AccessControlEnumerable.sol"; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; +import { IPyth, PythStructs } from "@pythnetwork/IPyth.sol"; +import { INSUnified } from "./interfaces/INSUnified.sol"; +import { INSAuction } from "./interfaces/INSAuction.sol"; +import { INSDomainPrice } from "./interfaces/INSDomainPrice.sol"; +import { PeriodScaler, LibPeriodScaler, Math } from "./libraries/math/PeriodScalingUtils.sol"; +import { TimestampWrapper } from "./libraries/TimestampWrapperUtils.sol"; +import { LibSafeRange } from "./libraries/math/LibSafeRange.sol"; +import { LibString } from "./libraries/LibString.sol"; +import { LibRNSDomain } from "./libraries/LibRNSDomain.sol"; +import { PythConverter } from "./libraries/pyth/PythConverter.sol"; + +contract RNSDomainPrice is Initializable, AccessControlEnumerable, INSDomainPrice { + using LibString for *; + using LibRNSDomain for string; + using LibPeriodScaler for PeriodScaler; + using PythConverter for PythStructs.Price; + + /// @inheritdoc INSDomainPrice + uint8 public constant USD_DECIMALS = 18; + /// @inheritdoc INSDomainPrice + uint64 public constant MAX_PERCENTAGE = 100_00; + /// @inheritdoc INSDomainPrice + bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE"); + /// @inheritdoc INSDomainPrice + bytes32 public constant OVERRIDER_ROLE = keccak256("OVERRIDER_ROLE"); + + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev Pyth oracle contract + IPyth internal _pyth; + /// @dev RNSAuction contract + INSAuction internal _auction; + /// @dev Extra fee for renewals based on the current domain price. + uint256 internal _taxRatio; + /// @dev Max length of the renewal fee + uint256 internal _rnfMaxLength; + /// @dev Max acceptable age of the price oracle request + uint256 internal _maxAcceptableAge; + /// @dev Price feed ID on Pyth for RON/USD + bytes32 internal _pythIdForRONUSD; + /// @dev The percentage scale from domain price each period + PeriodScaler internal _dpDownScaler; + + /// @dev Mapping from domain length => renewal fee in USD + mapping(uint256 length => uint256 usdPrice) internal _rnFee; + /// @dev Mapping from name => domain price in USD + mapping(bytes32 lbHash => TimestampWrapper usdPrice) internal _dp; + /// @dev Mapping from name => inverse bitwise of renewal fee overriding. + mapping(bytes32 lbHash => uint256 usdPrice) internal _rnFeeOverriding; + + constructor() payable { + _disableInitializers(); + } + + function initialize( + address admin, + address[] calldata operators, + RenewalFee[] calldata renewalFees, + uint256 taxRatio, + PeriodScaler calldata domainPriceScaleRule, + IPyth pyth, + INSAuction auction, + uint256 maxAcceptableAge, + bytes32 pythIdForRONUSD + ) external initializer { + uint256 length = operators.length; + bytes32 operatorRole = OPERATOR_ROLE; + + for (uint256 i; i < length;) { + _setupRole(operatorRole, operators[i]); + + unchecked { + ++i; + } + } + _auction = auction; + _setupRole(DEFAULT_ADMIN_ROLE, admin); + _setRenewalFeeByLengths(renewalFees); + _setTaxRatio(taxRatio); + _setDomainPriceScaleRule(domainPriceScaleRule); + _setPythOracleConfig(pyth, maxAcceptableAge, pythIdForRONUSD); + } + + /** + * @inheritdoc INSDomainPrice + */ + function getPythOracleConfig() external view returns (IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) { + return (_pyth, _maxAcceptableAge, _pythIdForRONUSD); + } + + /** + * @inheritdoc INSDomainPrice + */ + function setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) + external + onlyRole(DEFAULT_ADMIN_ROLE) + { + _setPythOracleConfig(pyth, maxAcceptableAge, pythIdForRONUSD); + } + + /** + * @inheritdoc INSDomainPrice + */ + function getRenewalFeeByLengths() external view returns (RenewalFee[] memory renewalFees) { + uint256 rnfMaxLength = _rnfMaxLength; + renewalFees = new RenewalFee[](rnfMaxLength); + uint256 len; + + for (uint256 i; i < rnfMaxLength;) { + unchecked { + len = i + 1; + renewalFees[i].labelLength = len; + renewalFees[i].fee = _rnFee[len]; + ++i; + } + } + } + + /** + * @inheritdoc INSDomainPrice + */ + function setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setRenewalFeeByLengths(renewalFees); + } + + /** + * @inheritdoc INSDomainPrice + */ + function getTaxRatio() external view returns (uint256 ratio) { + return _taxRatio; + } + + /** + * @inheritdoc INSDomainPrice + */ + function setTaxRatio(uint256 ratio) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setTaxRatio(ratio); + } + + /** + * @inheritdoc INSDomainPrice + */ + function getScaleDownRuleForDomainPrice() external view returns (PeriodScaler memory scaleRule) { + return _dpDownScaler; + } + + /** + * @inheritdoc INSDomainPrice + */ + function setScaleDownRuleForDomainPrice(PeriodScaler calldata scaleRule) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setDomainPriceScaleRule(scaleRule); + } + + /** + * @inheritdoc INSDomainPrice + */ + function getOverriddenRenewalFee(string calldata label) external view returns (uint256 usdFee) { + usdFee = _rnFeeOverriding[label.hashLabel()]; + if (usdFee == 0) revert RenewalFeeIsNotOverriden(); + return ~usdFee; + } + + /** + * @inheritdoc INSDomainPrice + */ + function bulkOverrideRenewalFees(bytes32[] calldata lbHashes, uint256[] calldata usdPrices) + external + onlyRole(OVERRIDER_ROLE) + { + uint256 length = lbHashes.length; + if (length == 0 || length != usdPrices.length) revert InvalidArrayLength(); + uint256 inverseBitwise; + address operator = _msgSender(); + + for (uint256 i; i < length;) { + inverseBitwise = ~usdPrices[i]; + _rnFeeOverriding[lbHashes[i]] = inverseBitwise; + emit RenewalFeeOverridingUpdated(operator, lbHashes[i], inverseBitwise); + + unchecked { + ++i; + } + } + } + + /** + * @inheritdoc INSDomainPrice + */ + function bulkTrySetDomainPrice( + bytes32[] calldata lbHashes, + uint256[] calldata ronPrices, + bytes32[] calldata proofHashes, + uint256[] calldata setTypes + ) external onlyRole(OPERATOR_ROLE) returns (bool[] memory updated) { + uint256 length = _requireBulkSetDomainPriceArgumentsValid(lbHashes, ronPrices, proofHashes, setTypes); + address operator = _msgSender(); + updated = new bool[](length); + + for (uint256 i; i < length;) { + updated[i] = _setDomainPrice(operator, lbHashes[i], ronPrices[i], proofHashes[i], setTypes[i], false); + + unchecked { + ++i; + } + } + } + + /** + * @inheritdoc INSDomainPrice + */ + function bulkSetDomainPrice( + bytes32[] calldata lbHashes, + uint256[] calldata ronPrices, + bytes32[] calldata proofHashes, + uint256[] calldata setTypes + ) external onlyRole(OVERRIDER_ROLE) { + uint256 length = _requireBulkSetDomainPriceArgumentsValid(lbHashes, ronPrices, proofHashes, setTypes); + address operator = _msgSender(); + + for (uint256 i; i < length;) { + _setDomainPrice(operator, lbHashes[i], ronPrices[i], proofHashes[i], setTypes[i], true); + unchecked { + ++i; + } + } + } + + /** + * @inheritdoc INSDomainPrice + */ + function getDomainPrice(string memory label) public view returns (uint256 usdPrice, uint256 ronPrice) { + usdPrice = _getDomainPrice(label.hashLabel()); + ronPrice = convertUSDToRON(usdPrice); + } + + /** + * @inheritdoc INSDomainPrice + */ + function getRenewalFee(string memory label, uint256 duration) + public + view + returns (UnitPrice memory basePrice, UnitPrice memory tax) + { + uint256 nameLen = label.strlen(); + bytes32 lbHash = label.hashLabel(); + uint256 overriddenRenewalFee = _rnFeeOverriding[lbHash]; + + if (overriddenRenewalFee != 0) { + basePrice.usd = duration * ~overriddenRenewalFee; + } else { + uint256 renewalFeeByLength = _rnFee[Math.min(nameLen, _rnfMaxLength)]; + basePrice.usd = duration * renewalFeeByLength; + uint256 id = LibRNSDomain.toId(LibRNSDomain.RON_ID, label); + INSAuction auction = _auction; + if (auction.reserved(id)) { + INSUnified rns = auction.getRNSUnified(); + uint256 expiry = LibSafeRange.addWithUpperbound(rns.getRecord(id).mut.expiry, duration, type(uint64).max); + (INSAuction.DomainAuction memory domainAuction,) = auction.getAuction(id); + uint256 claimedAt = domainAuction.bid.claimedAt; + if (claimedAt != 0 && expiry - claimedAt > auction.MAX_AUCTION_DOMAIN_EXPIRY()) { + revert ExceedAuctionDomainExpiry(); + } + // Tax is added to the name reserved for the auction + tax.usd = Math.mulDiv(_taxRatio, _getDomainPrice(lbHash), MAX_PERCENTAGE); + } + } + + tax.ron = convertUSDToRON(tax.usd); + basePrice.ron = convertUSDToRON(basePrice.usd); + } + + /** + * @inheritdoc INSDomainPrice + */ + function convertUSDToRON(uint256 usdWei) public view returns (uint256 ronWei) { + return _pyth.getPriceNoOlderThan(_pythIdForRONUSD, _maxAcceptableAge).inverse({ expo: -18 }).mul({ + inpWei: usdWei, + inpDecimals: int32(uint32(USD_DECIMALS)), + outDecimals: 18 + }); + } + + /** + * @inheritdoc INSDomainPrice + */ + function convertRONToUSD(uint256 ronWei) public view returns (uint256 usdWei) { + return _pyth.getPriceNoOlderThan(_pythIdForRONUSD, _maxAcceptableAge).mul({ + inpWei: ronWei, + inpDecimals: 18, + outDecimals: int32(uint32(USD_DECIMALS)) + }); + } + + /** + * @dev Reverts if the arguments of the method {bulkSetDomainPrice} is invalid. + */ + function _requireBulkSetDomainPriceArgumentsValid( + bytes32[] calldata lbHashes, + uint256[] calldata ronPrices, + bytes32[] calldata proofHashes, + uint256[] calldata setTypes + ) internal pure returns (uint256 length) { + length = lbHashes.length; + if (length == 0 || ronPrices.length != length || proofHashes.length != length || setTypes.length != length) { + revert InvalidArrayLength(); + } + } + + /** + * @dev Helper method to set domain price. + * + * Emits an event {DomainPriceUpdated} optionally. + */ + function _setDomainPrice( + address operator, + bytes32 lbHash, + uint256 ronPrice, + bytes32 proofHash, + uint256 setType, + bool forced + ) internal returns (bool updated) { + uint256 usdPrice = convertRONToUSD(ronPrice); + TimestampWrapper storage dp = _dp[lbHash]; + updated = forced || dp.value < usdPrice; + + if (updated) { + dp.value = usdPrice; + dp.timestamp = block.timestamp; + emit DomainPriceUpdated(operator, lbHash, usdPrice, proofHash, setType); + } + } + + /** + * @dev Sets renewal reservation ratio. + * + * Emits an event {TaxRatioUpdated}. + */ + function _setTaxRatio(uint256 ratio) internal { + _taxRatio = ratio; + emit TaxRatioUpdated(_msgSender(), ratio); + } + + /** + * @dev Sets domain price scale rule. + * + * Emits events {DomainPriceScaleRuleUpdated}. + */ + function _setDomainPriceScaleRule(PeriodScaler calldata domainPriceScaleRule) internal { + _dpDownScaler = domainPriceScaleRule; + emit DomainPriceScaleRuleUpdated(_msgSender(), domainPriceScaleRule.ratio, domainPriceScaleRule.period); + } + + /** + * @dev Sets renewal fee. + * + * Emits events {RenewalFeeByLengthUpdated}. + * Emits an event {MaxRenewalFeeLengthUpdated} optionally. + */ + function _setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) internal { + address operator = _msgSender(); + RenewalFee memory renewalFee; + uint256 length = renewalFees.length; + uint256 maxRenewalFeeLength = _rnfMaxLength; + + for (uint256 i; i < length;) { + renewalFee = renewalFees[i]; + maxRenewalFeeLength = Math.max(maxRenewalFeeLength, renewalFee.labelLength); + _rnFee[renewalFee.labelLength] = renewalFee.fee; + emit RenewalFeeByLengthUpdated(operator, renewalFee.labelLength, renewalFee.fee); + + unchecked { + ++i; + } + } + + if (maxRenewalFeeLength != _rnfMaxLength) { + _rnfMaxLength = maxRenewalFeeLength; + emit MaxRenewalFeeLengthUpdated(operator, maxRenewalFeeLength); + } + } + + /** + * @dev Sets Pyth Oracle config. + * + * Emits events {PythOracleConfigUpdated}. + */ + function _setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) internal { + _pyth = pyth; + _maxAcceptableAge = maxAcceptableAge; + _pythIdForRONUSD = pythIdForRONUSD; + emit PythOracleConfigUpdated(_msgSender(), pyth, maxAcceptableAge, pythIdForRONUSD); + } + + /** + * @dev Returns the current domain price applied the business rule: deduced x% each y seconds. + */ + function _getDomainPrice(bytes32 lbHash) internal view returns (uint256) { + TimestampWrapper storage dp = _dp[lbHash]; + uint256 lastSyncedAt = dp.timestamp; + if (lastSyncedAt == 0) return 0; + + uint256 passedDuration = block.timestamp - lastSyncedAt; + return _dpDownScaler.scaleDown({ v: dp.value, maxR: MAX_PERCENTAGE, dur: passedDuration }); + } +} diff --git a/src/RNSReverseRegistrar.sol b/src/RNSReverseRegistrar.sol new file mode 100644 index 00000000..87ad0f1d --- /dev/null +++ b/src/RNSReverseRegistrar.sol @@ -0,0 +1,170 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { INameResolver } from "./interfaces/resolvers/INameResolver.sol"; +import { IERC165, IERC181, INSReverseRegistrar } from "./interfaces/INSReverseRegistrar.sol"; +import { INSUnified } from "./interfaces/INSUnified.sol"; +import { LibString } from "./libraries/LibString.sol"; +import { LibRNSDomain } from "./libraries/LibRNSDomain.sol"; + +/** + * @notice Customized version of ReverseRegistrar: https://github.com/ensdomains/ens-contracts/blob/0c75ba23fae76165d51c9c80d76d22261e06179d/contracts/reverseRegistrar/ReverseRegistrar.sol + * @dev The reverse registrar provides functions to claim a reverse record, as well as a convenience function to + * configure the record as it's most commonly used, as a way of specifying a canonical name for an address. + * The reverse registrar is specified in EIP 181 https://eips.ethereum.org/EIPS/eip-181. + */ +contract RNSReverseRegistrar is Initializable, Ownable, INSReverseRegistrar { + using LibString for *; + + /// @dev This controller must equal to INSReverseRegistrar.CONTROLLER_ROLE() + bytes32 public constant CONTROLLER_ROLE = keccak256("CONTROLLER_ROLE"); + + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + /// @dev The rns unified contract. + INSUnified internal _rnsUnified; + /// @dev The default resolver. + INameResolver internal _defaultResolver; + + modifier live() { + _requireLive(); + _; + } + + modifier onlyAuthorized(address addr) { + _requireAuthorized(addr); + _; + } + + constructor() payable { + _disableInitializers(); + } + + function initialize(address admin, INSUnified rnsUnified) external initializer { + _rnsUnified = rnsUnified; + _transferOwnership(admin); + } + + /** + * @inheritdoc INSReverseRegistrar + */ + function getDefaultResolver() external view returns (INameResolver) { + return _defaultResolver; + } + + /** + * @inheritdoc INSReverseRegistrar + */ + function getRNSUnified() external view returns (INSUnified) { + return _rnsUnified; + } + + /** + * @inheritdoc IERC165 + */ + function supportsInterface(bytes4 interfaceId) external pure returns (bool) { + return interfaceId == type(INSReverseRegistrar).interfaceId || interfaceId == type(IERC165).interfaceId + || interfaceId == type(IERC181).interfaceId; + } + + /** + * @inheritdoc INSReverseRegistrar + */ + function setDefaultResolver(INameResolver resolver) external onlyOwner { + if (address(resolver) == address(0)) revert NullAssignment(); + _defaultResolver = resolver; + emit DefaultResolverChanged(resolver); + } + + /** + * @inheritdoc IERC181 + */ + function claim(address addr) external returns (uint256 id) { + id = claimWithResolver(addr, address(_defaultResolver)); + } + + /** + * @inheritdoc IERC181 + */ + function setName(string calldata name) external returns (uint256 id) { + id = setNameForAddr(_msgSender(), name); + } + + /** + * @inheritdoc INSReverseRegistrar + */ + function getAddress(uint256 id) external view returns (address) { + INSUnified.Record memory record = _rnsUnified.getRecord(id); + if (record.immut.parentId != LibRNSDomain.ADDR_REVERSE_ID) revert InvalidId(); + return record.immut.label.parseAddr(); + } + + /** + * @inheritdoc IERC181 + */ + function claimWithResolver(address addr, address resolver) public live onlyAuthorized(addr) returns (uint256 id) { + id = _claimWithResolver(addr, resolver); + } + + /** + * @inheritdoc INSReverseRegistrar + */ + function setNameForAddr(address addr, string calldata name) public live onlyAuthorized(addr) returns (uint256 id) { + id = computeId(addr); + INSUnified rnsUnified = _rnsUnified; + if (rnsUnified.ownerOf(id) != address(this)) { + uint256 claimedId = _claimWithResolver(addr, address(_defaultResolver)); + if (claimedId != id) revert InvalidId(); + } + + INSUnified.Record memory record = rnsUnified.getRecord(id); + INameResolver(record.mut.resolver).setName(bytes32(id), name); + } + + /** + * @inheritdoc INSReverseRegistrar + */ + function computeId(address addr) public pure returns (uint256 id) { + id = LibRNSDomain.toId(LibRNSDomain.ADDR_REVERSE_ID, addr.toString()); + } + + /** + * @dev Helper method to claim domain hex(addr) + '.addr.reverse' for addr. + * Emits an event {ReverseClaimed}. + */ + function _claimWithResolver(address addr, address resolver) internal returns (uint256 id) { + string memory stringifiedAddr = addr.toString(); + (, id) = _rnsUnified.mint(LibRNSDomain.ADDR_REVERSE_ID, stringifiedAddr, resolver, address(this), type(uint64).max); + emit ReverseClaimed(addr, id); + } + + /** + * @dev Helper method to ensure the contract can mint or modify domain hex(addr) + '.addr.reverse' for addr. + */ + function _requireLive() internal view { + INSUnified rnsUnified = _rnsUnified; + uint256 addrReverseId = LibRNSDomain.ADDR_REVERSE_ID; + address owner = rnsUnified.ownerOf(addrReverseId); + if ( + !( + owner == address(this) || rnsUnified.getApproved(addrReverseId) == address(this) + || rnsUnified.isApprovedForAll(owner, address(this)) + ) + ) { + revert InvalidConfig(); + } + } + + /** + * @dev Helper method to ensure addr is authorized for claiming domain hex(addr) + '.addr.reverse' for addr. + */ + function _requireAuthorized(address addr) internal view { + address sender = _msgSender(); + INSUnified rnsUnified = _rnsUnified; + if (!(addr == sender || rnsUnified.hasRole(CONTROLLER_ROLE, sender) || rnsUnified.isApprovedForAll(addr, sender))) { + revert Unauthorized(); + } + } +} diff --git a/src/RNSToken.sol b/src/RNSToken.sol new file mode 100644 index 00000000..d31daf9f --- /dev/null +++ b/src/RNSToken.sol @@ -0,0 +1,137 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { IERC165, AccessControlEnumerable } from "@openzeppelin/contracts/access/AccessControlEnumerable.sol"; +import { IERC721Metadata, IERC721, ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import { ERC721Burnable } from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol"; +import { ERC721Pausable } from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol"; +import { ERC721Enumerable } from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; +import { ERC721Nonce } from "contract-template/refs/ERC721Nonce.sol"; +import { INSUnified } from "./interfaces/INSUnified.sol"; +import { IERC721State } from "contract-template/refs/IERC721State.sol"; +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; + +abstract contract RNSToken is + AccessControlEnumerable, + ERC721Nonce, + ERC721Burnable, + ERC721Pausable, + ERC721Enumerable, + IERC721State, + INSUnified +{ + using Strings for *; + + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + uint256 internal _idCounter; + string internal _baseTokenURI; + + modifier onlyMinted(uint256 tokenId) { + _requireMinted(tokenId); + _; + } + + /// @inheritdoc INSUnified + function setBaseURI(string calldata baseTokenURI) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setBaseURI(baseTokenURI); + } + + /** + * @dev Pauses all token transfers. + * + * See {ERC721Pausable} and {Pausable-_pause}. + * + * Requirements: + * + * - the caller must have the `PAUSER_ROLE`. + */ + function pause() external virtual onlyRole(PAUSER_ROLE) { + _pause(); + } + + /** + * @dev Unpauses all token transfers. + * + * See {ERC721Pausable} and {Pausable-_unpause}. + * + * Requirements: + * + * - the caller must have the `PAUSER_ROLE`. + */ + function unpause() external virtual onlyRole(PAUSER_ROLE) { + _unpause(); + } + + /// @dev Override {IERC721Metadata-name}. + function name() public view virtual override(ERC721, IERC721Metadata) returns (string memory) { + return "Ronin Name Service"; + } + + /// @dev Override {IERC721Metadata-symbol}. + function symbol() public view virtual override(ERC721, IERC721Metadata) returns (string memory) { + return "RNS"; + } + + /// @inheritdoc INSUnified + function totalMinted() external view virtual returns (uint256) { + return _idCounter; + } + + /// @dev Override {IERC721Metadata-tokenURI}. + function tokenURI(uint256 tokenId) + public + view + virtual + override(ERC721, IERC721Metadata) + onlyMinted(tokenId) + returns (string memory) + { + string memory baseURI = _baseURI(); + return bytes(baseURI).length > 0 ? string.concat(baseURI, address(this).toHexString(), "/", tokenId.toString()) : ""; + } + + /// @dev Override {ERC165-supportsInterface}. + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(ERC721, AccessControlEnumerable, ERC721Enumerable, IERC165) + returns (bool) + { + return super.supportsInterface(interfaceId) || interfaceId == type(INSUnified).interfaceId; + } + + /// @dev Override {ERC721-_mint}. + function _mint(address to, uint256 tokenId) internal virtual override { + unchecked { + ++_idCounter; + } + super._mint(to, tokenId); + } + + /** + * @dev Helper method to set base uri. + */ + function _setBaseURI(string calldata baseTokenURI) internal virtual { + _baseTokenURI = baseTokenURI; + emit BaseURIUpdated(_msgSender(), baseTokenURI); + } + + /// @dev Override {ERC721-_beforeTokenTransfer}. + function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) + internal + virtual + override(ERC721, ERC721Nonce, ERC721Enumerable, ERC721Pausable) + { + super._beforeTokenTransfer(from, to, firstTokenId, batchSize); + } + + /// @dev Override {ERC721-_baseURI}. + function _baseURI() internal view virtual override returns (string memory) { + return _baseTokenURI; + } +} diff --git a/src/RNSUnified.sol b/src/RNSUnified.sol new file mode 100644 index 00000000..02b2194f --- /dev/null +++ b/src/RNSUnified.sol @@ -0,0 +1,353 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import { IERC721State, IERC721, ERC721, INSUnified, RNSToken } from "./RNSToken.sol"; +import { LibRNSDomain } from "./libraries/LibRNSDomain.sol"; +import { LibSafeRange } from "./libraries/math/LibSafeRange.sol"; +import { ModifyingField, LibModifyingField } from "./libraries/LibModifyingField.sol"; +import { + ALL_FIELDS_INDICATOR, + IMMUTABLE_FIELDS_INDICATOR, + USER_FIELDS_INDICATOR, + ModifyingIndicator +} from "./types/ModifyingIndicator.sol"; + +contract RNSUnified is Initializable, RNSToken { + using LibRNSDomain for string; + using LibModifyingField for ModifyingField; + + bytes32 public constant CONTROLLER_ROLE = keccak256("CONTROLLER_ROLE"); + bytes32 public constant RESERVATION_ROLE = keccak256("RESERVATION_ROLE"); + bytes32 public constant PROTECTED_SETTLER_ROLE = keccak256("PROTECTED_SETTLER_ROLE"); + uint64 public constant MAX_EXPIRY = type(uint64).max; + + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + uint64 internal _gracePeriod; + /// @dev Mapping from token id => record + mapping(uint256 => Record) internal _recordOf; + + modifier onlyAuthorized(uint256 id, ModifyingIndicator indicator) { + _requireAuthorized(id, indicator); + _; + } + + constructor() payable ERC721("", "") { + _disableInitializers(); + } + + function initialize( + address admin, + address pauser, + address controller, + address protectedSettler, + uint64 gracePeriod, + string calldata baseTokenURI + ) external initializer { + _grantRole(DEFAULT_ADMIN_ROLE, admin); + _grantRole(PAUSER_ROLE, pauser); + _grantRole(CONTROLLER_ROLE, controller); + _grantRole(PROTECTED_SETTLER_ROLE, protectedSettler); + + _setBaseURI(baseTokenURI); + _setGracePeriod(gracePeriod); + + _mint(admin, 0x0); + Record memory record; + _recordOf[0x0].mut.expiry = record.mut.expiry = MAX_EXPIRY; + emit RecordUpdated(0x0, ModifyingField.Expiry.indicator(), record); + } + + /// @inheritdoc INSUnified + function available(uint256 id) public view returns (bool) { + return block.timestamp > LibSafeRange.add(_expiry(id), _gracePeriod); + } + + /// @inheritdoc INSUnified + function getGracePeriod() external view returns (uint64) { + return _gracePeriod; + } + + /// @inheritdoc INSUnified + function setGracePeriod(uint64 gracePeriod) external whenNotPaused onlyRole(CONTROLLER_ROLE) { + _setGracePeriod(gracePeriod); + } + + /// @inheritdoc INSUnified + function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration) + external + whenNotPaused + returns (uint64 expiryTime, uint256 id) + { + if (!_checkOwnerRules(_msgSender(), parentId)) revert Unauthorized(); + id = LibRNSDomain.toId(parentId, label); + if (!available(id)) revert Unavailable(); + + if (_exists(id)) _burn(id); + _mint(owner, id); + + expiryTime = uint64(LibSafeRange.addWithUpperbound(block.timestamp, duration, MAX_EXPIRY)); + _requireValidExpiry(parentId, expiryTime); + Record memory record; + // Preserve previous state of the protected field + record.mut = + MutableRecord({ resolver: resolver, owner: owner, expiry: expiryTime, protected: _recordOf[id].mut.protected }); + record.immut = ImmutableRecord({ depth: _recordOf[parentId].immut.depth + 1, parentId: parentId, label: label }); + // allow 3rd level domain for {account}.addr.reverse + if (parentId != LibRNSDomain.ADDR_REVERSE_ID && record.immut.depth >= 3) revert ThirdLevelDomainUnallowed(); + + _recordOf[id] = record; + emit RecordUpdated(id, ALL_FIELDS_INDICATOR, record); + } + + /// @inheritdoc INSUnified + function namehash(string memory str) public pure returns (bytes32 hashed) { + hashed = str.namehash(); + } + + /// @inheritdoc INSUnified + function getRecord(uint256 id) external view returns (Record memory record) { + record = _recordOf[id]; + record.mut.owner = ownerOf(id); + record.mut.expiry = _expiry(id); + } + + /// @inheritdoc INSUnified + function getDomain(uint256 id) external view returns (string memory domain) { + if (id == 0) return ""; + + ImmutableRecord storage sRecord = _recordOf[id].immut; + domain = sRecord.label; + id = sRecord.parentId; + while (id != 0) { + sRecord = _recordOf[id].immut; + domain = string.concat(domain, ".", sRecord.label); + id = sRecord.parentId; + } + } + + /// @inheritdoc INSUnified + function reclaim(uint256 id, address owner) + external + whenNotPaused + onlyAuthorized(id, ModifyingField.Owner.indicator()) + { + _safeTransfer(_recordOf[id].mut.owner, owner, id, ""); + } + + /// @inheritdoc INSUnified + function renew(uint256 id, uint64 duration) external whenNotPaused onlyRole(CONTROLLER_ROLE) returns (uint64 expiry) { + Record memory record; + record.mut.expiry = uint64(LibSafeRange.addWithUpperbound(_recordOf[id].mut.expiry, duration, MAX_EXPIRY)); + _setExpiry(id, record.mut.expiry); + expiry = record.mut.expiry; + emit RecordUpdated(id, ModifyingField.Expiry.indicator(), record); + } + + /// @inheritdoc INSUnified + function setExpiry(uint256 id, uint64 expiry) external whenNotPaused onlyRole(CONTROLLER_ROLE) { + Record memory record; + _setExpiry(id, record.mut.expiry = expiry); + emit RecordUpdated(id, ModifyingField.Expiry.indicator(), record); + } + + /// @inheritdoc INSUnified + function bulkSetProtected(uint256[] calldata ids, bool protected) external onlyRole(PROTECTED_SETTLER_ROLE) { + ModifyingIndicator indicator = ModifyingField.Protected.indicator(); + uint256 id; + Record memory record; + record.mut.protected = protected; + + for (uint256 i; i < ids.length;) { + id = ids[i]; + if (_recordOf[id].mut.protected != protected) { + _recordOf[id].mut.protected = protected; + emit RecordUpdated(id, indicator, record); + } + + unchecked { + ++i; + } + } + } + + /// @inheritdoc INSUnified + function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata mutRecord) + external + whenNotPaused + onlyAuthorized(id, indicator) + { + Record memory record; + MutableRecord storage sMutRecord = _recordOf[id].mut; + + if (indicator.hasAny(ModifyingField.Protected.indicator())) { + sMutRecord.protected = record.mut.protected = mutRecord.protected; + } + if (indicator.hasAny(ModifyingField.Expiry.indicator())) { + _setExpiry(id, record.mut.expiry = mutRecord.expiry); + } + if (indicator.hasAny(ModifyingField.Resolver.indicator())) { + sMutRecord.resolver = record.mut.resolver = mutRecord.resolver; + } + emit RecordUpdated(id, indicator, record); + + // Updating owner might emit more {RecordUpdated} events. See method {_transfer}. + if (indicator.hasAny(ModifyingField.Owner.indicator())) { + _safeTransfer(_recordOf[id].mut.owner, mutRecord.owner, id, ""); + } + } + + /** + * @inheritdoc IERC721State + */ + function stateOf(uint256 tokenId) external view virtual override onlyMinted(tokenId) returns (bytes memory) { + return abi.encode(_recordOf[tokenId], nonces[tokenId], tokenId); + } + + /// @inheritdoc INSUnified + function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator) + public + view + returns (bool allowed, bytes4) + { + if (indicator.hasAny(IMMUTABLE_FIELDS_INDICATOR)) { + return (false, CannotSetImmutableField.selector); + } + if (!_exists(id)) return (false, Unexists.selector); + if (indicator.hasAny(ModifyingField.Protected.indicator()) && !hasRole(PROTECTED_SETTLER_ROLE, requester)) { + return (false, MissingProtectedSettlerRole.selector); + } + bool hasControllerRole = hasRole(CONTROLLER_ROLE, requester); + if (indicator.hasAny(ModifyingField.Expiry.indicator()) && !hasControllerRole) { + return (false, MissingControllerRole.selector); + } + if (indicator.hasAny(USER_FIELDS_INDICATOR) && !(hasControllerRole || _checkOwnerRules(requester, id))) { + return (false, Unauthorized.selector); + } + + return (true, 0x0); + } + + /// @dev Override {ERC721-ownerOf}. + function ownerOf(uint256 tokenId) public view override(ERC721, IERC721) returns (address) { + if (_isExpired(tokenId)) return address(0x0); + return super.ownerOf(tokenId); + } + + /// @dev Override {ERC721-_isApprovedOrOwner}. + function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual override returns (bool) { + if (_isExpired(tokenId)) return false; + return super._isApprovedOrOwner(spender, tokenId); + } + + /** + * @dev Helper method to check whether the id is expired. + */ + function _isExpired(uint256 id) internal view returns (bool) { + return block.timestamp > _expiry(id); + } + + /** + * @dev Helper method to calculate expiry time for specific id. + */ + function _expiry(uint256 id) internal view returns (uint64) { + if (hasRole(RESERVATION_ROLE, _ownerOf(id))) return MAX_EXPIRY; + return _recordOf[id].mut.expiry; + } + + /** + * @dev Helper method to check whether the address is owner of parent token. + */ + function _isHierarchyOwner(address spender, uint256 id) internal view returns (bool) { + address owner; + + while (id != 0) { + owner = _recordOf[id].mut.owner; + if (owner == spender) return true; + id = _recordOf[id].immut.parentId; + } + + return false; + } + + /** + * @dev Returns whether the owner rules is satisfied. + * Returns true only if the spender is owner, or approved spender, or owner of parent token. + */ + function _checkOwnerRules(address spender, uint256 id) internal view returns (bool) { + return _isApprovedOrOwner(spender, id) || _isHierarchyOwner(spender, id); + } + + /** + * @dev Helper method to ensure msg.sender is authorized to modify record of the token id. + */ + function _requireAuthorized(uint256 id, ModifyingIndicator indicator) internal view { + (bool allowed, bytes4 errorCode) = canSetRecord(_msgSender(), id, indicator); + if (!allowed) { + assembly ("memory-safe") { + mstore(0x0, errorCode) + revert(0x0, 0x04) + } + } + } + + /** + * @dev Helper method to ensure expiry of an id is lower or equal expiry of parent id. + */ + function _requireValidExpiry(uint256 parentId, uint64 expiry) internal view { + if (expiry > _recordOf[parentId].mut.expiry) revert ExceedParentExpiry(); + } + + /** + * @dev Helper method to set expiry time of a token. + * + * Requirement: + * - The token must be registered or in grace period. + * - Expiry time must be larger than the old one. + * + * Emits an event {RecordUpdated}. + */ + function _setExpiry(uint256 id, uint64 expiry) internal { + _requireValidExpiry(_recordOf[id].immut.parentId, expiry); + if (available(id)) revert NameMustBeRegisteredOrInGracePeriod(); + if (expiry <= _recordOf[id].mut.expiry) revert ExpiryTimeMustBeLargerThanTheOldOne(); + + Record memory record; + _recordOf[id].mut.expiry = record.mut.expiry = expiry; + } + + /** + * @dev Helper method to set grace period. + * + * Emits an event {GracePeriodUpdated}. + */ + function _setGracePeriod(uint64 gracePeriod) internal { + _gracePeriod = gracePeriod; + emit GracePeriodUpdated(_msgSender(), gracePeriod); + } + + /// @dev Override {ERC721-_transfer}. + function _transfer(address from, address to, uint256 id) internal override { + super._transfer(from, to, id); + + Record memory record; + ModifyingIndicator indicator = ModifyingField.Owner.indicator(); + + _recordOf[id].mut.owner = record.mut.owner = to; + if (!hasRole(PROTECTED_SETTLER_ROLE, _msgSender()) && _recordOf[id].mut.protected) { + _recordOf[id].mut.protected = false; + indicator = indicator | ModifyingField.Protected.indicator(); + } + emit RecordUpdated(id, indicator, record); + } + + /// @dev Override {ERC721-_burn}. + function _burn(uint256 id) internal override { + super._burn(id); + delete _recordOf[id].mut; + Record memory record; + emit RecordUpdated(id, USER_FIELDS_INDICATOR, record); + } +} diff --git a/src/RONRegistrarController.sol b/src/RONRegistrarController.sol new file mode 100644 index 00000000..8f982469 --- /dev/null +++ b/src/RONRegistrarController.sol @@ -0,0 +1,461 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Pausable } from "@openzeppelin/contracts/security/Pausable.sol"; +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import { ReentrancyGuard } from "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import { AccessControlEnumerable } from "@openzeppelin/contracts/access/AccessControlEnumerable.sol"; +import { IPublicResolver } from "./interfaces/resolvers/IPublicResolver.sol"; +import { + INSUnified, + INameChecker, + INSDomainPrice, + INSReverseRegistrar, + IRONRegistrarController +} from "./interfaces/IRONRegistrarController.sol"; +import { LibString } from "./libraries/LibString.sol"; +import { LibRNSDomain } from "./libraries/LibRNSDomain.sol"; +import { RONTransferHelper } from "./libraries/transfers/RONTransferHelper.sol"; + +/** + * @title RONRegistrarController + * @notice Customized version of ETHRegistrarController: https://github.com/ensdomains/ens-contracts/blob/45455f1229556ed4f416ef7225d4caea2c1bc0b5/contracts/ethregistrar/ETHRegistrarController.sol + * @dev A registrar controller for registering and renewing names at fixed cost. + */ +contract RONRegistrarController is + Pausable, + Initializable, + ReentrancyGuard, + AccessControlEnumerable, + IRONRegistrarController +{ + using LibString for string; + using LibRNSDomain for string; + + /// @dev The minimum domain name's length + uint8 public constant MIN_DOMAIN_LENGTH = 3; + /// @inheritdoc IRONRegistrarController + bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + /// @inheritdoc IRONRegistrarController + bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE"); + + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev Minimum duration between commitment and registration in second(s). + uint256 internal _minCommitmentAge; + /// @dev Maximum duration between commitment and registration in second(s). + uint256 internal _maxCommitmentAge; + /// @dev Min registration duration + uint256 internal _minRegistrationDuration; + + /// @dev The treasury address. + address payable internal _treasury; + /// @dev The rns unified contract. + INSUnified internal _rnsUnified; + /// @dev The namechecker contract. + INameChecker internal _nameChecker; + /// @dev The price oracle. + INSDomainPrice internal _priceOracle; + /// @dev The reverse registrar contract. + INSReverseRegistrar internal _reverseRegistrar; + + /// @dev Mapping from commitment hash => timestamp that commitment made. + mapping(bytes32 commitment => uint256 timestamp) internal _committedAt; + /// @dev Mapping id => owner => flag indicating whether the owner is whitelisted to buy protected name + mapping(uint256 id => mapping(address owner => bool)) internal _protectedNamesWhitelisted; + + modifier onlyAvailable(string memory name) { + _requireAvailable(name); + _; + } + + constructor() payable { + _disableInitializers(); + } + + function initialize( + address admin, + address pauser, + address payable treasury, + uint256 maxCommitmentAge, + uint256 minCommitmentAge, + uint256 minRegistrationDuration, + INSUnified rnsUnified, + INameChecker nameChecker, + INSDomainPrice priceOracle, + INSReverseRegistrar reverseRegistrar + ) external initializer { + _setupRole(PAUSER_ROLE, pauser); + _setupRole(DEFAULT_ADMIN_ROLE, admin); + + _setPriceOracle(priceOracle); + _setMinRegistrationDuration(minRegistrationDuration); + _setCommitmentAge(minCommitmentAge, maxCommitmentAge); + + _treasury = treasury; + _rnsUnified = rnsUnified; + _nameChecker = nameChecker; + _reverseRegistrar = reverseRegistrar; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function pause() external onlyRole(PAUSER_ROLE) { + _pause(); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function unpause() external onlyRole(PAUSER_ROLE) { + _unpause(); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function getMinRegistrationDuration() public view returns (uint256) { + return _minRegistrationDuration; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function rentPrice(string memory name, uint64 duration) public view returns (uint256 usdPrice, uint256 ronPrice) { + (INSDomainPrice.UnitPrice memory basePrice, INSDomainPrice.UnitPrice memory tax) = + _priceOracle.getRenewalFee(name, duration); + usdPrice = basePrice.usd + tax.usd; + ronPrice = basePrice.ron + tax.ron; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function valid(string memory name) public view returns (bool) { + return name.strlen() >= MIN_DOMAIN_LENGTH && !_nameChecker.forbidden(name); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function available(string memory name) public view returns (bool) { + return valid(name) && _rnsUnified.available(computeId(name)); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function computeCommitment( + string memory name, + address owner, + uint64 duration, + bytes32 secret, + address resolver, + bytes[] calldata data, + bool reverseRecord + ) public view onlyAvailable(name) returns (bytes32) { + if (data.length != 0 && resolver == address(0)) revert ResolverRequiredWhenDataSupplied(); + return keccak256(abi.encode(computeId(name), owner, duration, secret, resolver, data, reverseRecord)); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function computeId(string memory name) public pure returns (uint256 id) { + return LibRNSDomain.toId(LibRNSDomain.RON_ID, name); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function commit(bytes32 commitment) external whenNotPaused { + if (_committedAt[commitment] + _maxCommitmentAge >= block.timestamp) revert UnexpiredCommitmentExists(commitment); + _committedAt[commitment] = block.timestamp; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function setMinRegistrationDuration(uint256 duration) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setMinRegistrationDuration(duration); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function register( + string memory name, + address owner, + uint64 duration, + bytes32 secret, + address resolver, + bytes[] calldata data, + bool reverseRecord + ) external payable whenNotPaused nonReentrant { + uint256 id = computeId(name); + if (_rnsUnified.getRecord(id).mut.protected) revert ErrRequestedForProtectedName(name); + + bytes32 commitHash = computeCommitment({ + name: name, + owner: owner, + duration: duration, + secret: secret, + resolver: resolver, + data: data, + reverseRecord: reverseRecord + }); + _validateCommitment(duration, commitHash); + + (uint256 usdPrice, uint256 ronPrice) = _handlePrice(name, duration); + _register(name, owner, duration, resolver, data, reverseRecord, usdPrice, ronPrice); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function renew(string calldata name, uint64 duration) external payable whenNotPaused nonReentrant { + (, uint256 ronPrice) = rentPrice(name, duration); + if (msg.value < ronPrice) revert InsufficientValue(); + uint256 remainAmount = msg.value - ronPrice; + + uint256 id = computeId(name); + uint64 expiryTime = _rnsUnified.renew(id, duration); + emit NameRenewed(name, id, ronPrice, expiryTime); + + if (remainAmount != 0) RONTransferHelper.safeTransfer(payable(_msgSender()), remainAmount); + _transferRONToTreasury(); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function registerProtectedName( + string memory name, + address owner, + uint64 duration, + address resolver, + bytes[] calldata data, + bool reverseRecord + ) external payable whenNotPaused nonReentrant onlyAvailable(name) { + if (!available(name)) revert NameNotAvailable(name); + uint256 id = computeId(name); + bool protected = _rnsUnified.getRecord(id).mut.protected; + bool whitelisted = _protectedNamesWhitelisted[id][owner]; + if (!protected || !whitelisted) revert ErrInvalidRegisterProtectedName(name, owner, protected, whitelisted); + + (uint256 usdPrice, uint256 ronPrice) = _handlePrice(name, duration); + _register(name, owner, duration, resolver, data, reverseRecord, usdPrice, ronPrice); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function bulkWhitelistProtectedNames(uint256[] calldata ids, address[] calldata owners, bool status) + external + onlyRole(OPERATOR_ROLE) + { + uint256 length = ids.length; + if (length == 0 || length != owners.length) revert InvalidArrayLength(); + + for (uint256 i; i < length;) { + _protectedNamesWhitelisted[ids[i]][owners[i]] = status; + + unchecked { + ++i; + } + } + + emit ProtectedNamesWhitelisted(_msgSender(), ids, owners, status); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function getWhitelistProtectedNameStatus(uint256 id, address owner) external view returns (bool status) { + return _protectedNamesWhitelisted[id][owner]; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function setTreasury(address payable addr) external onlyRole(DEFAULT_ADMIN_ROLE) { + _treasury = addr; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setCommitmentAge(minCommitmentAge, maxCommitmentAge); + } + + /** + * @dev Internal function to update the commitment age range. + * Requirements: + * - The `maxCommitmentAge` must be less than or equal to the current block timestamp. + * - The `maxCommitmentAge` must be greater than the `minCommitmentAge`. + * Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range. + * @param minCommitmentAge The minimum commitment age in seconds. + * @param maxCommitmentAge The maximum commitment age in seconds. + */ + function _setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) internal { + if (maxCommitmentAge > block.timestamp) revert MaxCommitmentAgeTooHigh(); + if (maxCommitmentAge <= minCommitmentAge) revert MaxCommitmentAgeTooLow(); + + _minCommitmentAge = minCommitmentAge; + _maxCommitmentAge = maxCommitmentAge; + + emit CommitmentAgeUpdated(_msgSender(), minCommitmentAge, maxCommitmentAge); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function setPriceOracle(INSDomainPrice priceOracle) external onlyRole(DEFAULT_ADMIN_ROLE) { + _setPriceOracle(priceOracle); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function getTreasury() external view returns (address) { + return _treasury; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function getCommitmentAgeRange() external view returns (uint256 minCommitmentAge, uint256 maxCommitmentAge) { + return (_minCommitmentAge, _maxCommitmentAge); + } + + /** + * @inheritdoc IRONRegistrarController + */ + function getRNSUnified() external view returns (INSUnified) { + return _rnsUnified; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function getPriceOracle() external view returns (INSDomainPrice) { + return _priceOracle; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function getNameChecker() external view returns (INameChecker) { + return _nameChecker; + } + + /** + * @inheritdoc IRONRegistrarController + */ + function getReverseRegistrar() external view returns (INSReverseRegistrar) { + return _reverseRegistrar; + } + + /** + * @dev Validates commitment. + * + * Requirements: + * - The duration must larger than or equal to minimum registration duration. + * - The passed duration must in a valid range. + */ + function _validateCommitment(uint64 duration, bytes32 commitment) internal { + if (duration < _minRegistrationDuration) revert DurationTooShort(duration); + + uint256 passedDuration = block.timestamp - _committedAt[commitment]; + if (passedDuration < _minCommitmentAge) revert CommitmentTooNew(commitment); + if (_maxCommitmentAge < passedDuration) revert CommitmentTooOld(commitment); + + delete _committedAt[commitment]; + } + + /** + * @dev Sets minimum registration duration. + * Emits a {MinRegistrationDurationUpdated} event indicating the successful update of the registration duration. + */ + function _setMinRegistrationDuration(uint256 duration) internal { + _minRegistrationDuration = duration; + emit MinRegistrationDurationUpdated(_msgSender(), duration); + } + + /** + * @dev Sets data into resolver address contract. + */ + function _setRecords(address resolverAddress, uint256 id, bytes[] calldata data) internal { + IPublicResolver(resolverAddress).multicallWithNodeCheck(bytes32(id), data); + } + + /** + * @dev Sets data into reverse registrar. + */ + function _setReverseRecord(string memory name, address owner) internal { + _reverseRegistrar.setNameForAddr(owner, string.concat(name, ".ron")); + } + + /** + * @dev Helper method to take fee into treasury address. + */ + function _transferRONToTreasury() internal { + RONTransferHelper.safeTransfer(_treasury, address(this).balance); + } + + /** + * @dev Helper method to take renewal fee of a name. + */ + function _handlePrice(string memory name, uint64 duration) internal returns (uint256 usdPrice, uint256 ronPrice) { + (usdPrice, ronPrice) = rentPrice(name, duration); + if (msg.value < ronPrice) revert InsufficientValue(); + + unchecked { + uint256 remainAmount = msg.value - ronPrice; + if (remainAmount != 0) RONTransferHelper.safeTransfer(payable(_msgSender()), remainAmount); + } + + _transferRONToTreasury(); + } + + /** + * @dev Helper method to register a name for owner. + * + * Emits an event {NameRegistered}. + */ + function _register( + string memory name, + address owner, + uint64 duration, + address resolver, + bytes[] calldata data, + bool reverseRecord, + uint256 usdPrice, + uint256 ronPrice + ) internal { + (uint64 expiryTime, uint256 id) = _rnsUnified.mint(LibRNSDomain.RON_ID, name, resolver, owner, duration); + if (data.length != 0) _setRecords(resolver, id, data); + if (reverseRecord) _setReverseRecord(name, owner); + emit NameRegistered(name, id, owner, ronPrice, usdPrice, expiryTime); + } + + /** + * @dev Helper method to update RNSDomainPrice contract. + * + * Emits an event {DomainPriceUpdated}. + */ + function _setPriceOracle(INSDomainPrice priceOracle) internal { + _priceOracle = priceOracle; + emit DomainPriceUpdated(_msgSender(), priceOracle); + } + + /** + * @dev Helper method to check if a domain name is available for register. + */ + function _requireAvailable(string memory name) internal view { + if (!available(name)) revert NameNotAvailable(name); + } +} diff --git a/src/extensions/Multicallable.sol b/src/extensions/Multicallable.sol new file mode 100644 index 00000000..64270981 --- /dev/null +++ b/src/extensions/Multicallable.sol @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { ERC165 } from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import { IMulticallable } from "../interfaces/IMulticallable.sol"; +import { ErrorHandler } from "../libraries/ErrorHandler.sol"; + +abstract contract Multicallable is ERC165, IMulticallable { + using ErrorHandler for bool; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { + return interfaceID == type(IMulticallable).interfaceId || super.supportsInterface(interfaceID); + } + + /** + * @inheritdoc IMulticallable + */ + function multicall(bytes[] calldata data) public override returns (bytes[] memory results) { + return _tryMulticall(true, data); + } + + /** + * @inheritdoc IMulticallable + */ + function tryMulticall(bool requireSuccess, bytes[] calldata data) public override returns (bytes[] memory results) { + return _tryMulticall(requireSuccess, data); + } + + /** + * @dev See {IMulticallable-tryMulticall}. + */ + function _tryMulticall(bool requireSuccess, bytes[] calldata data) internal returns (bytes[] memory results) { + uint256 length = data.length; + results = new bytes[](length); + + bool success; + bytes memory result; + + for (uint256 i; i < length;) { + (success, result) = address(this).delegatecall(data[i]); + if (requireSuccess) success.handleRevert(result); + results[i] = result; + + unchecked { + ++i; + } + } + } +} diff --git a/src/interfaces/IMulticallable.sol b/src/interfaces/IMulticallable.sol new file mode 100644 index 00000000..5e536433 --- /dev/null +++ b/src/interfaces/IMulticallable.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +/** + * @notice To multi-call to a specified contract which has multicall interface: + * + * ```solidity + * interface IMock is IMulticallable { + * function foo() external; + * function bar() external; + * } + * + * bytes[] memory calldatas = new bytes[](2); + * calldatas[0] = abi.encodeCall(IMock.foo,()); + * calldatas[1] = abi.encodeCall(IMock.bar,()); + * IMock(target).multicall(calldatas); + * ``` + */ +interface IMulticallable { + /** + * @dev Executes bulk action to the original contract. + * Reverts if there is a single call failed. + * + * @param data The calldata to original contract. + * + */ + function multicall(bytes[] calldata data) external returns (bytes[] memory results); + + /** + * @dev Executes bulk action to the original contract. + * + * @param requireSuccess Flag to indicating whether the contract reverts if there is a single call failed. + * @param data The calldata to original contract. + * + */ + function tryMulticall(bool requireSuccess, bytes[] calldata data) external returns (bytes[] memory results); +} diff --git a/src/interfaces/INSAuction.sol b/src/interfaces/INSAuction.sol new file mode 100644 index 00000000..e01d3a7d --- /dev/null +++ b/src/interfaces/INSAuction.sol @@ -0,0 +1,205 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { INSUnified } from "./INSUnified.sol"; +import { EventRange } from "../libraries/LibEventRange.sol"; + +interface INSAuction { + error NotYetEnded(); + error NoOneBidded(); + error NullAssignment(); + error AlreadyBidding(); + error RatioIsTooLarge(); + error NameNotReserved(); + error InvalidEventRange(); + error QueryIsNotInPeriod(); + error InsufficientAmount(); + error InvalidArrayLength(); + error ContractBidderIsForbidden(); + error EventIsNotCreatedOrAlreadyStarted(); + + struct Bid { + address payable bidder; + uint256 price; + uint256 timestamp; + uint256 claimedAt; + } + + struct DomainAuction { + bytes32 auctionId; + uint256 startingPrice; + Bid bid; + } + + /// @dev Emitted when an auction is set. + event AuctionEventSet(bytes32 indexed auctionId, EventRange range); + /// @dev Emitted when the labels are listed for auction. + event LabelsListed(bytes32 indexed auctionId, uint256[] ids, uint256[] startingPrices); + /// @dev Emitted when a bid is placed for a name. + event BidPlaced( + bytes32 indexed auctionId, + uint256 indexed id, + uint256 price, + address payable bidder, + uint256 previousPrice, + address previousBidder + ); + /// @dev Emitted when the treasury is updated. + event TreasuryUpdated(address indexed addr); + /// @dev Emitted when bid gap ratio is updated. + event BidGapRatioUpdated(uint256 ratio); + + /** + * @dev The maximum expiry duration + */ + function MAX_EXPIRY() external pure returns (uint64); + + /** + * @dev The maximum expiry duration of a domain after transferring to bidder. + */ + function MAX_AUCTION_DOMAIN_EXPIRY() external pure returns (uint64); + + /** + * @dev Returns the operator role. + */ + function OPERATOR_ROLE() external pure returns (bytes32); + + /** + * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%] + */ + function MAX_PERCENTAGE() external pure returns (uint256); + + /** + * @dev The expiry duration of a domain after transferring to bidder. + */ + function DOMAIN_EXPIRY_DURATION() external pure returns (uint64); + + /** + * @dev Claims domain names for auction. + * + * Requirements: + * - The method caller must be contract operator. + * + * @param labels The domain names. Eg, ['foo'] for 'foo.ron' + * @return ids The id corresponding for namehash of domain names. + */ + function bulkRegister(string[] calldata labels) external returns (uint256[] memory ids); + + /** + * @dev Checks whether a domain name is currently reserved for auction or not. + * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron' + */ + function reserved(uint256 id) external view returns (bool); + + /** + * @dev Creates a new auction to sale with a specific time period. + * + * Requirements: + * - The method caller must be admin. + * + * Emits an event {AuctionEventSet}. + * + * @return auctionId The auction id + * @notice Please use the method `setAuctionNames` to list all the reserved names. + */ + function createAuctionEvent(EventRange calldata range) external returns (bytes32 auctionId); + + /** + * @dev Updates the auction details. + * + * Requirements: + * - The method caller must be admin. + * + * Emits an event {AuctionEventSet}. + */ + function setAuctionEvent(bytes32 auctionId, EventRange calldata range) external; + + /** + * @dev Returns the event range of an auction. + */ + function getAuctionEvent(bytes32 auctionId) external view returns (EventRange memory); + + /** + * @dev Lists reserved names to sale in a specified auction. + * + * Requirements: + * - The method caller must be contract operator. + * - Array length are matched and larger than 0. + * - Only allow to set when the domain is: + * + Not in any auction. + * + Or, in the current auction. + * + Or, this name is not bided. + * + * Emits an event {LabelsListed}. + * + * Note: If the name is already listed, this method replaces with a new input value. + * + * @param ids The namehashes id of domain names. Eg, namehash('foo.ron') for 'foo.ron' + */ + function listNamesForAuction(bytes32 auctionId, uint256[] calldata ids, uint256[] calldata startingPrices) external; + + /** + * @dev Places a bid for a domain name. + * + * Requirements: + * - The name is listed, or the auction is happening. + * - The msg.value is larger than the current bid price or the auction starting price. + * + * Emits an event {BidPlaced}. + * + * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron' + */ + function placeBid(uint256 id) external payable; + + /** + * @dev Returns the highest bid and address of the bidder. + * @param id The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron' + */ + function getAuction(uint256 id) external view returns (DomainAuction memory, uint256 beatPrice); + + /** + * @dev Bulk claims the bid name. + * + * Requirements: + * - Must be called after ended time. + * - The method caller can be anyone. + * + * @param ids The namehash id of domain name. Eg, namehash('foo.ron') for 'foo.ron' + */ + function bulkClaimBidNames(uint256[] calldata ids) external returns (uint256[] memory claimedAts); + + /** + * @dev Returns the treasury. + */ + function getTreasury() external view returns (address); + + /** + * @dev Returns the gap ratio between 2 bids with the starting price. Value in range [0;100_00] is 0%-100%. + */ + function getBidGapRatio() external view returns (uint256); + + /** + * @dev Sets the treasury. + * + * Requirements: + * - The method caller must be admin + * + * Emits an event {TreasuryUpdated}. + */ + function setTreasury(address payable) external; + + /** + * @dev Sets commission ratio. Value in range [0;100_00] is 0%-100%. + * + * Requirements: + * - The method caller must be admin + * + * Emits an event {BidGapRatioUpdated}. + */ + function setBidGapRatio(uint256) external; + + /** + * @dev Returns RNSUnified contract. + */ + function getRNSUnified() external view returns (INSUnified); +} diff --git a/src/interfaces/INSDomainPrice.sol b/src/interfaces/INSDomainPrice.sol new file mode 100644 index 00000000..376284fe --- /dev/null +++ b/src/interfaces/INSDomainPrice.sol @@ -0,0 +1,216 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { PeriodScaler } from "../libraries/math/PeriodScalingUtils.sol"; +import { IPyth } from "@pythnetwork/IPyth.sol"; + +interface INSDomainPrice { + error InvalidArrayLength(); + error RenewalFeeIsNotOverriden(); + error ExceedAuctionDomainExpiry(); + + struct RenewalFee { + uint256 labelLength; + uint256 fee; + } + + struct UnitPrice { + uint256 usd; + uint256 ron; + } + + /// @dev Emitted when the renewal reservation ratio is updated. + event TaxRatioUpdated(address indexed operator, uint256 indexed ratio); + /// @dev Emitted when the maximum length of renewal fee is updated. + event MaxRenewalFeeLengthUpdated(address indexed operator, uint256 indexed maxLength); + /// @dev Emitted when the renew fee is updated. + event RenewalFeeByLengthUpdated(address indexed operator, uint256 indexed labelLength, uint256 renewalFee); + /// @dev Emitted when the renew fee of a domain is overridden. Value of `inverseRenewalFee` is 0 when not overridden. + event RenewalFeeOverridingUpdated(address indexed operator, bytes32 indexed labelHash, uint256 inverseRenewalFee); + + /// @dev Emitted when the domain price is updated. + event DomainPriceUpdated( + address indexed operator, bytes32 indexed labelHash, uint256 price, bytes32 indexed proofHash, uint256 setType + ); + /// @dev Emitted when the rule to rescale domain price is updated. + event DomainPriceScaleRuleUpdated(address indexed operator, uint192 ratio, uint64 period); + + /// @dev Emitted when the Pyth Oracle config is updated. + event PythOracleConfigUpdated( + address indexed operator, IPyth indexed pyth, uint256 maxAcceptableAge, bytes32 indexed pythIdForRONUSD + ); + + /** + * @dev Returns the Pyth oracle config. + */ + function getPythOracleConfig() external view returns (IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD); + + /** + * @dev Sets the Pyth oracle config. + * + * Requirements: + * - The method caller is admin. + * + * Emits events {PythOracleConfigUpdated}. + */ + function setPythOracleConfig(IPyth pyth, uint256 maxAcceptableAge, bytes32 pythIdForRONUSD) external; + + /** + * @dev Returns the percentage to scale from domain price each period. + */ + function getScaleDownRuleForDomainPrice() external view returns (PeriodScaler memory dpScaleRule); + + /** + * @dev Sets the percentage to scale from domain price each period. + * + * Requirements: + * - The method caller is admin. + * + * Emits events {DomainPriceScaleRuleUpdated}. + * + * @notice Applies for the business rule: -x% each y seconds. + */ + function setScaleDownRuleForDomainPrice(PeriodScaler calldata scaleRule) external; + + /** + * @dev Returns the renewal fee by lengths. + */ + function getRenewalFeeByLengths() external view returns (RenewalFee[] memory renewalFees); + + /** + * @dev Sets the renewal fee by lengths + * + * Requirements: + * - The method caller is admin. + * + * Emits events {RenewalFeeByLengthUpdated}. + * Emits an event {MaxRenewalFeeLengthUpdated} optionally. + */ + function setRenewalFeeByLengths(RenewalFee[] calldata renewalFees) external; + + /** + * @dev Returns tax ratio. + */ + function getTaxRatio() external view returns (uint256 taxRatio); + + /** + * @dev Sets renewal reservation ratio. + * + * Requirements: + * - The method caller is admin. + * + * Emits an event {TaxRatioUpdated}. + */ + function setTaxRatio(uint256 ratio) external; + + /** + * @dev Return the domain price. + * @param label The domain label to register (Eg, 'foo' for 'foo.ron'). + */ + function getDomainPrice(string memory label) external view returns (uint256 usdPrice, uint256 ronPrice); + + /** + * @dev Returns the renewal fee in USD and RON. + * @param label The domain label to register (Eg, 'foo' for 'foo.ron'). + * @param duration Amount of second(s). + */ + function getRenewalFee(string calldata label, uint256 duration) + external + view + returns (UnitPrice memory basePrice, UnitPrice memory tax); + + /** + * @dev Returns the renewal fee of a label. Reverts if not overridden. + * @notice This method is to help developers check the domain renewal fee overriding. Consider using method + * {getRenewalFee} instead for full handling of renewal fees. + */ + function getOverriddenRenewalFee(string memory label) external view returns (uint256 usdFee); + + /** + * @dev Bulk override renewal fees. + * + * Requirements: + * - The method caller is operator. + * - The input array lengths must be larger than 0 and the same. + * + * Emits events {RenewalFeeOverridingUpdated}. + * + * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron') + * @param usdPrices Array of prices in USD. Leave 2^256 - 1 to remove overriding. + */ + function bulkOverrideRenewalFees(bytes32[] calldata lbHashes, uint256[] calldata usdPrices) external; + + /** + * @dev Bulk try to set domain prices. Returns a boolean array indicating whether domain prices at the corresponding + * indexes if set or not. + * + * Requirements: + * - The method caller is operator. + * - The input array lengths must be larger than 0 and the same. + * - The price should be larger than current domain price or it will not be updated. + * + * Emits events {DomainPriceUpdated} optionally. + * + * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron') + * @param ronPrices Array of prices in (W)RON token. + * @param proofHashes Array of proof hashes. + * @param setTypes Array of update types from the operator service. + */ + function bulkTrySetDomainPrice( + bytes32[] calldata lbHashes, + uint256[] calldata ronPrices, + bytes32[] calldata proofHashes, + uint256[] calldata setTypes + ) external returns (bool[] memory updated); + + /** + * @dev Bulk override domain prices. + * + * Requirements: + * - The method caller is operator. + * - The input array lengths must be larger than 0 and the same. + * + * Emits events {DomainPriceUpdated}. + * + * @param lbHashes Array of label hashes. (Eg, ['foo'].map(keccak256) for 'foo.ron') + * @param ronPrices Array of prices in (W)RON token. + * @param proofHashes Array of proof hashes. + * @param setTypes Array of update types from the operator service. + */ + function bulkSetDomainPrice( + bytes32[] calldata lbHashes, + uint256[] calldata ronPrices, + bytes32[] calldata proofHashes, + uint256[] calldata setTypes + ) external; + + /** + * @dev Returns the converted amount from USD to RON. + */ + function convertUSDToRON(uint256 usdAmount) external view returns (uint256 ronAmount); + + /** + * @dev Returns the converted amount from RON to USD. + */ + function convertRONToUSD(uint256 ronAmount) external view returns (uint256 usdAmount); + + /** + * @dev Value equals to keccak256("OPERATOR_ROLE"). + */ + function OPERATOR_ROLE() external pure returns (bytes32); + + /** + * @dev Returns the overrider role. + */ + function OVERRIDER_ROLE() external pure returns (bytes32); + + /** + * @dev Max percentage 100%. Values [0; 100_00] reflexes [0; 100%] + */ + function MAX_PERCENTAGE() external pure returns (uint64); + + /** + * @dev Decimal for USD. + */ + function USD_DECIMALS() external pure returns (uint8); +} diff --git a/src/interfaces/INSReverseRegistrar.sol b/src/interfaces/INSReverseRegistrar.sol new file mode 100644 index 00000000..2cf72f99 --- /dev/null +++ b/src/interfaces/INSReverseRegistrar.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import { INameResolver } from "./resolvers/INameResolver.sol"; +import { INSUnified } from "./INSUnified.sol"; + +/// @dev See https://eips.ethereum.org/EIPS/eip-181#registrar +interface IERC181 { + /** + * @dev Claims the name hex(addr) + '.addr.reverse' for addr. + * + * @param addr The address to set as the addr of the reverse record in INS. + * @return id The INS node hash of the reverse record. + */ + function claim(address addr) external returns (uint256 id); + + /** + * @dev Claims the name hex(owner) + '.addr.reverse' for owner and sets resolver. + * + * @param addr The address to set as the owner of the reverse record in INS. + * @param resolver The address of the resolver to set; 0 to leave unchanged. + * @return id The INS node hash of the reverse record. + */ + function claimWithResolver(address addr, address resolver) external returns (uint256 id); + + /** + * @dev Sets the name record for the reverse INS record associated with the calling account. First updates the + * resolver to the default reverse resolver if necessary. + * + * @param name The name to set for this address. + * @return The INS node hash of the reverse record. + */ + function setName(string memory name) external returns (uint256); +} + +interface INSReverseRegistrar is IERC181, IERC165 { + /// @dev Error: The provided id is not child node of `ADDR_REVERSE_ID` + error InvalidId(); + /// @dev Error: The contract is not authorized for minting or modifying domain hex(addr) + '.addr.reverse'. + error InvalidConfig(); + /// @dev Error: The sender lacks the necessary permissions. + error Unauthorized(); + /// @dev Error: The provided resolver address is null. + error NullAssignment(); + + /// @dev Emitted when reverse node is claimed. + event ReverseClaimed(address indexed addr, uint256 indexed id); + /// @dev Emitted when the default resolver is changed. + event DefaultResolverChanged(INameResolver indexed resolver); + + /** + * @dev Returns the controller role. + */ + function CONTROLLER_ROLE() external pure returns (bytes32); + + /** + * @dev Returns default resolver. + */ + function getDefaultResolver() external view returns (INameResolver); + + /** + * @dev Returns RNSUnified contract. + */ + function getRNSUnified() external view returns (INSUnified); + + /** + * @dev Sets default resolver. + * + * Requirement: + * + * - The method caller must be admin. + * + * Emitted an event {DefaultResolverChanged}. + * + */ + function setDefaultResolver(INameResolver resolver) external; + + /** + * @dev Same as {IERC181-setName}. + */ + function setNameForAddr(address addr, string memory name) external returns (uint256 id); + + /** + * @dev Returns address that the reverse node resolves for. + * Eg. node namehash('{addr}.addr.reverse') will always resolve for `addr`. + */ + function getAddress(uint256 id) external view returns (address); + + /** + * @dev Returns the id hash for a given account's reverse records. + * @param addr The address to hash + * @return The INS node hash. + */ + function computeId(address addr) external pure returns (uint256); +} diff --git a/src/interfaces/INSUnified.sol b/src/interfaces/INSUnified.sol new file mode 100644 index 00000000..66722bf3 --- /dev/null +++ b/src/interfaces/INSUnified.sol @@ -0,0 +1,240 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { IERC721Metadata } from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; +import { IAccessControlEnumerable } from "@openzeppelin/contracts/access/IAccessControlEnumerable.sol"; +import { ModifyingIndicator } from "../types/ModifyingIndicator.sol"; + +interface INSUnified is IAccessControlEnumerable, IERC721Metadata { + /// @dev Error: The provided token id is expired. + error Expired(); + /// @dev Error: The provided token id is unexists. + error Unexists(); + /// @dev Error: The provided token id's depth level is greater than 3. + error ThirdLevelDomainUnallowed(); + /// @dev Error: The provided id expiry is greater than parent id expiry. + error ExceedParentExpiry(); + /// @dev Error: The provided name is unavailable for registration. + error Unavailable(); + /// @dev Error: The sender lacks the necessary permissions. + error Unauthorized(); + /// @dev Error: Missing controller role required for modification. + error MissingControllerRole(); + /// @dev Error: Attempting to set an immutable field, which cannot be modified. + error CannotSetImmutableField(); + /// @dev Error: Missing protected settler role required for modification. + error MissingProtectedSettlerRole(); + /// @dev Error: Attempting to set an expiry time that is not larger than the previous one. + error ExpiryTimeMustBeLargerThanTheOldOne(); + /// @dev Error: The provided name must be registered or is in a grace period. + error NameMustBeRegisteredOrInGracePeriod(); + + /** + * | Fields\Idc | Modifying Indicator | + * | ---------- | ------------------- | + * | depth | 0b00000001 | + * | parentId | 0b00000010 | + * | label | 0b00000100 | + */ + struct ImmutableRecord { + // The level-th of a domain. + uint8 depth; + // The node of parent token. Eg, parent node of vip.duke.ron equals to namehash('duke.ron') + uint256 parentId; + // The label of a domain. Eg, label is vip for domain vip.duke.ron + string label; + } + + /** + * | Fields\Idc,Roles | Modifying Indicator | Controller | Protected setter | (Parent) Owner/Spender | + * | ---------------- | ------------------- | ---------- | ---------------- | ---------------------- | + * | resolver | 0b00001000 | x | | x | + * | owner | 0b00010000 | x | | x | + * | expiry | 0b00100000 | x | | | + * | protected | 0b01000000 | | x | | + * Note: (Parent) Owner/Spender means parent owner or current owner or current token spender. + */ + struct MutableRecord { + // The resolver address. + address resolver; + // The record owner. This field must equal to the owner of token. + address owner; + // Expiry timestamp. + uint64 expiry; + // Flag indicating whether the token is protected or not. + bool protected; + } + + struct Record { + ImmutableRecord immut; + MutableRecord mut; + } + + /// @dev Emitted when a base URI is updated. + event BaseURIUpdated(address indexed operator, string newURI); + /// @dev Emitted when the grace period for all domain is updated. + event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod); + + /** + * @dev Emitted when the record of node is updated. + * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right + * to left) needs to be updated. + * @param record The updated fields. + */ + event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, Record record); + + /** + * @dev Returns the controller role. + * @notice Can set all fields {Record.mut} in token record, excepting {Record.mut.protected}. + */ + function CONTROLLER_ROLE() external pure returns (bytes32); + + /** + * @dev Returns the protected setter role. + * @notice Can set field {Record.mut.protected} in token record by using method `bulkSetProtected`. + */ + function PROTECTED_SETTLER_ROLE() external pure returns (bytes32); + + /** + * @dev Returns the reservation role. + * @notice Never expire for token owner has this role. + */ + function RESERVATION_ROLE() external pure returns (bytes32); + + /** + * @dev Returns the max expiry value. + */ + function MAX_EXPIRY() external pure returns (uint64); + + /** + * @dev Returns the name hash output of a domain. + */ + function namehash(string memory domain) external pure returns (bytes32 node); + + /** + * @dev Returns true if the specified name is available for registration. + * Note: Only available after passing the grace period. + */ + function available(uint256 id) external view returns (bool); + + /** + * @dev Returns the grace period in second(s). + * Note: This period affects the availability of the domain. + */ + function getGracePeriod() external view returns (uint64); + + /** + * @dev Returns the total minted ids. + * Note: Burning id will not affect `totalMinted`. + */ + function totalMinted() external view returns (uint256); + + /** + * @dev Sets the grace period in second(s). + * + * Requirements: + * - The method caller must have controller role. + * + * Note: This period affects the availability of the domain. + */ + function setGracePeriod(uint64) external; + + /** + * @dev Sets the base uri. + * + * Requirements: + * - The method caller must be contract owner. + * + */ + function setBaseURI(string calldata baseTokenURI) external; + + /** + * @dev Mints token for subnode. + * + * Requirements: + * - The token must be available. + * - The method caller must be (parent) owner or approved spender. See struct {MutableRecord}. + * + * Emits an event {RecordUpdated}. + * + * @param parentId The parent node to mint or create subnode. + * @param label The domain label. Eg, label is duke for domain duke.ron. + * @param resolver The resolver address. + * @param owner The token owner. + * @param duration Duration in second(s) to expire. Leave 0 to set as parent. + */ + function mint(uint256 parentId, string calldata label, address resolver, address owner, uint64 duration) + external + returns (uint64 expiryTime, uint256 id); + + /** + * @dev Returns all record of a domain. + * Reverts if the token is non existent. + */ + function getRecord(uint256 id) external view returns (Record memory record); + + /** + * @dev Returns the domain name of id. + */ + function getDomain(uint256 id) external view returns (string memory domain); + + /** + * @dev Returns whether the requester is able to modify the record based on the updated index. + * Note: This method strictly follows the permission of struct {MutableRecord}. + */ + function canSetRecord(address requester, uint256 id, ModifyingIndicator indicator) + external + view + returns (bool, bytes4 error); + + /** + * @dev Sets record of existing token. Update operation for {Record.mut}. + * + * Requirements: + * - The method caller must have role based on the corresponding `indicator`. See struct {MutableRecord}. + * + * Emits an event {RecordUpdated}. + */ + function setRecord(uint256 id, ModifyingIndicator indicator, MutableRecord calldata record) external; + + /** + * @dev Reclaims ownership. Update operation for {Record.mut.owner}. + * + * Requirements: + * - The method caller should have controller role. + * - The method caller should be (parent) owner or approved spender. See struct {MutableRecord}. + * + * Emits an event {RecordUpdated}. + */ + function reclaim(uint256 id, address owner) external; + + /** + * @dev Renews token. Update operation for {Record.mut.expiry}. + * + * Requirements: + * - The method caller should have controller role. + * + * Emits an event {RecordUpdated}. + */ + function renew(uint256 id, uint64 duration) external returns (uint64 expiry); + + /** + * @dev Sets expiry time for a token. Update operation for {Record.mut.expiry}. + * + * Requirements: + * - The method caller must have controller role. + * + * Emits an event {RecordUpdated}. + */ + function setExpiry(uint256 id, uint64 expiry) external; + + /** + * @dev Sets the protected status of a list of ids. Update operation for {Record.mut.protected}. + * + * Requirements: + * - The method caller must have protected setter role. + * + * Emits events {RecordUpdated}. + */ + function bulkSetProtected(uint256[] calldata ids, bool protected) external; +} diff --git a/src/interfaces/INameChecker.sol b/src/interfaces/INameChecker.sol new file mode 100644 index 00000000..63d2d191 --- /dev/null +++ b/src/interfaces/INameChecker.sol @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +/** + * @title INameChecker + * @dev The INameChecker interface provides functions for managing and checking substrings and forbidden words in strings. + */ +interface INameChecker { + /** + * @dev Emitted when the word range is updated. + * @param operator The address that updated the word range. + * @param min The minimum word length allowed. + * @param max The maximum word length allowed. + */ + event WordRangeUpdated(address indexed operator, uint8 min, uint8 max); + + /** + * @dev Emitted when the forbidden words are updated. + * @param operator The address that updated the forbidden words list. + * @param wordCount The number of words in the list. + * @param shouldForbid Boolean indicating whether the specified words should be forbidden. + */ + event ForbiddenWordsUpdated(address indexed operator, uint256 wordCount, bool shouldForbid); + + /** + * @dev Returns an array of all substrings of a given string. + * @param str The input string to analyze. + * @return subStrings An array of all substrings. + */ + function getAllSubStrings(string calldata str) external view returns (string[] memory subStrings); + + /** + * @dev Returns the total number of substrings for a given string length, as well as the minimum and maximum allowed word lengths. + * @param strlen The length of the input string. + * @return total The total number of substrings. + * @return min The minimum word length allowed. + * @return max The maximum word length allowed. + */ + function totalSubString(uint256 strlen) external view returns (uint256 total, uint256 min, uint256 max); + + /** + * @dev Sets a list of forbidden words and specifies whether they should be forbidden. + * @param packedWords An array of packed word representations. + * @param shouldForbid Boolean indicating whether the specified words should be forbidden. + */ + function setForbiddenWords(uint256[] calldata packedWords, bool shouldForbid) external; + + /** + * @dev Sets a list of forbidden words and specifies whether they should be forbidden. + * @param words An array of raw words in string representations. + * @param shouldForbid Boolean indicating whether the specified words should be forbidden. + */ + function setForbiddenWords(string[] calldata words, bool shouldForbid) external; + + /** + * @dev Sets the minimum and maximum word lengths allowed. + * @param min The minimum word length. + * @param max The maximum word length. + */ + function setWordRange(uint8 min, uint8 max) external; + + /** + * @dev Retrieves the current minimum and maximum word lengths allowed. + * @return min The minimum word length allowed. + * @return max The maximum word length allowed. + */ + function getWordRange() external view returns (uint8 min, uint8 max); + + /** + * @notice Checks if a given name contains any forbidden characters or blacklisted words. + * @param name The string to check. + * @return true if the name contains forbidden characters or blacklisted words, false otherwise. + */ + function forbidden(string calldata name) external view returns (bool); + + /** + * @notice Checks if a given name contains any blacklisted words. + * @param name The string to check. + * @return true if the name contains blacklisted words, false otherwise. + */ + function containsBlacklistedWord(string calldata name) external view returns (bool); + + /** + * @notice Checks if a given name contains any invalid characters. + * requirements: + * - all characters in name must in range [a-z] or [0-9]. + * @param name The string to check. + * @return true if the name contains invalid characters, false otherwise. + */ + function containsInvalidCharacter(string calldata name) external pure returns (bool); + + /** + * @dev Packs a string into a single word representation. + * @param str The string to be packed. + * @notice Returns `uint256(0)` if the length is zero or greater than 31. + * @return packed The packed value of the input string. + */ + function pack(string memory str) external pure returns (uint256 packed); + + /** + * @dev Packs an array of strings into their single word representations. + * @param strs The array of strings to be packed. + * @notice Returns an array of packed values, along with the minimum and maximum string lengths. + * @return packeds An array containing the packed values of the input strings. + */ + function packBulk(string[] memory strs) external pure returns (uint256[] memory packeds); +} diff --git a/src/interfaces/IRONRegistrarController.sol b/src/interfaces/IRONRegistrarController.sol new file mode 100644 index 00000000..22914bda --- /dev/null +++ b/src/interfaces/IRONRegistrarController.sol @@ -0,0 +1,312 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { INSUnified } from "./INSUnified.sol"; +import { INSDomainPrice } from "./INSDomainPrice.sol"; +import { INameChecker } from "./INameChecker.sol"; +import { INSReverseRegistrar } from "./INSReverseRegistrar.sol"; + +/** + * @title IRONRegistrarController + * @dev Interface for the Registrar Controller contract that manages the registration, renewal, and commitment of RNS + * names. + */ +interface IRONRegistrarController { + /// @dev Error: The provided commitment timestamp is too new for registration. + error CommitmentTooNew(bytes32 commitment); + /// @dev Error: The provided commitment timestamp is too old for registration. + error CommitmentTooOld(bytes32 commitment); + /// @dev Error: The requested name is not available for registration. + error NameNotAvailable(string name); + /// @dev Error: The requested duration for registration is too short. + error DurationTooShort(uint64 duration); + /// @dev Error: A resolver is required when additional data is supplied during registration. + error ResolverRequiredWhenDataSupplied(); + /// @dev Error: An unexpired commitment already exists for the given commitment. + error UnexpiredCommitmentExists(bytes32 commitment); + /// @dev Error: Insufficient value (RON) provided for registration. + error InsufficientValue(); + /// @dev Error: The sender is not authorized for the given RNS node. + error Unauthorized(bytes32 node); + /// @dev Error: The maximum commitment age is set too low. + error MaxCommitmentAgeTooLow(); + /// @dev Error: The maximum commitment age is set too high. + error MaxCommitmentAgeTooHigh(); + /// @dev Thrown when some one requests for protected names + error ErrRequestedForProtectedName(string name); + /// @dev Thrown when received invalid params for registering protected name + error ErrInvalidRegisterProtectedName(string name, address requestOwner, bool nameProtected, bool ownerWhitelisted); + /// @dev Thrown when received invalid array length + error InvalidArrayLength(); + + /** + * @dev Emitted when the min registration duration is updated. + * @param operator The address of the operator who triggered the update. + * @param duration The new duration in seconds. + */ + event MinRegistrationDurationUpdated(address indexed operator, uint256 duration); + + /** + * @dev Emitted when RNSDomainPrice contract is updated. + * @param operator The address of the operator who triggered the update. + * @param newDomainPrice The new duration domain price contract. + */ + event DomainPriceUpdated(address indexed operator, INSDomainPrice newDomainPrice); + + /** + * @dev Emitted when the commitment age range is updated. + * @param operator The address of the operator who triggered the update. + * @param minCommitmentAge The new minimum commitment age in seconds. + * @param maxCommitmentAge The new maximum commitment age in seconds. + */ + event CommitmentAgeUpdated(address indexed operator, uint256 minCommitmentAge, uint256 maxCommitmentAge); + + /** + * @dev Emitted when a new name is successfully registered. + * @param name The registered name. + * @param id The namehash of the registered name. + * @param owner The owner of the registered name. + * @param ronPrice The cost of the registration in RON. + * @param usdPrice The cost of the registration in USD. + * @param expires The expiration timestamp of the registration. + */ + event NameRegistered( + string name, uint256 indexed id, address indexed owner, uint256 ronPrice, uint256 usdPrice, uint64 expires + ); + + /** + * @dev Emitted when a name is renewed. + * @param name The renewed name. + * @param id The namehash of the registered name. + * @param cost The cost of renewal. + * @param expires The new expiration timestamp after renewal. + */ + event NameRenewed(string name, uint256 indexed id, uint256 cost, uint64 expires); + + /** + * @dev Emitted the whitelist status is updated for the owners of the protected names. + * @param operator The address of the operator who triggered the update. + */ + event ProtectedNamesWhitelisted(address indexed operator, uint256[] ids, address[] owners, bool status); + + /** + * @dev Retrieves the rent price for a given name and duration. + * @param name The name for which to calculate the rent price. + * @param duration The duration of the rent. + * @return usdPrice rent price in usd. + * @return ronPrice rent price in ron. + */ + function rentPrice(string memory name, uint64 duration) external view returns (uint256 usdPrice, uint256 ronPrice); + + /** + * @dev Calculate the corresponding id given RON_ID and name. + */ + function computeId(string memory name) external pure returns (uint256 id); + + /** + * @dev Checks if a name is valid. + * @param name The name to check validity for. + * @return A boolean indicating whether the name is available. + */ + function valid(string memory name) external view returns (bool); + + /** + * @dev Checks if a name is available for registration. + * @param name The name to check availability for. + * @return A boolean indicating whether the name is available. + */ + function available(string memory name) external returns (bool); + + /** + * @dev Generates the commitment hash for a registration. + * @param name The name to be registered. + * @param owner The owner of the name. + * @param duration The duration of the registration. + * @param secret The secret used for the commitment. + * @param resolver The resolver contract address. + * @param data Additional data associated with the registration. + * @param reverseRecord Whether to use reverse record for additional data. + * @return The commitment hash. + */ + function computeCommitment( + string memory name, + address owner, + uint64 duration, + bytes32 secret, + address resolver, + bytes[] calldata data, + bool reverseRecord + ) external view returns (bytes32); + + /** + * @dev Commits to a registration using the commitment hash. + * @param commitment The commitment hash. + */ + function commit(bytes32 commitment) external; + + /** + * @dev Registers a new name. + * @param name The name to be registered. + * @param owner The owner of the name. + * @param duration The duration of the registration. + * @param secret The secret used for the commitment. + * @param resolver The resolver contract address. + * @param data Additional data associated with the registration. + * @param reverseRecord Whether to use reverse record for additional data. + */ + function register( + string calldata name, + address owner, + uint64 duration, + bytes32 secret, + address resolver, + bytes[] calldata data, + bool reverseRecord + ) external payable; + + /** + * @dev Renews an existing name registration. + * @param name The name to be renewed. + * @param duration The duration of the renewal. + */ + function renew(string calldata name, uint64 duration) external payable; + + /** + * @dev Registers a protected name. + * + * Requirements: + * - The owner is whitelisted for registering. + */ + function registerProtectedName( + string memory name, + address owner, + uint64 duration, + address resolver, + bytes[] calldata data, + bool reverseRecord + ) external payable; + + /** + * @dev Updates min registration duration. + * + * Requirements: + * - The caller must have the admin role. + * + */ + function setMinRegistrationDuration(uint256 duration) external; + + /** + * @dev Sets the minimum and maximum commitment ages. + * + * Requirements: + * - Caller must have the DEFAULT_ADMIN_ROLE. + * - The `maxCommitmentAge` must be less than or equal to the current block timestamp. + * - The `maxCommitmentAge` must be greater than the `minCommitmentAge`. + * + * Emits a {CommitmentAgeUpdated} event indicating the successful update of the age range. + * + * @param minCommitmentAge The minimum commitment age in seconds. + * @param maxCommitmentAge The maximum commitment age in seconds. + */ + function setCommitmentAge(uint256 minCommitmentAge, uint256 maxCommitmentAge) external; + + /** + * @dev Bulk (de)whitelist for buying protected names. + * + * Requirements: + * - The method caller is contract operator. + * + * Emits an event {ProtectedNamesWhitelisted}. + */ + function bulkWhitelistProtectedNames(uint256[] calldata ids, address[] calldata owners, bool status) external; + + /** + * @dev Returns the whitelist status for registering protected name. + */ + function getWhitelistProtectedNameStatus(uint256 id, address owner) external view returns (bool status); + + /** + * @dev Updates treasury address. + * + * Requirements: + * - The caller must have the admin role. + * + */ + function setTreasury(address payable) external; + + /** + * @dev Updates price oracle address. + * + * Requirements: + * - The caller must have the admin role. + */ + function setPriceOracle(INSDomainPrice) external; + + /** + * @dev Returns the treasury address. + */ + function getTreasury() external view returns (address); + + /** + * @dev Pauses the registrar controller's functionality. + * + * Requirements: + * - The caller must have the admin role. + * + */ + function pause() external; + + /** + * @dev Unpauses the registrar controller's functionality. + * + * Requirements: + * - The caller must have the admin role. + * + */ + function unpause() external; + + /** + * @dev Returns the role identifier for the pauser role. + */ + function PAUSER_ROLE() external pure returns (bytes32); + + /** + * @dev Returns the operator role. + */ + function OPERATOR_ROLE() external pure returns (bytes32); + + /** + * @dev Returns the threshold for valid name length. + */ + function MIN_DOMAIN_LENGTH() external view returns (uint8); + + /** + * @dev Returns the minimum registration duration. + */ + function getMinRegistrationDuration() external view returns (uint256); + + /** + * @dev Returns the range of commitment ages allowed. + */ + function getCommitmentAgeRange() external view returns (uint256 minCommitmentAge, uint256 maxCommitmentAge); + + /** + * @dev Returns the INSUnified contract associated with this controller. + */ + function getRNSUnified() external view returns (INSUnified); + + /** + * @dev Returns the INSDomainPrice contract associated with this controller. + */ + function getPriceOracle() external view returns (INSDomainPrice); + + /** + * @dev Returns the INameChecker contract associated with this controller. + */ + function getNameChecker() external view returns (INameChecker); + + /** + * @dev Returns the IReverseRegistrar contract associated with this controller. + */ + function getReverseRegistrar() external view returns (INSReverseRegistrar); +} diff --git a/src/interfaces/resolvers/IABIResolver.sol b/src/interfaces/resolvers/IABIResolver.sol new file mode 100644 index 00000000..678ef5f1 --- /dev/null +++ b/src/interfaces/resolvers/IABIResolver.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IABIResolver { + /// Thrown when the input content type is invalid. + error InvalidContentType(); + + /// @dev Emitted when the ABI is changed. + event ABIChanged(bytes32 indexed node, uint256 indexed contentType); + + /** + * @dev Sets the ABI associated with an INS node. Nodes may have one ABI of each content type. To remove an ABI, set it + * to the empty string. + * + * Requirements: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * - The content type must be powers of 2. + * + * Emitted an event {ABIChanged}. + * + * @param node The node to update. + * @param contentType The content type of the ABI + * @param data The ABI data. + */ + function setABI(bytes32 node, uint256 contentType, bytes calldata data) external; + + /** + * @dev Returns the ABI associated with an INS node. + * Defined in EIP-205, see more at https://eips.ethereum.org/EIPS/eip-205 + * + * @param node The INS node to query + * @param contentTypes A bitwise OR of the ABI formats accepted by the caller. + * @return contentType The content type of the return value + * @return data The ABI data + */ + function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256 contentType, bytes memory data); +} diff --git a/src/interfaces/resolvers/IAddressResolver.sol b/src/interfaces/resolvers/IAddressResolver.sol new file mode 100644 index 00000000..84c986fa --- /dev/null +++ b/src/interfaces/resolvers/IAddressResolver.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.0; + +interface IAddressResolver { + /// @dev Emitted when an address of a node is changed. + event AddrChanged(bytes32 indexed node, address addr); + + /** + * @dev Sets the address associated with an INS node. + * + * Requirement: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * + * Emits an event {AddrChanged}. + * + * @param node The node to update. + * @param addr The address to set. + */ + function setAddr(bytes32 node, address addr) external; + + /** + * @dev Returns the address associated with an INS node. + * @param node The INS node to query. + * @return The associated address. + */ + function addr(bytes32 node) external view returns (address payable); +} diff --git a/src/interfaces/resolvers/IContentHashResolver.sol b/src/interfaces/resolvers/IContentHashResolver.sol new file mode 100644 index 00000000..7db60259 --- /dev/null +++ b/src/interfaces/resolvers/IContentHashResolver.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IContentHashResolver { + /// @dev Emitted when the content hash of a node is changed. + event ContentHashChanged(bytes32 indexed node, bytes hash); + + /** + * @dev Sets the content hash associated with an INS node. + * + * Requirements: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * + * Emits an event {ContentHashChanged}. + * + * @param node The node to update. + * @param hash The content hash to set + */ + function setContentHash(bytes32 node, bytes calldata hash) external; + + /** + * @dev Returns the content hash associated with an INS node. + * @param node The INS node to query. + * @return The associated content hash. + */ + function contentHash(bytes32 node) external view returns (bytes memory); +} diff --git a/src/interfaces/resolvers/IDNSRecordResolver.sol b/src/interfaces/resolvers/IDNSRecordResolver.sol new file mode 100644 index 00000000..97e5434e --- /dev/null +++ b/src/interfaces/resolvers/IDNSRecordResolver.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.4; + +interface IDNSRecordResolver { + /// @dev Emitted whenever a given node/name/resource's RRSET is updated. + event DNSRecordChanged(bytes32 indexed node, bytes name, uint16 resource, bytes record); + /// @dev Emitted whenever a given node/name/resource's RRSET is deleted. + event DNSRecordDeleted(bytes32 indexed node, bytes name, uint16 resource); + + /** + * @dev Set one or more DNS records. Records are supplied in wire-format. Records with the same node/name/resource + * must be supplied one after the other to ensure the data is updated correctly. For example, if the data was + * supplied: + * a.example.com IN A 1.2.3.4 + * a.example.com IN A 5.6.7.8 + * www.example.com IN CNAME a.example.com. + * then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was + * supplied: + * a.example.com IN A 1.2.3.4 + * www.example.com IN CNAME a.example.com. + * a.example.com IN A 5.6.7.8 + * then this would store the first A record, the CNAME, then the second A record which would overwrite the first. + * + * Requirements: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * + * @param node the namehash of the node for which to set the records + * @param data the DNS wire format records to set + */ + function setDNSRecords(bytes32 node, bytes calldata data) external; + + /** + * @dev Obtain a DNS record. + * @param node the namehash of the node for which to fetch the record + * @param name the keccak-256 hash of the fully-qualified name for which to fetch the record + * @param resource the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types + * @return the DNS record in wire format if present, otherwise empty + */ + function dnsRecord(bytes32 node, bytes32 name, uint16 resource) external view returns (bytes memory); +} diff --git a/src/interfaces/resolvers/IDNSZoneResolver.sol b/src/interfaces/resolvers/IDNSZoneResolver.sol new file mode 100644 index 00000000..ea74e062 --- /dev/null +++ b/src/interfaces/resolvers/IDNSZoneResolver.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.4; + +interface IDNSZoneResolver { + /// @dev Emitted whenever a given node's zone hash is updated. + event DNSZonehashChanged(bytes32 indexed node, bytes lastzonehash, bytes zonehash); + + /** + * @dev Sets the hash for the zone. + * + * Requirements: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * + * Emits an event {DNSZonehashChanged}. + * + * @param node The node to update. + * @param hash The zonehash to set + */ + function setZonehash(bytes32 node, bytes calldata hash) external; + + /** + * @dev Obtains the hash for the zone. + * @param node The INS node to query. + * @return The associated contenthash. + */ + function zonehash(bytes32 node) external view returns (bytes memory); +} diff --git a/src/interfaces/resolvers/IInterfaceResolver.sol b/src/interfaces/resolvers/IInterfaceResolver.sol new file mode 100644 index 00000000..e6f6018a --- /dev/null +++ b/src/interfaces/resolvers/IInterfaceResolver.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IInterfaceResolver { + /// @dev Emitted when the interface of node is changed. + event InterfaceChanged(bytes32 indexed node, bytes4 indexed interfaceID, address implementer); + + /** + * @dev Sets an interface associated with a name. + * Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support. + * + * Requirements: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * + * @param node The node to update. + * @param interfaceID The EIP 165 interface ID. + * @param implementer The address of a contract that implements this interface for this node. + */ + function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external; + + /** + * @dev Returns the address of a contract that implements the specified interface for this name. + * + * If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`. + * If `addr()` is set, a contract exists at that address, and that contract implements EIP165 and returns `true` for + * the specified interfaceID, its address will be returned. + * + * @param node The INS node to query. + * @param interfaceID The EIP 165 interface ID to check for. + * @return The address that implements this interface, or 0 if the interface is unsupported. + */ + function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address); +} diff --git a/src/interfaces/resolvers/INameResolver.sol b/src/interfaces/resolvers/INameResolver.sol new file mode 100644 index 00000000..3aef3a34 --- /dev/null +++ b/src/interfaces/resolvers/INameResolver.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +interface INameResolver { + /// @dev Emitted when a node name is changed. + event NameChanged(bytes32 indexed node, string name); + + /** + * @dev Sets the name associated with an INS node, for reverse records. + * + * Requirements: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * + * Emits an event {NameChanged}. + * + * @param node The node to update. + */ + function setName(bytes32 node, string calldata newName) external; + + /** + * @dev Returns the name associated with an INS node, for reverse records. + * @param node The INS node to query. + * @return The associated name. + */ + function name(bytes32 node) external view returns (string memory); +} diff --git a/src/interfaces/resolvers/IPublicKeyResolver.sol b/src/interfaces/resolvers/IPublicKeyResolver.sol new file mode 100644 index 00000000..760aa454 --- /dev/null +++ b/src/interfaces/resolvers/IPublicKeyResolver.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +interface IPublicKeyResolver { + struct PublicKey { + bytes32 x; + bytes32 y; + } + + /// @dev Emitted when a node public key is changed. + event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y); + + /** + * @dev Sets the SECP256k1 public key associated with an INS node. + * + * Requirements: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * + * Emits an event {PubkeyChanged}. + * + * @param node The INS node to query + * @param x the X coordinate of the curve point for the public key. + * @param y the Y coordinate of the curve point for the public key. + */ + function setPubkey(bytes32 node, bytes32 x, bytes32 y) external; + + /** + * @dev Returns the SECP256k1 public key associated with an INS node. + * Defined in EIP 619. + * + * @param node The INS node to query + * @return x The X coordinate of the curve point for the public key. + * @return y The Y coordinate of the curve point for the public key. + */ + function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y); +} diff --git a/src/interfaces/resolvers/IPublicResolver.sol b/src/interfaces/resolvers/IPublicResolver.sol new file mode 100644 index 00000000..20f240cc --- /dev/null +++ b/src/interfaces/resolvers/IPublicResolver.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { INSUnified } from "../INSUnified.sol"; +import { INSReverseRegistrar } from "../INSReverseRegistrar.sol"; +import { IABIResolver } from "./IABIResolver.sol"; +import { IAddressResolver } from "./IAddressResolver.sol"; +import { IContentHashResolver } from "./IContentHashResolver.sol"; +import { IDNSRecordResolver } from "./IDNSRecordResolver.sol"; +import { IDNSZoneResolver } from "./IDNSZoneResolver.sol"; +import { IInterfaceResolver } from "./IInterfaceResolver.sol"; +import { INameResolver } from "./INameResolver.sol"; +import { IPublicKeyResolver } from "./IPublicKeyResolver.sol"; +import { ITextResolver } from "./ITextResolver.sol"; +import { IMulticallable } from "../IMulticallable.sol"; + +interface IPublicResolver is + IABIResolver, + IAddressResolver, + IContentHashResolver, + IDNSRecordResolver, + IDNSZoneResolver, + IInterfaceResolver, + INameResolver, + IPublicKeyResolver, + ITextResolver, + IMulticallable +{ + /// @dev See {IERC1155-ApprovalForAll}. Logged when an operator is added or removed. + event ApprovalForAll(address indexed owner, address indexed operator, bool approved); + + /// @dev Logged when a delegate is approved or an approval is revoked. + event Approved(address owner, bytes32 indexed node, address indexed delegate, bool indexed approved); + + /** + * @dev Checks if an account is authorized to manage the resolution of a specific RNS node. + * @param node The RNS node. + * @param account The account address being checked for authorization. + * @return A boolean indicating whether the account is authorized. + */ + function isAuthorized(bytes32 node, address account) external view returns (bool); + + /** + * @dev Retrieves the RNSUnified associated with this resolver. + */ + function getRNSUnified() external view returns (INSUnified); + + /** + * @dev Retrieves the reverse registrar associated with this resolver. + */ + function getReverseRegistrar() external view returns (INSReverseRegistrar); + + /** + * @dev This function provides an extra security check when called from privileged contracts (such as + * RONRegistrarController) that can set records on behalf of the node owners. + * + * Reverts if the node is not null but calldata is mismatched. + */ + function multicallWithNodeCheck(bytes32 node, bytes[] calldata data) external returns (bytes[] memory results); +} diff --git a/src/interfaces/resolvers/ITextResolver.sol b/src/interfaces/resolvers/ITextResolver.sol new file mode 100644 index 00000000..1408b4e4 --- /dev/null +++ b/src/interfaces/resolvers/ITextResolver.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +interface ITextResolver { + /// @dev Emitted when a node text is changed. + event TextChanged(bytes32 indexed node, string indexed indexedKey, string key, string value); + + /** + * @dev Sets the text data associated with an INS node and key. + * + * Requirements: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * + * Emits an event {TextChanged}. + * + * @param node The node to update. + * @param key The key to set. + * @param value The text data value to set. + */ + function setText(bytes32 node, string calldata key, string calldata value) external; + + /** + * Returns the text data associated with an INS node and key. + * @param node The INS node to query. + * @param key The text data key to query. + * @return The associated text data. + */ + function text(bytes32 node, string calldata key) external view returns (string memory); +} diff --git a/src/interfaces/resolvers/IVersionResolver.sol b/src/interfaces/resolvers/IVersionResolver.sol new file mode 100644 index 00000000..b88a3ebb --- /dev/null +++ b/src/interfaces/resolvers/IVersionResolver.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IVersionResolver { + /// @dev Emitted when the version of a node is changed. + event VersionChanged(bytes32 indexed node, uint64 newVersion); + + /** + * @dev Increments the record version associated with an INS node. + * + * Requirements: + * - The method caller must be authorized to change user fields of RNS Token `node`. See indicator + * {ModifyingIndicator.USER_FIELDS_INDICATOR}. + * + * Emits an event {VersionChanged}. + * + * @param node The node to update. + */ + function clearRecords(bytes32 node) external; + + /** + * @dev Returns the latest version of a node. + */ + function recordVersions(bytes32 node) external view returns (uint64); +} diff --git a/src/libraries/ErrorHandler.sol b/src/libraries/ErrorHandler.sol new file mode 100644 index 00000000..5ea118d6 --- /dev/null +++ b/src/libraries/ErrorHandler.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +library ErrorHandler { + error ExternalCallFailed(); + + function handleRevert(bool status, bytes memory returnOrRevertData) internal pure { + assembly { + if iszero(status) { + let revertLength := mload(returnOrRevertData) + if iszero(iszero(revertLength)) { + // Start of revert data bytes. The 0x20 offset is always the same. + revert(add(returnOrRevertData, 0x20), revertLength) + } + + // revert ExternalCallFailed() + mstore(0x00, 0x350c20f1) + revert(0x1c, 0x04) + } + } + } +} diff --git a/src/libraries/LibEventRange.sol b/src/libraries/LibEventRange.sol new file mode 100644 index 00000000..00586d73 --- /dev/null +++ b/src/libraries/LibEventRange.sol @@ -0,0 +1,37 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +struct EventRange { + uint256 startedAt; + uint256 endedAt; +} + +library LibEventRange { + /** + * @dev Checks whether the event range is valid. + */ + function valid(EventRange calldata range) internal pure returns (bool) { + return range.startedAt <= range.endedAt; + } + + /** + * @dev Returns whether the current range is not yet started. + */ + function isNotYetStarted(EventRange memory range) internal view returns (bool) { + return block.timestamp < range.startedAt; + } + + /** + * @dev Returns whether the current range is ended or not. + */ + function isEnded(EventRange memory range) internal view returns (bool) { + return range.endedAt <= block.timestamp; + } + + /** + * @dev Returns whether the current block is in period. + */ + function isInPeriod(EventRange memory range) internal view returns (bool) { + return range.startedAt <= block.timestamp && block.timestamp < range.endedAt; + } +} diff --git a/src/libraries/LibModifyingField.sol b/src/libraries/LibModifyingField.sol new file mode 100644 index 00000000..47b2712e --- /dev/null +++ b/src/libraries/LibModifyingField.sol @@ -0,0 +1,20 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { ModifyingIndicator } from "../types/ModifyingIndicator.sol"; + +enum ModifyingField { + Depth, + ParentId, + Label, + Resolver, + Owner, + Expiry, + Protected +} + +library LibModifyingField { + function indicator(ModifyingField opt) internal pure returns (ModifyingIndicator) { + return ModifyingIndicator.wrap(1 << uint8(opt)); + } +} diff --git a/src/libraries/LibRNSDomain.sol b/src/libraries/LibRNSDomain.sol new file mode 100644 index 00000000..a842b30c --- /dev/null +++ b/src/libraries/LibRNSDomain.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +library LibRNSDomain { + /// @dev Value equals to namehash('ron') + uint256 internal constant RON_ID = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688; + /// @dev Value equals to namehash('addr.reverse') + uint256 internal constant ADDR_REVERSE_ID = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2; + + /** + * @dev Calculate the corresponding id given parentId and label. + */ + function toId(uint256 parentId, string memory label) internal pure returns (uint256 id) { + assembly ("memory-safe") { + mstore(0x0, parentId) + mstore(0x20, keccak256(add(label, 32), mload(label))) + id := keccak256(0x0, 64) + } + } + + /** + * @dev Calculates the hash of the label. + */ + function hashLabel(string memory label) internal pure returns (bytes32 hashed) { + assembly ("memory-safe") { + hashed := keccak256(add(label, 32), mload(label)) + } + } + + /** + * @dev Calculate the RNS namehash of a str. + */ + function namehash(string memory str) internal pure returns (bytes32 hashed) { + // notice: this method is case-sensitive, ensure the string is lowercased before calling this method + assembly ("memory-safe") { + // load str length + let len := mload(str) + // returns bytes32(0x0) if length is zero + if iszero(iszero(len)) { + let hashedLen + // compute pointer to str[0] + let head := add(str, 32) + // compute pointer to str[length - 1] + let tail := add(head, sub(len, 1)) + // cleanup dirty bytes if contains any + mstore(0x0, 0) + // loop backwards from `tail` to `head` + for { let i := tail } iszero(lt(i, head)) { i := sub(i, 1) } { + // check if `i` is `head` + let isHead := eq(i, head) + // check if `str[i-1]` is "." + // `0x2e` == bytes1(".") + let isDotNext := eq(shr(248, mload(sub(i, 1))), 0x2e) + if or(isHead, isDotNext) { + // size = distance(length, i) - hashedLength + 1 + let size := add(sub(sub(tail, i), hashedLen), 1) + mstore(0x20, keccak256(i, size)) + mstore(0x0, keccak256(0x0, 64)) + // skip "." thereby + 1 + hashedLen := add(hashedLen, add(size, 1)) + } + } + } + hashed := mload(0x0) + } + } +} diff --git a/src/libraries/LibString.sol b/src/libraries/LibString.sol new file mode 100644 index 00000000..8aeb27e6 --- /dev/null +++ b/src/libraries/LibString.sol @@ -0,0 +1,90 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +library LibString { + error InvalidStringLength(); + error InvalidCharacter(bytes1 char); + + /// @dev Lookup constant for method. See more detail at https://eips.ethereum.org/EIPS/eip-181 + bytes32 private constant LOOKUP = 0x3031323334353637383961626364656600000000000000000000000000000000; + + /** + * @dev Returns the length of a given string + * + * @param s The string to measure the length of + * @return The length of the input string + */ + function strlen(string memory s) internal pure returns (uint256) { + unchecked { + uint256 i; + uint256 len; + uint256 bytelength = bytes(s).length; + for (len; i < bytelength; len++) { + bytes1 b = bytes(s)[i]; + if (b < 0x80) { + i += 1; + } else if (b < 0xE0) { + i += 2; + } else if (b < 0xF0) { + i += 3; + } else if (b < 0xF8) { + i += 4; + } else if (b < 0xFC) { + i += 5; + } else { + i += 6; + } + } + return len; + } + } + + /** + * @dev Converts an address to string. + */ + function toString(address addr) internal pure returns (string memory stringifiedAddr) { + assembly ("memory-safe") { + mstore(stringifiedAddr, 40) + let ptr := add(stringifiedAddr, 0x20) + for { let i := 40 } gt(i, 0) { } { + i := sub(i, 1) + mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP)) + addr := div(addr, 0x10) + + i := sub(i, 1) + mstore8(add(i, ptr), byte(and(addr, 0xf), LOOKUP)) + addr := div(addr, 0x10) + } + } + } + + /** + * @dev Converts string to address. + * Reverts if the string length is not equal to 40. + */ + function parseAddr(string memory stringifiedAddr) internal pure returns (address) { + unchecked { + if (bytes(stringifiedAddr).length != 40) revert InvalidStringLength(); + uint160 addr; + for (uint256 i = 0; i < 40; i += 2) { + addr *= 0x100; + addr += uint160(hexCharToDec(bytes(stringifiedAddr)[i])) * 0x10; + addr += hexCharToDec(bytes(stringifiedAddr)[i + 1]); + } + return address(addr); + } + } + + /** + * @dev Converts a hex char (0-9, a-f, A-F) to decimal number. + * Reverts if the char is invalid. + */ + function hexCharToDec(bytes1 c) private pure returns (uint8 r) { + unchecked { + if ((bytes1("a") <= c) && (c <= bytes1("f"))) r = uint8(c) - 87; + else if ((bytes1("A") <= c) && (c <= bytes1("F"))) r = uint8(c) - 55; + else if ((bytes1("0") <= c) && (c <= bytes1("9"))) r = uint8(c) - 48; + else revert InvalidCharacter(c); + } + } +} diff --git a/src/libraries/LibSubString.sol b/src/libraries/LibSubString.sol new file mode 100644 index 00000000..6d3e3ede --- /dev/null +++ b/src/libraries/LibSubString.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; + +/** + * @title LibSubString + * @dev A library for working with substrings and word ranges in strings. + */ +library LibSubString { + error TotalSubStringTooLarge(uint256 total); + /** + * @dev Struct representing a word range with minimum and maximum word lengths. + */ + + struct WordRange { + uint8 min; + uint8 max; + } + + uint256 public constant MAX_SUBSTRING_SIZE = type(uint16).max; + + /** + * @dev Retrieves all possible substrings within a given string based on a specified word range. + * @param str The input string to analyze. + * @param wordRange The word range specifying the minimum and maximum word lengths. + * @return subStrings An array of all possible substrings within the input string. + */ + function getAllSubStrings(string calldata str, WordRange memory wordRange) + internal + pure + returns (string[] memory subStrings) + { + unchecked { + uint256 length = bytes(str).length; + (uint256 total, uint256 min, uint256 max) = totalSubString(length, wordRange); + subStrings = new string[](total); + uint256 idx; + uint256 bLength; + + for (uint256 i; i < length; ++i) { + bLength = Math.min(i + max, length); + + for (uint256 j = i + min; j <= bLength; ++j) { + subStrings[idx++] = str[i:j]; + } + } + } + } + + /** + * @dev Calculates the total number of possible substrings within a given string length based on a specified word range. + * @param len The length of the input string. + * @param wordRange The word range specifying the minimum and maximum word lengths. + * @return total The total number of possible substrings. + * @return min The minimum word length allowed. + * @return max The maximum word length allowed. + */ + function totalSubString(uint256 len, WordRange memory wordRange) + internal + pure + returns (uint256 total, uint256 min, uint256 max) + { + unchecked { + min = Math.min(wordRange.min, len); + max = Math.min(wordRange.max, len); + uint256 range = max - min; + // `(range + 1)` represents the number of possible substring lengths in `range`. + // `(strlen - min + 1)` represents the number of possible starting positions for substrings with a minimum length of `min`. + total = (range + 1) * (len - min + 1) - (((range + 1) * range) >> 1); + if (total > MAX_SUBSTRING_SIZE) revert TotalSubStringTooLarge(total); + } + } +} diff --git a/src/libraries/TimestampWrapperUtils.sol b/src/libraries/TimestampWrapperUtils.sol new file mode 100644 index 00000000..d2228eca --- /dev/null +++ b/src/libraries/TimestampWrapperUtils.sol @@ -0,0 +1,7 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +struct TimestampWrapper { + uint256 value; + uint256 timestamp; +} diff --git a/src/libraries/math/LibSafeRange.sol b/src/libraries/math/LibSafeRange.sol new file mode 100644 index 00000000..402411cd --- /dev/null +++ b/src/libraries/math/LibSafeRange.sol @@ -0,0 +1,20 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +library LibSafeRange { + function add(uint256 a, uint256 b) internal pure returns (uint256 c) { + unchecked { + c = a + b; + if (c < a) return type(uint256).max; + } + } + + /** + * @dev Returns value of a + b; in case result is larger than upperbound, upperbound is returned. + */ + function addWithUpperbound(uint256 a, uint256 b, uint256 ceil) internal pure returns (uint256 c) { + if (a > ceil || b > ceil) return ceil; + c = add(a, b); + if (c > ceil) return ceil; + } +} diff --git a/src/libraries/math/PeriodScalingUtils.sol b/src/libraries/math/PeriodScalingUtils.sol new file mode 100644 index 00000000..b2dcf81c --- /dev/null +++ b/src/libraries/math/PeriodScalingUtils.sol @@ -0,0 +1,42 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; +import { PowMath } from "./PowMath.sol"; + +struct PeriodScaler { + uint192 ratio; + uint64 period; +} + +library LibPeriodScaler { + using PowMath for uint256; + + error PeriodNumOverflowedUint16(uint256 n); + + /// @dev The precision number of calculation is 2 + uint256 public constant MAX_PERCENTAGE = 100_00; + + /** + * @dev Scales down the input value `v` for a percentage of `self.ratio` each period `self.period`. + * Reverts if the passed period is larger than 2^16 - 1. + * + * @param self The period scaler with specific period and ratio + * @param v The original value to scale based on the rule `self` + * @param maxR The maximum value of 100%. Eg, if the `self.ratio` in range of [0;100_00] reflexes 0-100%, this param + * must be 100_00 + * @param dur The passed duration in the same uint with `self.period` + */ + function scaleDown(PeriodScaler memory self, uint256 v, uint64 maxR, uint256 dur) internal pure returns (uint256 rs) { + uint256 n = dur / uint256(self.period); + if (n == 0 || self.ratio == 0) return v; + if (maxR == self.ratio) return 0; + if (n > type(uint16).max) revert PeriodNumOverflowedUint16(n); + + unchecked { + // Normalizes the input ratios to be in range of [0;MAX_PERCENTAGE] + uint256 p = Math.mulDiv(maxR - self.ratio, MAX_PERCENTAGE, maxR); + return v.mulDiv({ y: p, d: MAX_PERCENTAGE, n: uint16(n) }); + } + } +} diff --git a/src/libraries/math/PowMath.sol b/src/libraries/math/PowMath.sol new file mode 100644 index 00000000..a156278c --- /dev/null +++ b/src/libraries/math/PowMath.sol @@ -0,0 +1,130 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { SafeMath } from "@openzeppelin/contracts/utils/math/SafeMath.sol"; +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; + +library PowMath { + using Math for uint256; + using SafeMath for uint256; + + /** + * @dev Negative exponent n for x*10^n. + */ + function exp10(uint256 x, int32 n) internal pure returns (uint256) { + if (n < 0) { + return x / 10 ** uint32(-n); + } else if (n > 0) { + return x * 10 ** uint32(n); + } else { + return x; + } + } + + /** + * @dev Calculates floor(x * (y / d)**n) with full precision. + */ + function mulDiv(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256 r) { + unchecked { + if (y == d || n == 0) return x; + r = x; + + bool ok; + uint256 r_; + uint16 nd_; + + { + uint16 ye = uint16(Math.min(n, findMaxExponent(y))); + while (ye > 0) { + (ok, r_) = r.tryMul(y ** ye); + if (ok) { + r = r_; + n -= ye; + nd_ += ye; + } + ye = uint16(Math.min(ye / 2, n)); + } + } + + while (n > 0) { + (ok, r_) = r.tryMul(y); + if (ok) { + r = r_; + n--; + nd_++; + } else if (nd_ > 0) { + r /= d; + nd_--; + } else { + r = r.mulDiv(y, d); + n--; + } + } + + uint16 de = findMaxExponent(d); + while (nd_ > 0) { + uint16 e = uint16(Math.min(de, nd_)); + r /= d ** e; + nd_ -= e; + } + } + } + + /** + * @dev Calculates floor(x * (y / d)**n) with low precision. + */ + function mulDivLowPrecision(uint256 x, uint256 y, uint256 d, uint16 n) internal pure returns (uint256) { + return uncheckedMulDiv(x, y, d, n, findMaxExponent(Math.max(y, d))); + } + + /** + * @dev Aggregated calculate multiplications. + * ``` + * r = x*(y/d)^k + * = \prod(x*(y/d)^{k_i}) \ where \ sum(k_i) = k + * ``` + */ + function uncheckedMulDiv(uint256 x, uint256 y, uint256 d, uint16 n, uint16 maxE) internal pure returns (uint256 r) { + unchecked { + r = x; + uint16 e; + while (n > 0) { + e = uint16(Math.min(n, maxE)); + r = r.mulDiv(y ** e, d ** e); + n -= e; + } + } + } + + /** + * @dev Returns the largest exponent `k` where, x^k <= 2^256-1 + * Note: n = Surd[2^256-1,k] + * = 10^( log2(2^256-1) / k * log10(2) ) + */ + function findMaxExponent(uint256 x) internal pure returns (uint16 k) { + if (x < 3) k = 255; + else if (x < 4) k = 128; + else if (x < 16) k = 64; + else if (x < 256) k = 32; + else if (x < 7132) k = 20; + else if (x < 11376) k = 19; + else if (x < 19113) k = 18; + else if (x < 34132) k = 17; + else if (x < 65536) k = 16; + else if (x < 137271) k = 15; + else if (x < 319558) k = 14; + else if (x < 847180) k = 13; + else if (x < 2642246) k = 12; + else if (x < 10134189) k = 11; + else if (x < 50859009) k = 10; + else if (x < 365284285) k = 9; + else if (x < 4294967296) k = 8; + else if (x < 102116749983) k = 7; + else if (x < 6981463658332) k = 6; + else if (x < 2586638741762875) k = 5; + else if (x < 18446744073709551616) k = 4; + else if (x < 48740834812604276470692695) k = 3; + else if (x < 340282366920938463463374607431768211456) k = 2; + else k = 1; + } +} diff --git a/src/libraries/pyth/PythConverter.sol b/src/libraries/pyth/PythConverter.sol new file mode 100644 index 00000000..efc176a1 --- /dev/null +++ b/src/libraries/pyth/PythConverter.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; +import { PythStructs } from "@pythnetwork/PythStructs.sol"; +import { PowMath } from "../math/PowMath.sol"; + +library PythConverter { + error ErrExponentTooLarge(int32 expo); + error ErrComputedPriceTooLarge(int32 expo1, int32 expo2, int64 price1); + + /** + * @dev Multiples and converts the price into token wei with decimals `outDecimals`. + */ + function mul(PythStructs.Price memory self, uint256 inpWei, int32 inpDecimals, int32 outDecimals) + internal + pure + returns (uint256 outWei) + { + return Math.mulDiv( + inpWei, PowMath.exp10(uint256(int256(self.price)), outDecimals + self.expo), PowMath.exp10(1, inpDecimals) + ); + } + + /** + * @dev Inverses token price of tokenA/tokenB to tokenB/tokenA. + */ + function inverse(PythStructs.Price memory self, int32 expo) internal pure returns (PythStructs.Price memory outPrice) { + uint256 exp10p1 = PowMath.exp10(1, -self.expo); + if (exp10p1 > uint256(type(int256).max)) revert ErrExponentTooLarge(self.expo); + uint256 exp10p2 = PowMath.exp10(1, -expo); + if (exp10p2 > uint256(type(int256).max)) revert ErrExponentTooLarge(expo); + int256 price = (int256(exp10p1) * int256(exp10p2)) / self.price; + if (price > type(int64).max) revert ErrComputedPriceTooLarge(self.expo, expo, self.price); + + return PythStructs.Price({ price: int64(price), conf: self.conf, expo: expo, publishTime: self.publishTime }); + } +} diff --git a/src/libraries/transfers/RONTransferHelper.sol b/src/libraries/transfers/RONTransferHelper.sol new file mode 100644 index 00000000..2aa9bade --- /dev/null +++ b/src/libraries/transfers/RONTransferHelper.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; + +/** + * @title RONTransferHelper + */ +library RONTransferHelper { + using Strings for *; + + /** + * @dev Transfers RON and wraps result for the method caller to a recipient. + */ + function safeTransfer(address payable _to, uint256 _value) internal { + bool _success = send(_to, _value); + if (!_success) { + revert( + string.concat("TransferHelper: could not transfer RON to ", _to.toHexString(), " value ", _value.toHexString()) + ); + } + } + + /** + * @dev Returns whether the call was success. + * Note: this function should use with the `ReentrancyGuard`. + */ + function send(address payable _to, uint256 _value) internal returns (bool _success) { + (_success,) = _to.call{ value: _value }(new bytes(0)); + } +} diff --git a/src/resolvers/ABIResolvable.sol b/src/resolvers/ABIResolvable.sol new file mode 100644 index 00000000..539176ce --- /dev/null +++ b/src/resolvers/ABIResolvable.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import "../interfaces/resolvers/IABIResolver.sol"; +import "./BaseVersion.sol"; + +abstract contract ABIResolvable is IABIResolver, ERC165, BaseVersion { + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev Mapping from version => node => content type => abi + mapping(uint64 version => mapping(bytes32 node => mapping(uint256 contentType => bytes abi))) internal _versionalAbi; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) { + return interfaceID == type(IABIResolver).interfaceId || super.supportsInterface(interfaceID); + } + + /** + * @inheritdoc IABIResolver + */ + function ABI(bytes32 node, uint256 contentTypes) external view virtual override returns (uint256, bytes memory) { + mapping(uint256 contentType => bytes abi) storage abiSet = _versionalAbi[_recordVersion[node]][node]; + + for (uint256 contentType = 1; contentType <= contentTypes; contentType <<= 1) { + if ((contentType & contentTypes) != 0 && abiSet[contentType].length > 0) { + return (contentType, abiSet[contentType]); + } + } + + return (0, ""); + } + + /** + * @dev See {IABIResolver-setABI}. + */ + function _setABI(bytes32 node, uint256 contentType, bytes calldata data) internal { + if (((contentType - 1) & contentType) != 0) revert InvalidContentType(); + _versionalAbi[_recordVersion[node]][node][contentType] = data; + emit ABIChanged(node, contentType); + } +} diff --git a/src/resolvers/AddressResolvable.sol b/src/resolvers/AddressResolvable.sol new file mode 100644 index 00000000..f7c1bbd8 --- /dev/null +++ b/src/resolvers/AddressResolvable.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import "../interfaces/resolvers/IAddressResolver.sol"; +import "./BaseVersion.sol"; + +abstract contract AddressResolvable is IAddressResolver, ERC165, BaseVersion { + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev Mapping from version => node => address + mapping(uint64 version => mapping(bytes32 node => address addr)) internal _versionAddress; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) { + return interfaceID == type(IAddressResolver).interfaceId || super.supportsInterface(interfaceID); + } + + /** + * @inheritdoc IAddressResolver + */ + function addr(bytes32 node) public view virtual override returns (address payable) { + return payable(_versionAddress[_recordVersion[node]][node]); + } + + /** + * @dev See {IAddressResolver-setAddr}. + */ + function _setAddr(bytes32 node, address addr_) internal { + emit AddrChanged(node, addr_); + _versionAddress[_recordVersion[node]][node] = addr_; + } +} diff --git a/src/resolvers/BaseVersion.sol b/src/resolvers/BaseVersion.sol new file mode 100644 index 00000000..5c1ffd52 --- /dev/null +++ b/src/resolvers/BaseVersion.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import "../interfaces/resolvers/IVersionResolver.sol"; + +abstract contract BaseVersion is IVersionResolver, ERC165 { + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev Mapping from node => version + mapping(bytes32 node => uint64 version) internal _recordVersion; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { + return interfaceID == type(IVersionResolver).interfaceId || super.supportsInterface(interfaceID); + } + + /** + * @inheritdoc IVersionResolver + */ + function recordVersions(bytes32 node) external view returns (uint64) { + return _recordVersion[node]; + } + + /** + * @dev See {IVersionResolver-clearRecords}. + */ + function _clearRecords(bytes32 node) internal { + unchecked { + emit VersionChanged(node, ++_recordVersion[node]); + } + } +} diff --git a/src/resolvers/ContentHashResolvable.sol b/src/resolvers/ContentHashResolvable.sol new file mode 100644 index 00000000..aad907e8 --- /dev/null +++ b/src/resolvers/ContentHashResolvable.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import "../interfaces/resolvers/IContentHashResolver.sol"; +import "./BaseVersion.sol"; + +abstract contract ContentHashResolvable is IContentHashResolver, ERC165, BaseVersion { + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev Mapping from version => node => content hash + mapping(uint64 version => mapping(bytes32 node => bytes contentHash)) internal _versionContentHash; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) { + return interfaceID == type(IContentHashResolver).interfaceId || super.supportsInterface(interfaceID); + } + + /** + * @inheritdoc IContentHashResolver + */ + function contentHash(bytes32 node) external view virtual override returns (bytes memory) { + return _versionContentHash[_recordVersion[node]][node]; + } + + /** + * @dev See {IContentHashResolver-setContentHash}. + */ + function _setContentHash(bytes32 node, bytes calldata hash) internal { + _versionContentHash[_recordVersion[node]][node] = hash; + emit ContentHashChanged(node, hash); + } +} diff --git a/src/resolvers/DNSResolvable.sol b/src/resolvers/DNSResolvable.sol new file mode 100644 index 00000000..a51e5dc5 --- /dev/null +++ b/src/resolvers/DNSResolvable.sol @@ -0,0 +1,141 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import "@ensdomains/ens-contracts/dnssec-oracle/RRUtils.sol"; +import "../interfaces/resolvers/IDNSRecordResolver.sol"; +import "../interfaces/resolvers/IDNSZoneResolver.sol"; +import "./BaseVersion.sol"; + +abstract contract DNSResolvable is IDNSRecordResolver, IDNSZoneResolver, ERC165, BaseVersion { + using RRUtils for *; + using BytesUtils for bytes; + + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev The records themselves. Stored as binary RRSETs. + mapping( + uint64 version => mapping(bytes32 node => mapping(bytes32 nameHash => mapping(uint16 resource => bytes data))) + ) private _versionRecord; + + /// @dev Count of number of entries for a given name. Required for DNS resolvers when resolving wildcards. + mapping(uint64 version => mapping(bytes32 node => mapping(bytes32 nameHash => uint16 count))) private + _versionNameEntriesCount; + + /** + * @dev Zone hashes for the domains. A zone hash is an EIP-1577 content hash in binary format that should point to a + * resource containing a single zonefile. + */ + mapping(uint64 version => mapping(bytes32 node => bytes data)) private _versionZonehash; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) { + return interfaceID == type(IDNSRecordResolver).interfaceId || interfaceID == type(IDNSZoneResolver).interfaceId + || super.supportsInterface(interfaceID); + } + + /** + * @dev Checks whether a given node has records. + * @param node the namehash of the node for which to check the records + * @param name the namehash of the node for which to check the records + */ + function hasDNSRecords(bytes32 node, bytes32 name) public view virtual returns (bool) { + return (_versionNameEntriesCount[_recordVersion[node]][node][name] != 0); + } + + /** + * @inheritdoc IDNSRecordResolver + */ + function dnsRecord(bytes32 node, bytes32 name, uint16 resource) public view virtual override returns (bytes memory) { + return _versionRecord[_recordVersion[node]][node][name][resource]; + } + + /** + * @inheritdoc IDNSZoneResolver + */ + function zonehash(bytes32 node) external view virtual override returns (bytes memory) { + return _versionZonehash[_recordVersion[node]][node]; + } + + /** + * @dev See {IDNSRecordResolver-setDNSRecords}. + */ + function _setDNSRecords(bytes32 node, bytes calldata data) internal { + uint16 resource = 0; + uint256 offset = 0; + bytes memory name; + bytes memory value; + bytes32 nameHash; + uint64 version = _recordVersion[node]; + // Iterate over the data to add the resource records + for (RRUtils.RRIterator memory iter = data.iterateRRs(0); !iter.done(); iter.next()) { + if (resource == 0) { + resource = iter.dnstype; + name = iter.name(); + nameHash = keccak256(abi.encodePacked(name)); + value = bytes(iter.rdata()); + } else { + bytes memory newName = iter.name(); + if (resource != iter.dnstype || !name.equals(newName)) { + _setDNSRRSet(node, name, resource, data, offset, iter.offset - offset, value.length == 0, version); + resource = iter.dnstype; + offset = iter.offset; + name = newName; + nameHash = keccak256(name); + value = bytes(iter.rdata()); + } + } + } + + if (name.length > 0) { + _setDNSRRSet(node, name, resource, data, offset, data.length - offset, value.length == 0, version); + } + } + + /** + * @dev See {IDNSZoneResolver-setZonehash}. + */ + function _setZonehash(bytes32 node, bytes calldata hash) internal { + uint64 currentRecordVersion = _recordVersion[node]; + bytes memory oldhash = _versionZonehash[currentRecordVersion][node]; + _versionZonehash[currentRecordVersion][node] = hash; + emit DNSZonehashChanged(node, oldhash, hash); + } + + /** + * @dev Helper method to set DNS config. + * + * May emit an event {DNSRecordDeleted}. + * May emit an event {DNSRecordChanged}. + * + */ + function _setDNSRRSet( + bytes32 node, + bytes memory name, + uint16 resource, + bytes memory data, + uint256 offset, + uint256 size, + bool deleteRecord, + uint64 version + ) private { + bytes32 nameHash = keccak256(name); + bytes memory rrData = data.substring(offset, size); + if (deleteRecord) { + if (_versionRecord[version][node][nameHash][resource].length != 0) { + _versionNameEntriesCount[version][node][nameHash]--; + } + delete (_versionRecord[version][node][nameHash][resource]); + emit DNSRecordDeleted(node, name, resource); + } else { + if (_versionRecord[version][node][nameHash][resource].length == 0) { + _versionNameEntriesCount[version][node][nameHash]++; + } + _versionRecord[version][node][nameHash][resource] = rrData; + emit DNSRecordChanged(node, name, resource, rrData); + } + } +} diff --git a/src/resolvers/InterfaceResolvable.sol b/src/resolvers/InterfaceResolvable.sol new file mode 100644 index 00000000..0f1834b2 --- /dev/null +++ b/src/resolvers/InterfaceResolvable.sol @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import { BaseVersion } from "./BaseVersion.sol"; +import { IInterfaceResolver } from "../interfaces/resolvers/IInterfaceResolver.sol"; + +abstract contract InterfaceResolvable is IInterfaceResolver, ERC165, BaseVersion { + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev Mapping from version => node => interfaceID => address + mapping(uint64 version => mapping(bytes32 node => mapping(bytes4 interfaceID => address addr))) internal + _versionInterface; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override(BaseVersion, ERC165) returns (bool) { + return interfaceID == type(IInterfaceResolver).interfaceId || super.supportsInterface(interfaceID); + } + + /** + * @inheritdoc IInterfaceResolver + */ + function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view virtual override returns (address) { + address implementer = _versionInterface[_recordVersion[node]][node][interfaceID]; + if (implementer != address(0)) return implementer; + + address addrOfNode = addr(node); + if (addrOfNode == address(0)) return address(0); + + bool success; + bytes memory returnData; + + (success, returnData) = + addrOfNode.staticcall(abi.encodeCall(IERC165.supportsInterface, (type(IERC165).interfaceId))); + + // EIP 165 not supported by target + if (!_isValidReturnData(success, returnData)) return address(0); + + (success, returnData) = addrOfNode.staticcall(abi.encodeCall(IERC165.supportsInterface, (interfaceID))); + // Specified interface not supported by target + if (!_isValidReturnData(success, returnData)) return address(0); + + return addrOfNode; + } + + /** + * @dev See {IAddressResolver-addr}. + */ + function addr(bytes32 node) public view virtual returns (address payable); + + /** + * @dev Checks whether the return data is valid. + */ + function _isValidReturnData(bool success, bytes memory returnData) internal pure returns (bool) { + return success || returnData.length < 32 || returnData[31] == 0; + } + + /** + * @dev See {InterfaceResolver-setInterface}. + */ + function _setInterface(bytes32 node, bytes4 interfaceID, address implementer) internal virtual { + _versionInterface[_recordVersion[node]][node][interfaceID] = implementer; + emit InterfaceChanged(node, interfaceID, implementer); + } +} diff --git a/src/resolvers/NameResolvable.sol b/src/resolvers/NameResolvable.sol new file mode 100644 index 00000000..531a9d30 --- /dev/null +++ b/src/resolvers/NameResolvable.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { BaseVersion } from "./BaseVersion.sol"; +import { INameResolver } from "../interfaces/resolvers/INameResolver.sol"; + +abstract contract NameResolvable is INameResolver, BaseVersion { + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev mapping from version => node => name + mapping(uint64 version => mapping(bytes32 node => string name)) internal _versionName; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { + return interfaceID == type(INameResolver).interfaceId || super.supportsInterface(interfaceID); + } + + /** + * @inheritdoc INameResolver + */ + function name(bytes32 node) public view virtual override returns (string memory) { + return _versionName[_recordVersion[node]][node]; + } + + /** + * @dev See {INameResolver-setName}. + */ + function _setName(bytes32 node, string memory newName) internal virtual { + _versionName[_recordVersion[node]][node] = newName; + emit NameChanged(node, newName); + } +} diff --git a/src/resolvers/PublicKeyResolvable.sol b/src/resolvers/PublicKeyResolvable.sol new file mode 100644 index 00000000..c871e606 --- /dev/null +++ b/src/resolvers/PublicKeyResolvable.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { BaseVersion } from "./BaseVersion.sol"; +import { IPublicKeyResolver } from "../interfaces/resolvers/IPublicKeyResolver.sol"; + +abstract contract PublicKeyResolvable is BaseVersion, IPublicKeyResolver { + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev Mapping from version => node => public key + mapping(uint64 version => mapping(bytes32 node => PublicKey publicKey)) internal _versionPublicKey; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { + return interfaceID == type(IPublicKeyResolver).interfaceId || super.supportsInterface(interfaceID); + } + + /** + * @dev See {IPublicKeyResolver-pubkey}. + */ + function pubkey(bytes32 node) external view virtual override returns (bytes32 x, bytes32 y) { + uint64 currentRecordVersion = _recordVersion[node]; + return (_versionPublicKey[currentRecordVersion][node].x, _versionPublicKey[currentRecordVersion][node].y); + } + + /** + * @dev See {IPublicKeyResolver-setPubkey}. + */ + function _setPubkey(bytes32 node, bytes32 x, bytes32 y) internal virtual { + _versionPublicKey[_recordVersion[node]][node] = PublicKey(x, y); + emit PubkeyChanged(node, x, y); + } +} diff --git a/src/resolvers/PublicResolver.sol b/src/resolvers/PublicResolver.sol new file mode 100644 index 00000000..6faca717 --- /dev/null +++ b/src/resolvers/PublicResolver.sol @@ -0,0 +1,190 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import { IVersionResolver } from "../interfaces/resolvers/IVersionResolver.sol"; +import { Multicallable } from "../extensions/Multicallable.sol"; +import { USER_FIELDS_INDICATOR } from "../types/ModifyingIndicator.sol"; +import { ABIResolvable } from "./ABIResolvable.sol"; +import { AddressResolvable } from "./AddressResolvable.sol"; +import { ContentHashResolvable } from "./ContentHashResolvable.sol"; +import { DNSResolvable } from "./DNSResolvable.sol"; +import { InterfaceResolvable } from "./InterfaceResolvable.sol"; +import { NameResolvable } from "./NameResolvable.sol"; +import { PublicKeyResolvable } from "./PublicKeyResolvable.sol"; +import { TextResolvable } from "./TextResolvable.sol"; +import "../interfaces/resolvers/IPublicResolver.sol"; + +/** + * @title Public Resolver + * @notice Customized version of PublicResolver: https://github.com/ensdomains/ens-contracts/blob/0c75ba23fae76165d51c9c80d76d22261e06179d/contracts/resolvers/PublicResolver.sol + * @dev A simple resolver anyone can use, only allows the owner of a node to set its address. + */ +contract PublicResolver is + IPublicResolver, + ABIResolvable, + AddressResolvable, + ContentHashResolvable, + DNSResolvable, + InterfaceResolvable, + NameResolvable, + PublicKeyResolvable, + TextResolvable, + Multicallable, + Initializable +{ + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + + /// @dev The RNS Unified contract + INSUnified internal _rnsUnified; + + /// @dev The reverse registrar contract + INSReverseRegistrar internal _reverseRegistrar; + + modifier onlyAuthorized(bytes32 node) { + _requireAuthorized(node, msg.sender); + _; + } + + constructor() payable { + _disableInitializers(); + } + + function initialize(INSUnified rnsUnified, INSReverseRegistrar reverseRegistrar) external initializer { + _rnsUnified = rnsUnified; + _reverseRegistrar = reverseRegistrar; + } + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) + public + view + override( + ABIResolvable, + AddressResolvable, + ContentHashResolvable, + DNSResolvable, + InterfaceResolvable, + NameResolvable, + PublicKeyResolvable, + TextResolvable, + Multicallable + ) + returns (bool) + { + return super.supportsInterface(interfaceID); + } + + /// @inheritdoc IPublicResolver + function getRNSUnified() external view returns (INSUnified) { + return _rnsUnified; + } + + /// @inheritdoc IPublicResolver + function getReverseRegistrar() external view returns (INSReverseRegistrar) { + return _reverseRegistrar; + } + + /// @inheritdoc IPublicResolver + function multicallWithNodeCheck(bytes32 node, bytes[] calldata data) + external + override + returns (bytes[] memory results) + { + if (node != 0) { + for (uint256 i; i < data.length;) { + require(node == bytes32(data[i][4:36]), "PublicResolver: All records must have a matching namehash"); + unchecked { + ++i; + } + } + } + + return _tryMulticall(true, data); + } + + /// @inheritdoc IVersionResolver + function clearRecords(bytes32 node) external onlyAuthorized(node) { + _clearRecords(node); + } + + /// @inheritdoc IABIResolver + function setABI(bytes32 node, uint256 contentType, bytes calldata data) external onlyAuthorized(node) { + _setABI(node, contentType, data); + } + + /// @inheritdoc IAddressResolver + function setAddr(bytes32 node, address addr_) external onlyAuthorized(node) { + revert("PublicResolver: Cannot set address"); + _setAddr(node, addr_); + } + + /// @inheritdoc IContentHashResolver + function setContentHash(bytes32 node, bytes calldata hash) external onlyAuthorized(node) { + _setContentHash(node, hash); + } + + /// @inheritdoc IDNSRecordResolver + function setDNSRecords(bytes32 node, bytes calldata data) external onlyAuthorized(node) { + _setDNSRecords(node, data); + } + + /// @inheritdoc IDNSZoneResolver + function setZonehash(bytes32 node, bytes calldata hash) external onlyAuthorized(node) { + _setZonehash(node, hash); + } + + /// @inheritdoc IInterfaceResolver + function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external onlyAuthorized(node) { + _setInterface(node, interfaceID, implementer); + } + + /// @inheritdoc INameResolver + function setName(bytes32 node, string calldata newName) external onlyAuthorized(node) { + _setName(node, newName); + } + + /// @inheritdoc IPublicKeyResolver + function setPubkey(bytes32 node, bytes32 x, bytes32 y) external onlyAuthorized(node) { + _setPubkey(node, x, y); + } + + /// @inheritdoc ITextResolver + function setText(bytes32 node, string calldata key, string calldata value) external onlyAuthorized(node) { + _setText(node, key, value); + } + + /// @inheritdoc IPublicResolver + function isAuthorized(bytes32 node, address account) public view returns (bool authorized) { + (authorized,) = _rnsUnified.canSetRecord(account, uint256(node), USER_FIELDS_INDICATOR); + } + + /// @dev Override {IAddressResolvable-addr}. + function addr(bytes32 node) + public + view + virtual + override(AddressResolvable, IAddressResolver, InterfaceResolvable) + returns (address payable) + { + return payable(_rnsUnified.ownerOf(uint256(node))); + } + + /// @dev Override {INameResolver-name}. + function name(bytes32 node) public view virtual override(INameResolver, NameResolvable) returns (string memory) { + address reversedAddress = _reverseRegistrar.getAddress(uint256(node)); + string memory domainName = super.name(node); + uint256 tokenId = uint256(_rnsUnified.namehash(domainName)); + return _rnsUnified.ownerOf(tokenId) == reversedAddress ? domainName : ""; + } + + /** + * @dev Reverts if the msg sender is not authorized. + */ + function _requireAuthorized(bytes32 node, address account) internal view { + require(isAuthorized(node, account), "PublicResolver: unauthorized caller"); + } +} diff --git a/src/resolvers/TextResolvable.sol b/src/resolvers/TextResolvable.sol new file mode 100644 index 00000000..926ee827 --- /dev/null +++ b/src/resolvers/TextResolvable.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { BaseVersion } from "./BaseVersion.sol"; +import { ITextResolver } from "../interfaces/resolvers/ITextResolver.sol"; + +abstract contract TextResolvable is BaseVersion, ITextResolver { + /// @dev Gap for upgradeability. + uint256[50] private ____gap; + /// @dev Mapping from version => node => key => text + mapping(uint64 version => mapping(bytes32 node => mapping(string key => string text))) internal _versionText; + + /** + * @dev Override {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceID) public view virtual override returns (bool) { + return interfaceID == type(ITextResolver).interfaceId || super.supportsInterface(interfaceID); + } + + /** + * @inheritdoc ITextResolver + */ + function text(bytes32 node, string calldata key) external view virtual override returns (string memory) { + return _versionText[_recordVersion[node]][node][key]; + } + + /** + * @dev See {ITextResolver-setText}. + */ + function _setText(bytes32 node, string calldata key, string calldata value) internal virtual { + _versionText[_recordVersion[node]][node][key] = value; + emit TextChanged(node, key, key, value); + } +} diff --git a/src/types/ModifyingIndicator.sol b/src/types/ModifyingIndicator.sol new file mode 100644 index 00000000..9c75347d --- /dev/null +++ b/src/types/ModifyingIndicator.sol @@ -0,0 +1,49 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +type ModifyingIndicator is uint256; + +using { hasAny } for ModifyingIndicator global; +using { or as | } for ModifyingIndicator global; +using { and as & } for ModifyingIndicator global; +using { eq as == } for ModifyingIndicator global; +using { not as ~ } for ModifyingIndicator global; +using { xor as ^ } for ModifyingIndicator global; +using { neq as != } for ModifyingIndicator global; + +/// @dev Indicator for modifying immutable fields: Depth, ParentId, Label. See struct {INSUnified.ImmutableRecord}. +ModifyingIndicator constant IMMUTABLE_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x7); + +/// @dev Indicator for modifying user fields: Resolver, Owner. See struct {INSUnified.MutableRecord}. +ModifyingIndicator constant USER_FIELDS_INDICATOR = ModifyingIndicator.wrap(0x18); + +/// @dev Indicator when modifying all of the fields in {ModifyingField}. +ModifyingIndicator constant ALL_FIELDS_INDICATOR = ModifyingIndicator.wrap(type(uint256).max); + +function eq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) { + return ModifyingIndicator.unwrap(self) == ModifyingIndicator.unwrap(other); +} + +function neq(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) { + return !eq(self, other); +} + +function xor(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) { + return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) ^ ModifyingIndicator.unwrap(other)); +} + +function not(ModifyingIndicator self) pure returns (ModifyingIndicator) { + return ModifyingIndicator.wrap(~ModifyingIndicator.unwrap(self)); +} + +function or(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) { + return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) | ModifyingIndicator.unwrap(other)); +} + +function and(ModifyingIndicator self, ModifyingIndicator other) pure returns (ModifyingIndicator) { + return ModifyingIndicator.wrap(ModifyingIndicator.unwrap(self) & ModifyingIndicator.unwrap(other)); +} + +function hasAny(ModifyingIndicator self, ModifyingIndicator other) pure returns (bool) { + return self & other != ModifyingIndicator.wrap(0); +} diff --git a/test/RNSUnified/RNSUnified.ERC721.t.sol b/test/RNSUnified/RNSUnified.ERC721.t.sol new file mode 100644 index 00000000..85388cab --- /dev/null +++ b/test/RNSUnified/RNSUnified.ERC721.t.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./RNSUnified.t.sol"; + +contract RNSUnified_ERC721_Test is RNSUnifiedTest { + function test_TokenMetadata() external { + assertEq(_rns.name(), "Ronin Name Service"); + assertEq(_rns.symbol(), "RNS"); + } + + function testFuzz_WhenExpired_RevokeOwnership_ownerOf(MintParam calldata mintParam) external mintAs(_controller) { + (uint64 expiry, uint256 id) = _mint(_ronId, mintParam, _noError); + _warpToExpire(expiry); + assertEq(_rns.ownerOf(id), address(0x00)); + } + + function testFuzz_WhenExpired_RevokeApproval_getApproved(address approved, MintParam calldata mintParam) + external + validAccount(approved) + mintAs(_controller) + { + vm.assume(approved != mintParam.owner && approved != _admin); + (uint64 expiry, uint256 id) = _mint(_ronId, mintParam, _noError); + vm.prank(mintParam.owner); + _rns.setApprovalForAll(approved, true); + _warpToExpire(expiry); + address actualApproved = _rns.getApproved(id); + assertEq(actualApproved, address(0x00)); + } + + function testFuzz_UpdateRecordOwner_transferFrom(address newOwner, MintParam calldata mintParam) + external + validAccount(newOwner) + mintAs(_controller) + { + vm.assume(newOwner != _admin && newOwner != mintParam.owner); + (, uint256 id) = _mint(_ronId, mintParam, _noError); + vm.prank(mintParam.owner); + _rns.transferFrom(mintParam.owner, newOwner, id); + INSUnified.Record memory record = _rns.getRecord(id); + assertEq(record.mut.owner, newOwner); + } + + function testFuzz_WhenTransfered_LostProtected(address newOwner, MintParam calldata mintParam) + external + validAccount(newOwner) + mintAs(_controller) + { + vm.assume(newOwner != mintParam.owner); + (, uint256 id) = _mint(_ronId, mintParam, _noError); + + uint256[] memory ids = new uint256[](1); + ids[0] = id; + vm.prank(_protectedSettler); + _rns.bulkSetProtected(ids, true); + + INSUnified.Record memory record = _rns.getRecord(id); + assertTrue(record.mut.protected); + + vm.prank(mintParam.owner); + _rns.transferFrom(mintParam.owner, newOwner, id); + + record = _rns.getRecord(id); + assertFalse(record.mut.protected); + } +} diff --git a/test/RNSUnified/RNSUnified.bulkSetProtected.t.sol b/test/RNSUnified/RNSUnified.bulkSetProtected.t.sol new file mode 100644 index 00000000..08a9ccfb --- /dev/null +++ b/test/RNSUnified/RNSUnified.bulkSetProtected.t.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./RNSUnified.t.sol"; + +contract RNSUnified_BulkSetProtected_Test is RNSUnifiedTest { + using LibModifyingField for ModifyingField; + + uint256 public constant MAX_FUZZ_INPUT = 100; + + modifier boundFuzzArrLength(uint256 length) { + vm.assume(length <= MAX_FUZZ_INPUT); + _; + } + + function testFuzz_RevertWhenNotMinted_bulkSetProtected(bool protected, MintParam calldata mintParam) external { + vm.skip(true); + uint256 id = _toId(_ronId, mintParam.name); + uint256[] memory ids = new uint256[](1); + ids[0] = id; + vm.expectRevert(INSUnified.Unexists.selector); + vm.prank(_protectedSettler); + _rns.bulkSetProtected(ids, protected); + } + + function testGas_WhenMinted_AsProtectedSettler_bulkSetProtected(MintParam[] calldata mintParams) + external + mintAs(_controller) + boundFuzzArrLength(mintParams.length) + { + uint256[] memory ids = _mintBulk(mintParams); + + vm.prank(_protectedSettler); + _rns.bulkSetProtected(ids, true); + + vm.pauseGasMetering(); + for (uint256 i; i < ids.length;) { + assertTrue(_rns.getRecord(ids[i]).mut.protected); + + unchecked { + ++i; + } + } + vm.resumeGasMetering(); + } + + function testGas_WhenMinted_AsProtectedSettler_bulkSetUnprotected(MintParam[] calldata mintParams) + external + mintAs(_controller) + boundFuzzArrLength(mintParams.length) + { + uint256[] memory ids = _mintBulk(mintParams); + + vm.pauseGasMetering(); + vm.prank(_protectedSettler); + _rns.bulkSetProtected(ids, true); + + vm.resumeGasMetering(); + vm.prank(_protectedSettler); + _rns.bulkSetProtected(ids, false); + vm.pauseGasMetering(); + + for (uint256 i; i < ids.length;) { + assertFalse(_rns.getRecord(ids[i]).mut.protected); + + unchecked { + ++i; + } + } + vm.resumeGasMetering(); + } +} diff --git a/test/RNSUnified/RNSUnified.mint.t.sol b/test/RNSUnified/RNSUnified.mint.t.sol new file mode 100644 index 00000000..331108c6 --- /dev/null +++ b/test/RNSUnified/RNSUnified.mint.t.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./RNSUnified.t.sol"; + +contract RNSUnified_Mint_Test is RNSUnifiedTest { + function testGas_AsController_mint(MintParam calldata mintParam) external mintAs(_controller) { + _mint(_ronId, mintParam, _noError); + } + + function testGas_AsAdmin_mint(MintParam calldata mintParam) external mintAs(_admin) { + _mint(_ronId, mintParam, _noError); + } + + function testFuzz_AsParentApproved_mint(address approved, MintParam calldata mintParam) + external + validAccount(approved) + mintAs(approved) + { + vm.assume(_admin != approved); + vm.prank(_admin); + _rns.approve(approved, _ronId); + _mint(_ronId, mintParam, _noError); + } + + function testFuzz_RevertWhenPaused_AsController_mint(MintParam calldata mintParam) external mintAs(_controller) { + vm.prank(_pauser); + _rns.pause(); + _mint(_ronId, mintParam, Error(true, "Pausable: paused")); + } + + function testFuzz_RevertWhenRonIdTransfered_AsController_mint(address newAdmin, MintParam calldata mintParam) + external + mintAs(_controller) + validAccount(newAdmin) + { + vm.assume(_admin != newAdmin && newAdmin != _controller); + vm.prank(_admin); + _rns.safeTransferFrom(_admin, newAdmin, _ronId); + _mint(_ronId, mintParam, Error(true, abi.encodeWithSelector(INSUnified.Unauthorized.selector))); + } + + function testFuzz_RevertIfUnauthorized_mint(address any, MintParam calldata mintParam) external mintAs(any) { + vm.assume(any != _admin && any != _controller); + _mint(_ronId, mintParam, Error(true, abi.encodeWithSelector(INSUnified.Unauthorized.selector))); + } + + function testFuzz_AsController_RevertWhenNotExpired_Remint(address otherOwner, MintParam memory mintParam) + external + mintAs(_controller) + { + _mint(_ronId, mintParam, _noError); + mintParam.owner = otherOwner; + _mint(_ronId, mintParam, Error(true, abi.encodeWithSelector(INSUnified.Unavailable.selector))); + } + + function testFuzz_AsController_WhenExpired_Remint(MintParam calldata mintParam) external mintAs(_controller) { + vm.assume(block.timestamp + mintParam.duration < _ronExpiry); + (uint64 expiry, uint256 id) = _mint(_ronId, mintParam, _noError); + assertFalse(_rns.available(id)); + _warpToExpire(expiry); + assertTrue(_rns.available(id)); + _mint(_ronId, mintParam, _noError); + } + + function testFuzz_AsController_RevertWhenControllerUnapproved_mint(MintParam calldata mintParam) + external + mintAs(_controller) + { + vm.prank(_admin); + _rns.setApprovalForAll(_controller, false); + _mint(_ronId, mintParam, Error(true, abi.encodeWithSelector(INSUnified.Unauthorized.selector))); + } + + function testFuzz_WhenRemint_LostProtected(MintParam calldata mintParam) external mintAs(_controller) { + (uint64 expiry, uint256 id) = _mint(_ronId, mintParam, _noError); + uint256[] memory ids = new uint256[](1); + ids[0] = id; + + vm.prank(_protectedSettler); + _rns.bulkSetProtected(ids, true); + + _warpToExpire(expiry); + _mint(_ronId, mintParam, _noError); + + assertFalse(_rns.getRecord(id).mut.protected); + } +} diff --git a/test/RNSUnified/RNSUnified.namehash.t.sol b/test/RNSUnified/RNSUnified.namehash.t.sol new file mode 100644 index 00000000..6f2e8f70 --- /dev/null +++ b/test/RNSUnified/RNSUnified.namehash.t.sol @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./RNSUnified.t.sol"; +import { LibString } from "solady/utils/LibString.sol"; + +contract RNSUnified_NameHash_Test is RNSUnifiedTest { + using LibString for *; + + function testGas_namehash(string calldata domainName) external view { + _rns.namehash(domainName); + } + + function testFuzz_namehash(string memory domainName) external { + vm.assume(domainName.is7BitASCII()); + vm.assume(bytes(domainName).length != 0); + vm.assume(bytes1(bytes(domainName)[bytes(domainName).length - 1]) != 0x2e); + domainName = domainName.lower(); + + bytes32 expected = _tryExecCastNameHash(domainName); + bytes32 actual = bytes32(_rns.namehash(domainName)); + assertEq(expected, actual, "expected != actual"); + } + + function testFuzz_WithDepth_namehash(string[] calldata names) external { + vm.skip(true); + string memory domainName = "ron"; + for (uint256 i; i < names.length;) { + vm.assume(names[i].is7BitASCII()); + domainName = string.concat(names[i].lower(), ".", domainName); + unchecked { + ++i; + } + } + + console2.log("domainName", domainName); + + bytes32 actual = _rns.namehash(domainName); + bytes32 expected = _tryExecCastNameHash(domainName); + assertEq(expected, actual, "expected != actual"); + } + + function testConcrete_namehash(MintParam memory mintParam) external mintAs(_admin) mintGasOff { + vm.skip(true); + // script: `cast namehash ron` + bytes32 precomputedRonNode = 0xba69923fa107dbf5a25a073a10b7c9216ae39fbadc95dc891d460d9ae315d688; + // script: `cast namehash duke.ron` + bytes32 precomputedDukeRonNode = 0x4467e296cabb66ee07d345db56cf81360336f0e6eafb97957d0c2ab9082adbd3; + // script: `cast namehash vip.duke.ron` + bytes32 precomputedVipDukeRonNode = 0x7dfa57d9b2429bb181ddacbbc46bcc286a485f9e691bc64a170ad976c9199a18; + // script: `cast namehash abc.def.xyz.ron` + bytes32 precomputedAbcDefXyzRonNode = 0xfa0b23ea2345da3c215b2ce4a5bb2139c5ed05616b14e7f1d535813acce45b42; + // script: `cast namehash �.ron` + bytes32 precomputedUnicodeRonNode = 0xb302a636e6ceb332cbd5d0c9f2dc9be5d81975d2ce808400168856f186fee057; + + mintParam.owner = _controller; + mintParam.name = "duke"; + (, uint256 dukeRonId) = _mint(_ronId, mintParam, _noError); + mintParam.name = "vip"; + (, uint256 vipDukeRonId) = _mint(dukeRonId, mintParam, _noError); + + assertEq(bytes32(_ronId), precomputedRonNode); + assertEq(bytes32(dukeRonId), precomputedDukeRonNode); + assertEq(bytes32(vipDukeRonId), precomputedVipDukeRonNode); + assertEq(_rns.namehash("ron"), precomputedRonNode); + assertEq(_rns.namehash("duke.ron"), precomputedDukeRonNode); + assertEq(_rns.namehash(unicode"�.ron"), precomputedUnicodeRonNode); + assertEq(_rns.namehash("vip.duke.ron"), precomputedVipDukeRonNode); + assertEq(_rns.namehash("abc.def.xyz.ron"), precomputedAbcDefXyzRonNode); + } + + function _tryExecCastNameHash(string memory str) internal returns (bytes32 expected) { + string[] memory commandInput = new string[](4); + commandInput[0] = "cast"; + commandInput[1] = "namehash"; + commandInput[2] = "--"; + commandInput[3] = str; + bytes memory result; + try vm.ffi(commandInput) returns (bytes memory res) { + result = res; + } catch { + vm.assume(result.length != 0); + } + expected = bytes32(result); + } +} diff --git a/test/RNSUnified/RNSUnified.reclaim.t.sol b/test/RNSUnified/RNSUnified.reclaim.t.sol new file mode 100644 index 00000000..84a0480b --- /dev/null +++ b/test/RNSUnified/RNSUnified.reclaim.t.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./RNSUnified.t.sol"; + +contract RNSUnified_Reclaim_Test is RNSUnifiedTest { + using LibModifyingField for *; + + function test_WhenMintedAndTransferedToNewOwner_AsController_ReclaimOwnership_reclaim( + address newOwner, + MintParam calldata mintParam + ) external mintAs(_controller) reclaimAs(_controller) validAccount(newOwner) { + vm.assume(newOwner != mintParam.owner); + (, uint256 id) = _mint(_ronId, mintParam, _noError); + + vm.prank(mintParam.owner); + _rns.transferFrom(mintParam.owner, newOwner, id); + + assertEq(newOwner, _rns.ownerOf(id)); + assertEq(newOwner, _rns.getRecord(id).mut.owner); + + _reclaim(id, mintParam.owner); + } + + function test_WhenMinted_AsParentOwner_ReclaimOwnership_reclaim(address newOwner, MintParam calldata mintParam) + external + mintAs(_controller) + reclaimAs(_admin) + validAccount(newOwner) + { + vm.assume(newOwner != mintParam.owner); + (, uint256 id) = _mint(_ronId, mintParam, _noError); + + _reclaim(id, newOwner); + } + + function test_WhenMinted_AsApproved_ReclaimOwnership_reclaim( + address approved, + address newOwner, + MintParam calldata mintParam + ) external mintAs(_controller) reclaimAs(approved) validAccount(approved) validAccount(newOwner) { + vm.assume(approved != mintParam.owner); + vm.assume(newOwner != mintParam.owner); + + (, uint256 id) = _mint(_ronId, mintParam, _noError); + vm.prank(mintParam.owner); + _rns.approve(approved, id); + + _reclaim(id, newOwner); + } +} diff --git a/test/RNSUnified/RNSUnified.setExpiry.t.sol b/test/RNSUnified/RNSUnified.setExpiry.t.sol new file mode 100644 index 00000000..3d7a64f2 --- /dev/null +++ b/test/RNSUnified/RNSUnified.setExpiry.t.sol @@ -0,0 +1,96 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./RNSUnified.t.sol"; + +contract RNSUnified_SetExpiry_Test is RNSUnifiedTest { + using Strings for *; + + function testGas_AsController_Renew(MintParam calldata mintParam, uint64 renewDuration) external mintAs(_controller) { + vm.assume(renewDuration > mintParam.duration); + (, uint256 id) = _mint(_ronId, mintParam, _noError); + + vm.prank(_controller); + _rns.renew(id, renewDuration); + } + + function testGas_AsController_SetExpiry(MintParam calldata mintParam, uint64 renewExpiry) + external + mintAs(_controller) + { + vm.assume(renewExpiry > block.timestamp + mintParam.duration); + (, uint256 id) = _mint(_ronId, mintParam, _noError); + + vm.prank(_controller); + _rns.setExpiry(id, renewExpiry); + } + + function testFuzz_RevertWhenAvailable_Renew(MintParam calldata mintParam, uint64 renewDuration) + external + mintAs(_controller) + { + uint256 id = _toId(_ronId, mintParam.name); + vm.prank(_controller); + vm.expectRevert(INSUnified.NameMustBeRegisteredOrInGracePeriod.selector); + _rns.renew(id, renewDuration); + } + + function testFuzz_RevertWhenAvailable_SetExpiry(MintParam calldata mintParam, uint64 renewExpiry) + external + mintAs(_controller) + { + uint256 id = _toId(_ronId, mintParam.name); + vm.prank(_controller); + vm.expectRevert(INSUnified.NameMustBeRegisteredOrInGracePeriod.selector); + _rns.renew(id, renewExpiry); + } + + function testFuzz_RevertIfNewExpiryLessThanCurrentExpiry_SetExpiry(MintParam calldata mintParam, uint64 renewExpiry) + external + mintAs(_controller) + { + (uint64 expiry, uint256 id) = _mint(_ronId, mintParam, _noError); + vm.assume(renewExpiry < expiry); + + vm.prank(_controller); + vm.expectRevert(INSUnified.ExpiryTimeMustBeLargerThanTheOldOne.selector); + _rns.setExpiry(id, renewExpiry); + } + + function testFuzz_RevertIf_AsUnauthorized_Renew(address any, MintParam calldata mintParam, uint64 renewDuration) + external + mintAs(_controller) + { + vm.assume(any != _controller && any != _admin); + vm.assume(renewDuration > mintParam.duration); + (, uint256 id) = _mint(_ronId, mintParam, _noError); + + bytes memory revertMessage = bytes( + string.concat( + "AccessControl: account ", any.toHexString(), " is missing role ", uint256(_rns.CONTROLLER_ROLE()).toHexString() + ) + ); + vm.prank(any); + vm.expectRevert(revertMessage); + _rns.renew(id, renewDuration); + } + + function testFuzz_RevertIf_AsUnauthorized_SetExpiry(address any, MintParam calldata mintParam, uint64 renewExpiry) + external + validAccount(any) + mintAs(_controller) + { + vm.assume(renewExpiry > block.timestamp + mintParam.duration); + vm.assume(any != _controller && any != _admin); + (, uint256 id) = _mint(_ronId, mintParam, _noError); + + bytes memory revertMessage = bytes( + string.concat( + "AccessControl: account ", any.toHexString(), " is missing role ", uint256(_rns.CONTROLLER_ROLE()).toHexString() + ) + ); + vm.prank(any); + vm.expectRevert(revertMessage); + _rns.setExpiry(id, renewExpiry); + } +} diff --git a/test/RNSUnified/RNSUnified.setRecord.t.sol b/test/RNSUnified/RNSUnified.setRecord.t.sol new file mode 100644 index 00000000..55396b36 --- /dev/null +++ b/test/RNSUnified/RNSUnified.setRecord.t.sol @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./RNSUnified.t.sol"; + +contract RNSUnified_SetRecord_Test is RNSUnifiedTest { + using LibModifyingField for ModifyingField; + + INSUnified.MutableRecord internal _emptyMutRecord; + + function testFuzz_WhenMinted_AsProtectedSettler_CanSetProtectedField_canSetRecord( + MintParam calldata mintParam, + INSUnified.MutableRecord calldata mutRecord + ) external mintAs(_controller) setRecordAs(_protectedSettler) { + (, uint256 id) = _mint(_ronId, mintParam, _noError); + (bool allowed, bytes4 error) = _rns.canSetRecord(_protectedSettler, id, ModifyingField.Protected.indicator()); + assertTrue(allowed, _errorIndentifier[error]); + + _setRecord(id, ModifyingField.Protected.indicator(), mutRecord, _noError); + } + + function testFuzz_WhenMinted_AsController_CanSetMutableField_canSetRecord( + ModifyingIndicator indicator, + MintParam calldata mintParam, + INSUnified.MutableRecord calldata mutRecord + ) external mintAs(_controller) setRecordAs(_controller) { + vm.assume(!indicator.hasAny(IMMUTABLE_FIELDS_INDICATOR)); + vm.assume(!indicator.hasAny(ModifyingField.Protected.indicator())); + if (indicator.hasAny(ModifyingField.Owner.indicator())) { + _assumeValidAccount(mutRecord.owner); + } + if (indicator.hasAny(ModifyingField.Expiry.indicator())) { + vm.assume(mutRecord.expiry > block.timestamp + mintParam.duration); + } + (, uint256 id) = _mint(_ronId, mintParam, _noError); + (bool allowed, bytes4 error) = _rns.canSetRecord(_controller, id, indicator); + assertTrue(allowed, _errorIndentifier[error]); + + _setRecord(id, indicator, mutRecord, _noError); + } + + function testFuzz_WhenMinted_AsController_CannotSetProtectedField_canSetRecord( + ModifyingIndicator indicator, + MintParam calldata mintParam + ) external mintAs(_controller) setRecordAs(_controller) { + vm.assume(indicator.hasAny(ModifyingField.Protected.indicator())); + (, uint256 id) = _mint(_ronId, mintParam, _noError); + (bool allowed, bytes4 error) = _rns.canSetRecord(_controller, id, indicator); + assertFalse(allowed, _errorIndentifier[error]); + + _setRecord(id, indicator, _emptyMutRecord, Error(true, abi.encodeWithSelector(error))); + } + + function testFuzz_WhenMinted_AsProtectedSettler_CannotSetImmutableField_canSetRecord( + ModifyingIndicator indicator, + MintParam calldata mintParam + ) external mintAs(_controller) setRecordAs(_protectedSettler) { + vm.assume(indicator != ModifyingIndicator.wrap(0x00)); + vm.assume(indicator.hasAny(IMMUTABLE_FIELDS_INDICATOR)); + + (, uint256 id) = _mint(_ronId, mintParam, _noError); + (bool allowed, bytes4 error) = _rns.canSetRecord(_protectedSettler, id, indicator); + assertFalse(allowed, _errorIndentifier[error]); + + _setRecord(id, indicator, _emptyMutRecord, Error(true, abi.encodeWithSelector(error))); + } + + function testFuzz_WhenMinted_AsProtectedSettler_CannotSetOtherMutableField_canSetRecord( + ModifyingIndicator indicator, + MintParam calldata mintParam + ) external mintAs(_controller) setRecordAs(_protectedSettler) { + vm.assume(indicator != ModifyingIndicator.wrap(0x00)); + vm.assume(indicator.hasAny(USER_FIELDS_INDICATOR)); + vm.assume(indicator.hasAny(IMMUTABLE_FIELDS_INDICATOR)); + + (, uint256 id) = _mint(_ronId, mintParam, _noError); + (bool allowed, bytes4 error) = _rns.canSetRecord(_protectedSettler, id, indicator); + assertFalse(allowed, _errorIndentifier[error]); + + _setRecord(id, indicator, _emptyMutRecord, Error(true, abi.encodeWithSelector(error))); + } + + function testFuzz_WhenNotMinted_AsProtectedSettler_CannotSetProtectedField_canSetRecord( + ModifyingIndicator indicator, + MintParam calldata mintParam + ) external setRecordAs(_protectedSettler) { + vm.assume(!indicator.hasAny(IMMUTABLE_FIELDS_INDICATOR)); + vm.assume(indicator.hasAny(ModifyingField.Protected.indicator())); + uint256 id = _toId(_ronId, mintParam.name); + (bool allowed, bytes4 error) = _rns.canSetRecord(_protectedSettler, id, indicator); + assertFalse(allowed, _errorIndentifier[error]); + assertEq(error, INSUnified.Unexists.selector, _errorIndentifier[error]); + + _setRecord(id, indicator, _emptyMutRecord, Error(true, abi.encodeWithSelector(error))); + } + + function testFuzz_WhenNotMinted_AsProtectedSettler_CannotSetImmutableField_canSetRecord( + ModifyingIndicator indicator, + MintParam calldata mintParam + ) external setRecordAs(_protectedSettler) { + vm.assume(indicator != ModifyingIndicator.wrap(0x00)); + vm.assume(indicator.hasAny(IMMUTABLE_FIELDS_INDICATOR)); + + uint256 id = _toId(_ronId, mintParam.name); + (bool allowed, bytes4 error) = _rns.canSetRecord(_protectedSettler, id, indicator); + assertFalse(allowed, _errorIndentifier[error]); + assertEq(error, INSUnified.CannotSetImmutableField.selector, _errorIndentifier[error]); + + _setRecord(id, indicator, _emptyMutRecord, Error(true, abi.encodeWithSelector(error))); + } + + function testFuzz_WhenNotMinted_AsProtectedSettler_CannotSetOtherMutableField_canSetRecord( + ModifyingIndicator indicator, + MintParam calldata mintParam + ) external setRecordAs(_protectedSettler) { + vm.assume(indicator != ModifyingIndicator.wrap(0x00)); + vm.assume(indicator.hasAny(USER_FIELDS_INDICATOR)); + vm.assume(!indicator.hasAny(IMMUTABLE_FIELDS_INDICATOR)); + + uint256 id = _toId(_ronId, mintParam.name); + (bool allowed, bytes4 error) = _rns.canSetRecord(_protectedSettler, id, indicator); + assertFalse(allowed, _errorIndentifier[error]); + assertEq(error, INSUnified.Unexists.selector, _errorIndentifier[error]); + + _setRecord(id, indicator, _emptyMutRecord, Error(true, abi.encodeWithSelector(error))); + } +} diff --git a/test/RNSUnified/RNSUnified.t.sol b/test/RNSUnified/RNSUnified.t.sol new file mode 100644 index 00000000..e541a2a3 --- /dev/null +++ b/test/RNSUnified/RNSUnified.t.sol @@ -0,0 +1,290 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import { TransparentUpgradeableProxy } from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; +import { console2, Test } from "forge-std/Test.sol"; +import "@rns-contracts/RNSUnified.sol"; + +abstract contract RNSUnifiedTest is Test { + using Strings for *; + using LibModifyingField for *; + + /// @dev Emitted when a base URI is updated. + event BaseURIUpdated(address indexed operator, string newURI); + /// @dev Emitted when the grace period for all domain is updated. + event GracePeriodUpdated(address indexed operator, uint64 newGracePeriod); + + /** + * @dev Emitted when the record of node is updated. + * @param indicator The binary index of updated fields. Eg, 0b10101011 means fields at position 1, 2, 4, 6, 8 (right + * to left) needs to be updated. + * @param record The updated fields. + */ + event RecordUpdated(uint256 indexed node, ModifyingIndicator indicator, INSUnified.Record record); + + struct MintParam { + address owner; + string name; + address resolver; + uint64 duration; + } + + struct Error { + bool shouldThrow; + bytes revertMessage; + } + + uint64 public constant GRACE_PERIOD = 30 days; + string public constant BASE_URI = "https://example.com/"; + + address internal _admin; + address internal _pauser; + address internal _proxyAdmin; + address internal _controller; + address internal _protectedSettler; + + uint256 internal _ronId; + Error internal _noError; + RNSUnified internal _rns; + uint64 internal _ronExpiry; + + /// @dev state changes variables + address internal $minter; + address internal $reclaimer; + address internal $recordSetter; + bool internal $mintGasOff; + + mapping(string name => bool used) internal _usedName; + mapping(bytes4 errorCode => string indentifier) internal _errorIndentifier; + + modifier validAccount(address addr) { + _assumeValidAccount(addr); + _; + } + + modifier mintAs(address addr) { + _assumeValidAccount(addr); + $minter = addr; + _; + } + + modifier reclaimAs(address addr) { + _assumeValidAccount(addr); + $reclaimer = addr; + _; + } + + modifier setRecordAs(address addr) { + _assumeValidAccount(addr); + $recordSetter = addr; + _; + } + + modifier mintGasOff() { + $mintGasOff = true; + _; + } + + function setUp() external { + _admin = makeAddr("admin"); + _pauser = makeAddr("pauser"); + _controller = makeAddr("controller"); + _proxyAdmin = makeAddr("proxyAdmin"); + _protectedSettler = makeAddr("protectedSettler"); + + address logic = address(new RNSUnified()); + _rns = RNSUnified( + address( + new TransparentUpgradeableProxy(logic, _proxyAdmin, abi.encodeCall(RNSUnified.initialize, (_admin, _pauser, _controller, _protectedSettler, GRACE_PERIOD, BASE_URI))) + ) + ); + + vm.label(logic, "RNSUnfied::Logic"); + vm.label(address(_rns), "RNSUnfied::Proxy"); + + _errorIndentifier[INSUnified.Unexists.selector] = "Unexists"; + _errorIndentifier[INSUnified.Unauthorized.selector] = "Unauthorized"; + _errorIndentifier[INSUnified.MissingControllerRole.selector] = "MissingControllerRole"; + _errorIndentifier[INSUnified.CannotSetImmutableField.selector] = "CannotSetImmutableField"; + _errorIndentifier[INSUnified.MissingProtectedSettlerRole.selector] = "MissingProtectedSettlerRole"; + + vm.warp(block.timestamp + GRACE_PERIOD + 1 seconds); + vm.startPrank(_admin); + (_ronExpiry, _ronId) = _rns.mint(0x0, "ron", address(0), _admin, _rns.MAX_EXPIRY()); + _rns.setApprovalForAll(_controller, true); + vm.stopPrank(); + } + + function _assumeValidAccount(address addr) internal { + vm.assume(addr != _proxyAdmin); + assumeAddressIsNot( + addr, AddressType.NonPayable, AddressType.ForgeAddress, AddressType.ZeroAddress, AddressType.Precompile + ); + } + + function _mint(uint256 parentId, MintParam memory mintParam, Error memory error) + internal + noGasMetering + validAccount(mintParam.owner) + returns (uint64 expiry, uint256 id) + { + require($minter != address(0), "Minter for RNSUnified::mint not set!"); + vm.assume(block.timestamp + mintParam.duration < _ronExpiry); + if (error.shouldThrow) vm.expectRevert(error.revertMessage); + + if (!$mintGasOff) vm.resumeGasMetering(); + vm.prank($minter); + (expiry, id) = _rns.mint(parentId, mintParam.name, mintParam.resolver, mintParam.owner, mintParam.duration); + if (!$mintGasOff) vm.pauseGasMetering(); + + if (!error.shouldThrow) _assertMint(parentId, id, mintParam); + } + + function _mintBulk(MintParam[] calldata mintParams) internal mintGasOff noGasMetering returns (uint256[] memory ids) { + uint256 ronId = _ronId; + MintParam memory mintParam; + Error memory noError = _noError; + uint256 length = mintParams.length; + ids = new uint256[](length); + + for (uint256 i; i < length;) { + mintParam = mintParams[i]; + vm.assume(!_usedName[mintParam.name]); + (, ids[i]) = _mint(ronId, mintParam, noError); + _usedName[mintParam.name] = true; + + unchecked { + ++i; + } + } + } + + function _reclaim(uint256 id, address owner) internal { + require($reclaimer != address(0), "Reclaimer for RNSUnified::reclaim not set!"); + INSUnified.Record memory emittedRecord; + emittedRecord.mut.owner = owner; + + vm.expectEmit(address(_rns)); + emit RecordUpdated(id, ModifyingField.Owner.indicator(), emittedRecord); + vm.prank($reclaimer); + _rns.reclaim(id, owner); + + assertEq(owner, _rns.ownerOf(id)); + assertEq(owner, _rns.getRecord(id).mut.owner); + } + + function _setRecord( + uint256 id, + ModifyingIndicator indicator, + INSUnified.MutableRecord memory mutRecord, + Error memory error + ) internal { + require($recordSetter != address(0), "Record Setter for RNSUnified::setRecord not set!"); + + INSUnified.MutableRecord memory mutRecordBefore; + INSUnified.MutableRecord memory mutRecordAfter; + INSUnified.Record memory filledRecord; + + if (error.shouldThrow) { + vm.expectRevert(error.revertMessage); + } else { + mutRecordBefore = _rns.getRecord(id).mut; + filledRecord = _fillMutRecord(indicator, mutRecord); + // vm.expectEmit(address(_rns)); + // emit RecordUpdated(id, indicator, filledRecord); + } + vm.prank($recordSetter); + _rns.setRecord(id, indicator, mutRecord); + + if (!error.shouldThrow) { + mutRecordAfter = _rns.getRecord(id).mut; + _assertRecord(id, indicator, filledRecord.mut, mutRecordBefore, mutRecordAfter); + } + } + + function _warpToExpire(uint64 expiry) internal { + vm.warp(block.timestamp + expiry + 1 seconds); + } + + function _toId(uint256 parentId, string memory label) internal pure returns (uint256 id) { + bytes32 labelHash = keccak256(bytes(label)); + id = uint256(keccak256(abi.encode(parentId, labelHash))); + } + + function _fillMutRecord(ModifyingIndicator indicator, INSUnified.MutableRecord memory mutRecord) + internal + pure + returns (INSUnified.Record memory filledRecord) + { + if (indicator.hasAny(ModifyingField.Owner.indicator())) { + filledRecord.mut.owner = mutRecord.owner; + } + if (indicator.hasAny(ModifyingField.Resolver.indicator())) { + filledRecord.mut.resolver = mutRecord.resolver; + } + if (indicator.hasAny(ModifyingField.Expiry.indicator())) { + filledRecord.mut.expiry = mutRecord.expiry; + } + if (indicator.hasAny(ModifyingField.Protected.indicator())) { + filledRecord.mut.protected = mutRecord.protected; + } + } + + function _assertRecord( + uint256 id, + ModifyingIndicator indicator, + INSUnified.MutableRecord memory filledMut, + INSUnified.MutableRecord memory mutRecordBefore, + INSUnified.MutableRecord memory mutRecordAfter + ) internal { + if (indicator.hasAny(ModifyingField.Owner.indicator())) { + assertEq(mutRecordAfter.owner, filledMut.owner); + if (mutRecordAfter.expiry >= block.timestamp) { + assertEq(_rns.ownerOf(id), filledMut.owner); + } + } else { + assertEq(mutRecordBefore.owner, mutRecordAfter.owner); + if (mutRecordAfter.expiry >= block.timestamp) { + assertEq(_rns.ownerOf(id), mutRecordBefore.owner); + } + } + if (indicator.hasAny(ModifyingField.Protected.indicator())) { + assertEq(mutRecordAfter.protected, filledMut.protected); + } else { + assertEq(mutRecordAfter.protected, mutRecordBefore.protected); + } + if (indicator.hasAny(ModifyingField.Expiry.indicator())) { + if (mutRecordAfter.expiry >= block.timestamp) { + if (!_rns.hasRole(_rns.RESERVATION_ROLE(), _rns.ownerOf(id))) { + assertEq(mutRecordAfter.expiry, filledMut.expiry); + } else { + assertEq(mutRecordAfter.expiry, _rns.MAX_EXPIRY()); + } + } + } else { + assertEq(mutRecordAfter.expiry, mutRecordBefore.expiry); + } + if (indicator.hasAny(ModifyingField.Resolver.indicator())) { + assertEq(mutRecordAfter.resolver, filledMut.resolver); + } else { + assertEq(mutRecordAfter.resolver, mutRecordBefore.resolver); + } + } + + function _assertMint(uint256 parentId, uint256 id, MintParam memory mintParam) internal { + string memory domain = _rns.getDomain(id); + string memory parentDomain = _rns.getDomain(parentId); + INSUnified.Record memory record = _rns.getRecord(id); + INSUnified.Record memory parentRecord = _rns.getRecord(parentId); + + string memory name = mintParam.name; + assertEq(_rns.ownerOf(id), mintParam.owner); + assertEq(record.immut.label, name); + assertEq(record.mut.protected, false); + assertEq(record.mut.resolver, mintParam.resolver); + assertEq(record.immut.depth, parentRecord.immut.depth + 1); + assertEq(domain, string.concat(name, ".", parentDomain), "domain != $`name.{parentDomain})`"); + assertEq(_rns.tokenURI(id), string.concat(BASE_URI, address(_rns).toHexString(), "/", id.toString())); + } +} diff --git a/test/libraries/LibString.StrAddrConvert.t.sol b/test/libraries/LibString.StrAddrConvert.t.sol new file mode 100644 index 00000000..9ce1e9bd --- /dev/null +++ b/test/libraries/LibString.StrAddrConvert.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import { Test } from "forge-std/Test.sol"; +import { Strings } from "@openzeppelin/contracts/utils/Strings.sol"; +import { LibString } from "@rns-contracts/libraries/LibString.sol"; + +contract LibString_StrAddrConvert_Test is Test { + function test_AddressToString(address addr) public { + string memory expected = withoutHexPrefix(Strings.toHexString(addr)); + string memory actual = LibString.toString(addr); + assertEq(expected, actual); + } + + function test_StringToAddress(address expected) public { + string memory stringifiedAddr = withoutHexPrefix(Strings.toHexString(expected)); + address actual = LibString.parseAddr(stringifiedAddr); + assertEq(expected, actual); + } + + function withoutHexPrefix(string memory str) public pure returns (string memory) { + if (bytes(str)[0] == bytes1("0") && bytes(str)[1] == bytes1("x")) { + uint256 length = bytes(str).length; + bytes memory out = new bytes(length - 2); + for (uint256 i = 2; i < length; i++) { + out[i - 2] = bytes(str)[i]; + } + return string(out); + } + return str; + } +} diff --git a/upload-sig.sh b/upload-sig.sh new file mode 100755 index 00000000..3d0894d2 --- /dev/null +++ b/upload-sig.sh @@ -0,0 +1,71 @@ +# Default network value +networkName="ronin-testnet" +# Function to print usage and exit +usage() { + echo "Usage: $0 -c " + echo " -c: Specify the network (ronin-testnet or ronin-mainnet)" + exit 1 +} +# Parse command-line options +while getopts "c:" opt; do + case $opt in + c) + case "$OPTARG" in + ronin-testnet) + child_folder="ronin-testnet" + networkName="ronin-testnet" + ;; + ronin-mainnet) + child_folder="ronin-mainnet" + networkName="ronin-mainnet" + ;; + *) + echo "Unknown network specified: $OPTARG" + usage + ;; + esac + ;; + *) + usage + ;; + esac +done +# Shift the processed options out of the argument list +shift $((OPTIND - 1)) +# Define the deployments folder by concatenating it with the child folder +folder="deployments/$child_folder" +# Check if the specified folder exists +if [ ! -d "$folder" ]; then + echo "Error: The specified folder does not exist for the selected network." + exit 1 +fi +for file in "$folder"/*.json; do + # Check if the file exists and is a regular file + if [ -f "$file" ] && [ "$(basename "$file")" != ".chainId" ]; then + # Extract contractName and address from the JSON file + contractName=$(jq -r '.contractName' "$file") + # Check if contractName and address are not empty + if [ -n "$contractName" ]; then + # Initialize arrays to store events and errors keys + events_keys=() + errors_keys=() + # Get events and errors JSON data + events=$(forge inspect $contractName events) + errors=$(forge inspect $contractName errors) + # Extract keys and populate the arrays + while read -r key; do + events_keys+=("\"event $key\"") + done <<<"$(echo "$events" | jq -r 'keys[]')" + while read -r key; do + errors_keys+=("\"$key\"") + done <<<"$(echo "$errors" | jq -r 'keys[]')" + # Combine keys from events and errors + all_keys=("${events_keys[@]}" "${errors_keys[@]}") + # Call cast upload-signature + cast upload-signature "${all_keys[@]}" + else + echo "Error: Missing contractName or address in $file" + fi + fi +done +forge selectors upload --all diff --git a/verify.sh b/verify.sh new file mode 100755 index 00000000..8d6dc366 --- /dev/null +++ b/verify.sh @@ -0,0 +1,75 @@ +# Default network value +network="2021" +networkName="ronin-testnet" +endpoint=https://sourcify.roninchain.com/server + +# Function to print usage and exit +usage() { + echo "Usage: $0 -c " + echo " -c: Specify the network (ronin-testnet or ronin-mainnet)" + exit 1 +} + +# Parse command-line options +while getopts "c:" opt; do + case $opt in + c) + case "$OPTARG" in + ronin-testnet) + child_folder="ronin-testnet" + network="2021" + networkName="ronin-testnet" + ;; + ronin-mainnet) + child_folder="ronin-mainnet" + network="2020" + networkName="ronin-mainnet" + ;; + *) + echo "Unknown network specified: $OPTARG" + usage + ;; + esac + ;; + *) + usage + ;; + esac +done + +yarn hardhat sourcify --endpoint ${endpoint} --network ${networkName} + +# ToDo(TuDo): make foundry verification perfectly match using sourcify +# # Shift the processed options out of the argument list +# shift $((OPTIND - 1)) + +# # Define the deployments folder by concatenating it with the child folder +# folder="deployments/$child_folder" + +# # Check if the specified folder exists +# if [ ! -d "$folder" ]; then +# echo "Error: The specified folder does not exist for the selected network." +# exit 1 +# fi +# # Loop through JSON files in the selected folder +# for file in "$folder"/*.json; do +# # Check if the file exists and is a regular file +# if [ -f "$file" ]; then +# # Exclude the .chainId file +# if [ "$(basename "$file")" != ".chainId" ]; then +# # Extract contractName and address from the JSON file +# contractName=$(jq -r '.contractName' "$file") +# address=$(jq -r '.address' "$file") +# absolutePath=$(jq -r '.ast.absolutePath' "$file") + +# # Check if contractName and address are not empty +# if [ -n "$contractName" ] && [ -n "$address" ]; then +# echo "$absolutePath" +# # Call the forge command for verification with the specified network +# forge verify-contract --verifier sourcify --verifier-url ${endpoint} -c "$network" "$address" "$absolutePath:$contractName" +# else +# echo "Error: Missing contractName or address in $file" +# fi +# fi +# fi +# done diff --git a/yarn.lock b/yarn.lock index 20d882b8..83eee2bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,355 +1,6434 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^6.0.0, ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -chalk@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== - dependencies: - restore-cursor "^4.0.0" - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -colorette@^2.0.20: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -commander@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" - integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -execa@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - -husky@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" - integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -lilconfig@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lint-staged@^14.0.1: - version "14.0.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-14.0.1.tgz#57dfa3013a3d60762d9af5d9c83bdb51291a6232" - integrity sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw== - dependencies: - chalk "5.3.0" - commander "11.0.0" - debug "4.3.4" - execa "7.2.0" - lilconfig "2.1.0" - listr2 "6.6.1" - micromatch "4.0.5" - pidtree "0.6.0" - string-argv "0.3.2" - yaml "2.3.1" - -listr2@6.6.1: - version "6.6.1" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-6.6.1.tgz#08b2329e7e8ba6298481464937099f4a2cd7f95d" - integrity sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg== - dependencies: - cli-truncate "^3.1.0" - colorette "^2.0.20" - eventemitter3 "^5.0.1" - log-update "^5.0.1" - rfdc "^1.3.0" - wrap-ansi "^8.1.0" - -log-update@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" - integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== - dependencies: - ansi-escapes "^5.0.0" - cli-cursor "^4.0.0" - slice-ansi "^5.0.0" - strip-ansi "^7.0.1" - wrap-ansi "^8.0.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -micromatch@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.2, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -string-argv@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -string-width@^5.0.0, string-width@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -yaml@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" - integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@chainsafe/as-sha256@npm:^0.3.1": + version: 0.3.1 + resolution: "@chainsafe/as-sha256@npm:0.3.1" + checksum: 58ea733be1657b0e31dbf48b0dba862da0833df34a81c1460c7352f04ce90874f70003cbf34d0afb9e5e53a33ee2d63a261a8b12462be85b2ba0a6f7f13d6150 + languageName: node + linkType: hard + +"@chainsafe/persistent-merkle-tree@npm:^0.4.2": + version: 0.4.2 + resolution: "@chainsafe/persistent-merkle-tree@npm:0.4.2" + dependencies: + "@chainsafe/as-sha256": ^0.3.1 + checksum: f9cfcb2132a243992709715dbd28186ab48c7c0c696f29d30857693cca5526bf753974a505ef68ffd5623bbdbcaa10f9083f4dd40bf99eb6408e451cc26a1a9e + languageName: node + linkType: hard + +"@chainsafe/persistent-merkle-tree@npm:^0.5.0": + version: 0.5.0 + resolution: "@chainsafe/persistent-merkle-tree@npm:0.5.0" + dependencies: + "@chainsafe/as-sha256": ^0.3.1 + checksum: 2c67203da776c79cd3a6132e2d672fe132393b2e63dc71604e3134acc8c0ec25cc5e431051545939ea0f7c5ff2066fb806b9e5cab974ca085d046226a1671f7d + languageName: node + linkType: hard + +"@chainsafe/ssz@npm:^0.10.0": + version: 0.10.2 + resolution: "@chainsafe/ssz@npm:0.10.2" + dependencies: + "@chainsafe/as-sha256": ^0.3.1 + "@chainsafe/persistent-merkle-tree": ^0.5.0 + checksum: 6bb70cf741d0a19dd0b28b3f6f067b96fa39f556e2eefa6ac745b21db9c3b3a8393dc3cca8ff4a6ce065ed71ddc3fb1b2b390a92004b9d01067c26e2558e5503 + languageName: node + linkType: hard + +"@chainsafe/ssz@npm:^0.9.2": + version: 0.9.4 + resolution: "@chainsafe/ssz@npm:0.9.4" + dependencies: + "@chainsafe/as-sha256": ^0.3.1 + "@chainsafe/persistent-merkle-tree": ^0.4.2 + case: ^1.6.3 + checksum: c6eaedeae9e5618b3c666ff4507a27647f665a8dcf17d5ca86da4ed4788c5a93868f256d0005467d184fdf35ec03f323517ec2e55ec42492d769540a2ec396bc + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@ethereum-waffle/chai@npm:4.0.10": + version: 4.0.10 + resolution: "@ethereum-waffle/chai@npm:4.0.10" + dependencies: + "@ethereum-waffle/provider": 4.0.5 + debug: ^4.3.4 + json-bigint: ^1.0.0 + peerDependencies: + ethers: "*" + checksum: 11a2fa51224e98ee4cbf346a731be68b17b3c172e68391b25fc0027545d7477dbeca916bbd10be0fa9de612eaed6115a0578f9d3e312e9fe95af2b7791fd0981 + languageName: node + linkType: hard + +"@ethereum-waffle/compiler@npm:4.0.3": + version: 4.0.3 + resolution: "@ethereum-waffle/compiler@npm:4.0.3" + dependencies: + "@resolver-engine/imports": ^0.3.3 + "@resolver-engine/imports-fs": ^0.3.3 + "@typechain/ethers-v5": ^10.0.0 + "@types/mkdirp": ^0.5.2 + "@types/node-fetch": ^2.6.1 + mkdirp: ^0.5.1 + node-fetch: ^2.6.7 + peerDependencies: + ethers: "*" + solc: "*" + typechain: ^8.0.0 + checksum: ec7839b0f79a40a77fa05bb6941e00b2b3b1e0aa5514a617400c988b302bbbc5e9373b25ba52c7319bb00b83923dce42011384883c7a234c52f8c44eb5b571fc + languageName: node + linkType: hard + +"@ethereum-waffle/ens@npm:4.0.3": + version: 4.0.3 + resolution: "@ethereum-waffle/ens@npm:4.0.3" + peerDependencies: + "@ensdomains/ens": ^0.4.4 + "@ensdomains/resolver": ^0.2.4 + ethers: "*" + checksum: 84435c3dda78c416b332c481cfa9322f5bf06168d5887607d320cb30f20283ccde52eabd18adb5791485125d44d99ff7b5f84bd7bbdb1fde86465abb40a81966 + languageName: node + linkType: hard + +"@ethereum-waffle/mock-contract@npm:4.0.4": + version: 4.0.4 + resolution: "@ethereum-waffle/mock-contract@npm:4.0.4" + peerDependencies: + ethers: "*" + checksum: 45bea2ba4615a0bb81692c3d647ad39c2c37fcf250b577aeb6c5aad03fd4d0912d8d9ef5de638ab276ece1eb9ca1d09d23ed297d96da683fe34e0b01ba631da9 + languageName: node + linkType: hard + +"@ethereum-waffle/provider@npm:4.0.5": + version: 4.0.5 + resolution: "@ethereum-waffle/provider@npm:4.0.5" + dependencies: + "@ethereum-waffle/ens": 4.0.3 + "@ganache/ethereum-options": 0.1.4 + debug: ^4.3.4 + ganache: 7.4.3 + peerDependencies: + ethers: "*" + checksum: b1282ea28cbfba05343cc101bceab3f72fdd9ed391f7c7e0f252aead81aec46b6a0ab7d7ca8504e080e306d6554c21e5420765965d92ed5b303a12543dc85cf4 + languageName: node + linkType: hard + +"@ethereumjs/block@npm:^3.5.0, @ethereumjs/block@npm:^3.6.0, @ethereumjs/block@npm:^3.6.2": + version: 3.6.3 + resolution: "@ethereumjs/block@npm:3.6.3" + dependencies: + "@ethereumjs/common": ^2.6.5 + "@ethereumjs/tx": ^3.5.2 + ethereumjs-util: ^7.1.5 + merkle-patricia-tree: ^4.2.4 + checksum: d08c78134d15bc09c08b9a355ab736faa0f6b04ab87d2962e60df9c8bf977ebc68fe10aec6ca50bc2486532f489d7968fb5046defcd839b3b5ce28ca9dbce40f + languageName: node + linkType: hard + +"@ethereumjs/blockchain@npm:^5.5.0": + version: 5.5.3 + resolution: "@ethereumjs/blockchain@npm:5.5.3" + dependencies: + "@ethereumjs/block": ^3.6.2 + "@ethereumjs/common": ^2.6.4 + "@ethereumjs/ethash": ^1.1.0 + debug: ^4.3.3 + ethereumjs-util: ^7.1.5 + level-mem: ^5.0.1 + lru-cache: ^5.1.1 + semaphore-async-await: ^1.5.1 + checksum: eeefb4735ac06e6fe5ec5457eb9ac7aa26ced8651093d05067aee264f23704d79eacb1b2742e0651b73d2528aa8a9a40f3cc9e479f1837253c2dbb784a7a8e59 + languageName: node + linkType: hard + +"@ethereumjs/common@npm:2.6.0": + version: 2.6.0 + resolution: "@ethereumjs/common@npm:2.6.0" + dependencies: + crc-32: ^1.2.0 + ethereumjs-util: ^7.1.3 + checksum: f1e775f0d3963011f84cd6f6de985b342064331c8fd41bc81a6497abe959078704bf4febd8c59a3fc51c3527b1261441436d55d032f85f0453ff1af4a8dbccb3 + languageName: node + linkType: hard + +"@ethereumjs/common@npm:^2.6.0, @ethereumjs/common@npm:^2.6.4, @ethereumjs/common@npm:^2.6.5": + version: 2.6.5 + resolution: "@ethereumjs/common@npm:2.6.5" + dependencies: + crc-32: ^1.2.0 + ethereumjs-util: ^7.1.5 + checksum: 0143386f267ef01b7a8bb1847596f964ad58643c084e5fd8e3a0271a7bf8428605dbf38cbb92c84f6622080ad095abeb765f178c02d86ec52abf9e8a4c0e4ecf + languageName: node + linkType: hard + +"@ethereumjs/ethash@npm:^1.1.0": + version: 1.1.0 + resolution: "@ethereumjs/ethash@npm:1.1.0" + dependencies: + "@ethereumjs/block": ^3.5.0 + "@types/levelup": ^4.3.0 + buffer-xor: ^2.0.1 + ethereumjs-util: ^7.1.1 + miller-rabin: ^4.0.0 + checksum: 152bc0850eeb0f2507383ca005418697b0a6a4487b120d7b3fadae4cb3b4781403c96c01f0c47149031431e518fb174c284ff38806b457f86f00c500eb213df3 + languageName: node + linkType: hard + +"@ethereumjs/tx@npm:3.4.0": + version: 3.4.0 + resolution: "@ethereumjs/tx@npm:3.4.0" + dependencies: + "@ethereumjs/common": ^2.6.0 + ethereumjs-util: ^7.1.3 + checksum: 381cbb872edb0ae83a56bf5d5657ac4f594f43ca0956b6577fb762840033081252345d67151d4feafde3f97caaab9a9826348780553c05d5a8ca2984259ad555 + languageName: node + linkType: hard + +"@ethereumjs/tx@npm:^3.4.0, @ethereumjs/tx@npm:^3.5.2": + version: 3.5.2 + resolution: "@ethereumjs/tx@npm:3.5.2" + dependencies: + "@ethereumjs/common": ^2.6.4 + ethereumjs-util: ^7.1.5 + checksum: a34a7228a623b40300484d15875b9f31f0a612cfeab64a845f6866cf0bfe439519e9455ac6396149f29bc527cf0ee277ace082ae013a1075dcbf7193220a0146 + languageName: node + linkType: hard + +"@ethereumjs/vm@npm:5.6.0": + version: 5.6.0 + resolution: "@ethereumjs/vm@npm:5.6.0" + dependencies: + "@ethereumjs/block": ^3.6.0 + "@ethereumjs/blockchain": ^5.5.0 + "@ethereumjs/common": ^2.6.0 + "@ethereumjs/tx": ^3.4.0 + async-eventemitter: ^0.2.4 + core-js-pure: ^3.0.1 + debug: ^2.2.0 + ethereumjs-util: ^7.1.3 + functional-red-black-tree: ^1.0.1 + mcl-wasm: ^0.7.1 + merkle-patricia-tree: ^4.2.2 + rustbn.js: ~0.2.0 + checksum: 67f803f7dc851aeed9996cdab6751dc3f7565146ff8a24982526d33a07c173e84dd449b2fbb9202a479c7446b628105af41465b75c1f9143e1e68cf573fed4c3 + languageName: node + linkType: hard + +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abi@npm:5.7.0" + dependencies: + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: bc6962bb6cb854e4d2a4d65b2c49c716477675b131b1363312234bdbb7e19badb7d9ce66f4ca2a70ae2ea84f7123dbc4e300a1bfe5d58864a7eafabc1466627e + languageName: node + linkType: hard + +"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-provider@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + checksum: 74cf4696245cf03bb7cc5b6cbf7b4b89dd9a79a1c4688126d214153a938126d4972d42c93182198653ce1de35f2a2cad68be40337d4774b3698a39b28f0228a8 + languageName: node + linkType: hard + +"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-signer@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: a823dac9cfb761e009851050ebebd5b229d1b1cc4a75b125c2da130ff37e8218208f7f9d1386f77407705b889b23d4a230ad67185f8872f083143e0073cbfbe3 + languageName: node + linkType: hard + +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/address@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + checksum: 64ea5ebea9cc0e845c413e6cb1e54e157dd9fc0dffb98e239d3a3efc8177f2ff798cd4e3206cf3660ee8faeb7bef1a47dc0ebef0d7b132c32e61e550c7d4c843 + languageName: node + linkType: hard + +"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/base64@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + checksum: 7dd5d734d623582f08f665434f53685041a3d3b334a0e96c0c8afa8bbcaab934d50e5b6b980e826a8fde8d353e0b18f11e61faf17468177274b8e7c69cd9742b + languageName: node + linkType: hard + +"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/basex@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: 326087b7e1f3787b5fe6cd1cf2b4b5abfafbc355a45e88e22e5e9d6c845b613ffc5301d629b28d5c4d5e2bfe9ec424e6782c804956dff79be05f0098cb5817de + languageName: node + linkType: hard + +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bignumber@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + bn.js: ^5.2.1 + checksum: 8c9a134b76f3feb4ec26a5a27379efb4e156b8fb2de0678a67788a91c7f4e30abe9d948638458e4b20f2e42380da0adacc7c9389d05fce070692edc6ae9b4904 + languageName: node + linkType: hard + +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bytes@npm:5.7.0" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 66ad365ceaab5da1b23b72225c71dce472cf37737af5118181fa8ab7447d696bea15ca22e3a0e8836fdd8cfac161afe321a7c67d0dde96f9f645ddd759676621 + languageName: node + linkType: hard + +"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/constants@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + checksum: 6d4b1355747cce837b3e76ec3bde70e4732736f23b04f196f706ebfa5d4d9c2be50904a390d4d40ce77803b98d03d16a9b6898418e04ba63491933ce08c4ba8a + languageName: node + linkType: hard + +"@ethersproject/contracts@npm:5.7.0, @ethersproject/contracts@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/contracts@npm:5.7.0" + dependencies: + "@ethersproject/abi": ^5.7.0 + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + checksum: 6ccf1121cba01b31e02f8c507cb971ab6bfed85706484a9ec09878ef1594a62215f43c4fdef8f4a4875b99c4a800bc95e3be69b1803f8ce479e07634b5a740c0 + languageName: node + linkType: hard + +"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hash@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 6e9fa8d14eb08171cd32f17f98cc108ec2aeca74a427655f0d689c550fee0b22a83b3b400fad7fb3f41cf14d4111f87f170aa7905bcbcd1173a55f21b06262ef + languageName: node + linkType: hard + +"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hdnode@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: bfe5ca2d89a42de73655f853170ef4766b933c5f481cddad709b3aca18823275b096e572f92d1602a052f80b426edde44ad6b9d028799775a7dad4a5bbed2133 + languageName: node + linkType: hard + +"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/json-wallets@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + checksum: f583458d22db62efaaf94d38dd243482776a45bf90f9f3882fbad5aa0b8fd288b41eb7c1ff8ec0b99c9b751088e43d6173530db64dd33c59f9d8daa8d7ad5aa2 + languageName: node + linkType: hard + +"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/keccak256@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + js-sha3: 0.8.0 + checksum: ff70950d82203aab29ccda2553422cbac2e7a0c15c986bd20a69b13606ed8bb6e4fdd7b67b8d3b27d4f841e8222cbaccd33ed34be29f866fec7308f96ed244c6 + languageName: node + linkType: hard + +"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/logger@npm:5.7.0" + checksum: 075ab2f605f1fd0813f2e39c3308f77b44a67732b36e712d9bc085f22a84aac4da4f71b39bee50fe78da3e1c812673fadc41180c9970fe5e486e91ea17befe0d + languageName: node + linkType: hard + +"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/networks@npm:5.7.1" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 0339f312304c17d9a0adce550edb825d4d2c8c9468c1634c44172c67a9ed256f594da62c4cda5c3837a0f28b7fabc03aca9b492f68ff1fdad337ee861b27bd5d + languageName: node + linkType: hard + +"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/pbkdf2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + checksum: b895adb9e35a8a127e794f7aadc31a2424ef355a70e51cde10d457e3e888bb8102373199a540cf61f2d6b9a32e47358f9c65b47d559f42bf8e596b5fd67901e9 + languageName: node + linkType: hard + +"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/properties@npm:5.7.0" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 6ab0ccf0c3aadc9221e0cdc5306ce6cd0df7f89f77d77bccdd1277182c9ead0202cd7521329ba3acde130820bf8af299e17cf567d0d497c736ee918207bbf59f + languageName: node + linkType: hard + +"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5.7.1, @ethersproject/providers@npm:^5.7.2": + version: 5.7.2 + resolution: "@ethersproject/providers@npm:5.7.2" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + bech32: 1.1.4 + ws: 7.4.6 + checksum: 1754c731a5ca6782ae9677f4a9cd8b6246c4ef21a966c9a01b133750f3c578431ec43ec254e699969c4a0f87e84463ded50f96b415600aabd37d2056aee58c19 + languageName: node + linkType: hard + +"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/random@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 017829c91cff6c76470852855108115b0b52c611b6be817ed1948d56ba42d6677803ec2012aa5ae298a7660024156a64c11fcf544e235e239ab3f89f0fff7345 + languageName: node + linkType: hard + +"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/rlp@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: bce165b0f7e68e4d091c9d3cf47b247cac33252df77a095ca4281d32d5eeaaa3695d9bc06b2b057c5015353a68df89f13a4a54a72e888e4beeabbe56b15dda6e + languageName: node + linkType: hard + +"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/sha2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + hash.js: 1.1.7 + checksum: 09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc + languageName: node + linkType: hard + +"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/signing-key@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + bn.js: ^5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + checksum: 8f8de09b0aac709683bbb49339bc0a4cd2f95598f3546436c65d6f3c3a847ffa98e06d35e9ed2b17d8030bd2f02db9b7bd2e11c5cf8a71aad4537487ab4cf03a + languageName: node + linkType: hard + +"@ethersproject/solidity@npm:5.7.0, @ethersproject/solidity@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/solidity@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 + languageName: node + linkType: hard + +"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/strings@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 5ff78693ae3fdf3cf23e1f6dc047a61e44c8197d2408c42719fef8cb7b7b3613a4eec88ac0ed1f9f5558c74fe0de7ae3195a29ca91a239c74b9f444d8e8b50df + languageName: node + linkType: hard + +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/transactions@npm:5.7.0" + dependencies: + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + checksum: a31b71996d2b283f68486241bff0d3ea3f1ba0e8f1322a8fffc239ccc4f4a7eb2ea9994b8fd2f093283fd75f87bae68171e01b6265261f821369aca319884a79 + languageName: node + linkType: hard + +"@ethersproject/units@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/units@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc + languageName: node + linkType: hard + +"@ethersproject/wallet@npm:5.7.0, @ethersproject/wallet@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wallet@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/json-wallets": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: a4009bf7331eddab38e3015b5e9101ef92de7f705b00a6196b997db0e5635b6d83561674d46c90c6f77b87c0500fe4a6b0183ba13749efc22db59c99deb82fbd + languageName: node + linkType: hard + +"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/web@npm:5.7.1" + dependencies: + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 7028c47103f82fd2e2c197ce0eecfacaa9180ffeec7de7845b1f4f9b19d84081b7a48227aaddde05a4aaa526af574a9a0ce01cc0fc75e3e371f84b38b5b16b2b + languageName: node + linkType: hard + +"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wordlists@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 30eb6eb0731f9ef5faa44bf9c0c6e950bcaaef61e4d2d9ce0ae6d341f4e2d6d1f4ab4f8880bfce03b7aac4b862fb740e1421170cfbf8e2aafc359277d49e6e97 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.0.0 + resolution: "@fastify/busboy@npm:2.0.0" + checksum: 41879937ce1dee6421ef9cd4da53239830617e1f0bb7a0e843940772cd72827205d05e518af6adabe6e1ea19301285fff432b9d11bad01a531e698bea95c781b + languageName: node + linkType: hard + +"@ganache/ethereum-address@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/ethereum-address@npm:0.1.4" + dependencies: + "@ganache/utils": 0.1.4 + checksum: 0e07102c67aa2c25233e30f8ca359cbd012ad0e0b9580b8e6aff6f87dd46daee89bbc60d9518f2204f36f943e7bd5d20e571646c85e6a68a98784c3ede2ccec0 + languageName: node + linkType: hard + +"@ganache/ethereum-options@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/ethereum-options@npm:0.1.4" + dependencies: + "@ganache/ethereum-address": 0.1.4 + "@ganache/ethereum-utils": 0.1.4 + "@ganache/options": 0.1.4 + "@ganache/utils": 0.1.4 + bip39: 3.0.4 + seedrandom: 3.0.5 + checksum: 597b32502654ce9f3fec02fdf308f1e6b2c657b5e25c6d4219d71ecbea94e45faa4135c6d4e25cacf1faac1509f2b7546f3d8bbdba1e9121975d820999d3aa76 + languageName: node + linkType: hard + +"@ganache/ethereum-utils@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/ethereum-utils@npm:0.1.4" + dependencies: + "@ethereumjs/common": 2.6.0 + "@ethereumjs/tx": 3.4.0 + "@ethereumjs/vm": 5.6.0 + "@ganache/ethereum-address": 0.1.4 + "@ganache/rlp": 0.1.4 + "@ganache/utils": 0.1.4 + emittery: 0.10.0 + ethereumjs-abi: 0.6.8 + ethereumjs-util: 7.1.3 + checksum: 74bc7b7fb62e9dc2f114f6f428c465d9365c0bb84c85144d34935d24a2893c5471c8cae263ae4bea51f1335803b6b1771f57c25a276e9c0539a08a90c3289bca + languageName: node + linkType: hard + +"@ganache/options@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/options@npm:0.1.4" + dependencies: + "@ganache/utils": 0.1.4 + bip39: 3.0.4 + seedrandom: 3.0.5 + checksum: 4f1cda646f5599b18a0eeaf27286499c78c3e2e0eb2541db756c27f2ca16e58539c9db99aab8441e593f9fe586269940d800900f63312fcb10231ab95ebdc3dc + languageName: node + linkType: hard + +"@ganache/rlp@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/rlp@npm:0.1.4" + dependencies: + "@ganache/utils": 0.1.4 + rlp: 2.2.6 + checksum: 425c5d4a0a36b834cfac005d05679b3df970a6d8d953f385a5f9bd003a326ba23c1bce06095729879136699b70389d7f2627f939f712ed8897c96e542766771f + languageName: node + linkType: hard + +"@ganache/utils@npm:0.1.4": + version: 0.1.4 + resolution: "@ganache/utils@npm:0.1.4" + dependencies: + "@trufflesuite/bigint-buffer": 1.1.9 + emittery: 0.10.0 + keccak: 3.0.1 + seedrandom: 3.0.5 + dependenciesMeta: + "@trufflesuite/bigint-buffer": + optional: true + checksum: c81b7380d56292a44e9cdb0e581d815b9510fb1be87661fe135e2d3611b495f1cd01aa4b91e287bfc28d08d1b4b4210f7b54e32ea28e054faa006cf232fb3dcc + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@metamask/eth-sig-util@npm:^4.0.0": + version: 4.0.1 + resolution: "@metamask/eth-sig-util@npm:4.0.1" + dependencies: + ethereumjs-abi: ^0.6.8 + ethereumjs-util: ^6.2.1 + ethjs-util: ^0.1.6 + tweetnacl: ^1.0.3 + tweetnacl-util: ^0.15.1 + checksum: 740df4c92a1282e6be4c00c86c1a8ccfb93e767596e43f6da895aa5bab4a28fc3c2209f0327db34924a4a1e9db72bc4d3dddfcfc45cca0b218c9ccbf7d1b1445 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.2.0, @noble/hashes@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/hashes@npm:1.2.0" + checksum: 8ca080ce557b8f40fb2f78d3aedffd95825a415ac8e13d7ffe3643f8626a8c2d99a3e5975b555027ac24316d8b3c02a35b8358567c0c23af681e6573602aa434 + languageName: node + linkType: hard + +"@noble/secp256k1@npm:1.7.1, @noble/secp256k1@npm:~1.7.0": + version: 1.7.1 + resolution: "@noble/secp256k1@npm:1.7.1" + checksum: d2301f1f7690368d8409a3152450458f27e54df47e3f917292de3de82c298770890c2de7c967d237eff9c95b70af485389a9695f73eb05a43e2bd562d18b18cb + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-block@npm:5.0.2": + version: 5.0.2 + resolution: "@nomicfoundation/ethereumjs-block@npm:5.0.2" + dependencies: + "@nomicfoundation/ethereumjs-common": 4.0.2 + "@nomicfoundation/ethereumjs-rlp": 5.0.2 + "@nomicfoundation/ethereumjs-trie": 6.0.2 + "@nomicfoundation/ethereumjs-tx": 5.0.2 + "@nomicfoundation/ethereumjs-util": 9.0.2 + ethereum-cryptography: 0.1.3 + ethers: ^5.7.1 + checksum: 7ff744f44a01f1c059ca7812a1cfc8089f87aa506af6cb39c78331dca71b32993cbd6fa05ad03f8c4f4fab73bb998a927af69e0d8ff01ae192ee5931606e09f5 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-blockchain@npm:7.0.2": + version: 7.0.2 + resolution: "@nomicfoundation/ethereumjs-blockchain@npm:7.0.2" + dependencies: + "@nomicfoundation/ethereumjs-block": 5.0.2 + "@nomicfoundation/ethereumjs-common": 4.0.2 + "@nomicfoundation/ethereumjs-ethash": 3.0.2 + "@nomicfoundation/ethereumjs-rlp": 5.0.2 + "@nomicfoundation/ethereumjs-trie": 6.0.2 + "@nomicfoundation/ethereumjs-tx": 5.0.2 + "@nomicfoundation/ethereumjs-util": 9.0.2 + abstract-level: ^1.0.3 + debug: ^4.3.3 + ethereum-cryptography: 0.1.3 + level: ^8.0.0 + lru-cache: ^5.1.1 + memory-level: ^1.0.0 + checksum: b7e440dcd73e32aa72d13bfd28cb472773c9c60ea808a884131bf7eb3f42286ad594a0864215f599332d800f3fe1f772fff4b138d2dcaa8f41e4d8389bff33e7 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-common@npm:4.0.2": + version: 4.0.2 + resolution: "@nomicfoundation/ethereumjs-common@npm:4.0.2" + dependencies: + "@nomicfoundation/ethereumjs-util": 9.0.2 + crc-32: ^1.2.0 + checksum: f0d84704d6254d374299c19884312bd5666974b4b6f342d3f10bc76e549de78d20e45a53d25fbdc146268a52335497127e4f069126da7c60ac933a158e704887 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-ethash@npm:3.0.2": + version: 3.0.2 + resolution: "@nomicfoundation/ethereumjs-ethash@npm:3.0.2" + dependencies: + "@nomicfoundation/ethereumjs-block": 5.0.2 + "@nomicfoundation/ethereumjs-rlp": 5.0.2 + "@nomicfoundation/ethereumjs-util": 9.0.2 + abstract-level: ^1.0.3 + bigint-crypto-utils: ^3.0.23 + ethereum-cryptography: 0.1.3 + checksum: e4011e4019dd9b92f7eeebfc1e6c9a9685c52d8fd0ee4f28f03e50048a23b600c714490827f59fdce497b3afb503b3fd2ebf6815ff307e9949c3efeff1403278 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-evm@npm:2.0.2": + version: 2.0.2 + resolution: "@nomicfoundation/ethereumjs-evm@npm:2.0.2" + dependencies: + "@ethersproject/providers": ^5.7.1 + "@nomicfoundation/ethereumjs-common": 4.0.2 + "@nomicfoundation/ethereumjs-tx": 5.0.2 + "@nomicfoundation/ethereumjs-util": 9.0.2 + debug: ^4.3.3 + ethereum-cryptography: 0.1.3 + mcl-wasm: ^0.7.1 + rustbn.js: ~0.2.0 + checksum: a23cf570836ddc147606b02df568069de946108e640f902358fef67e589f6b371d856056ee44299d9b4e3497f8ae25faa45e6b18fefd90e9b222dc6a761d85f0 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-rlp@npm:5.0.2": + version: 5.0.2 + resolution: "@nomicfoundation/ethereumjs-rlp@npm:5.0.2" + bin: + rlp: bin/rlp + checksum: a74434cadefca9aa8754607cc1ad7bb4bbea4ee61c6214918e60a5bbee83206850346eb64e39fd1fe97f854c7ec0163e01148c0c881dda23881938f0645a0ef2 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-statemanager@npm:2.0.2": + version: 2.0.2 + resolution: "@nomicfoundation/ethereumjs-statemanager@npm:2.0.2" + dependencies: + "@nomicfoundation/ethereumjs-common": 4.0.2 + "@nomicfoundation/ethereumjs-rlp": 5.0.2 + debug: ^4.3.3 + ethereum-cryptography: 0.1.3 + ethers: ^5.7.1 + js-sdsl: ^4.1.4 + checksum: 3ab6578e252e53609afd98d8ba42a99f182dcf80252f23ed9a5e0471023ffb2502130f85fc47fa7c94cd149f9be799ed9a0942ca52a143405be9267f4ad94e64 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-trie@npm:6.0.2": + version: 6.0.2 + resolution: "@nomicfoundation/ethereumjs-trie@npm:6.0.2" + dependencies: + "@nomicfoundation/ethereumjs-rlp": 5.0.2 + "@nomicfoundation/ethereumjs-util": 9.0.2 + "@types/readable-stream": ^2.3.13 + ethereum-cryptography: 0.1.3 + readable-stream: ^3.6.0 + checksum: d4da918d333851b9f2cce7dbd25ab5753e0accd43d562d98fd991b168b6a08d1794528f0ade40fe5617c84900378376fe6256cdbe52c8d66bf4c53293bbc7c40 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-tx@npm:5.0.2": + version: 5.0.2 + resolution: "@nomicfoundation/ethereumjs-tx@npm:5.0.2" + dependencies: + "@chainsafe/ssz": ^0.9.2 + "@ethersproject/providers": ^5.7.2 + "@nomicfoundation/ethereumjs-common": 4.0.2 + "@nomicfoundation/ethereumjs-rlp": 5.0.2 + "@nomicfoundation/ethereumjs-util": 9.0.2 + ethereum-cryptography: 0.1.3 + checksum: 0bbcea75786b2ccb559afe2ecc9866fb4566a9f157b6ffba4f50960d14f4b3da2e86e273f6fadda9b860e67cfcabf589970fb951b328cb5f900a585cd21842a2 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-util@npm:9.0.2": + version: 9.0.2 + resolution: "@nomicfoundation/ethereumjs-util@npm:9.0.2" + dependencies: + "@chainsafe/ssz": ^0.10.0 + "@nomicfoundation/ethereumjs-rlp": 5.0.2 + ethereum-cryptography: 0.1.3 + checksum: 3a08f7b88079ef9f53b43da9bdcb8195498fd3d3911c2feee2571f4d1204656053f058b2f650471c86f7d2d0ba2f814768c7cfb0f266eede41c848356afc4900 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-vm@npm:7.0.2": + version: 7.0.2 + resolution: "@nomicfoundation/ethereumjs-vm@npm:7.0.2" + dependencies: + "@nomicfoundation/ethereumjs-block": 5.0.2 + "@nomicfoundation/ethereumjs-blockchain": 7.0.2 + "@nomicfoundation/ethereumjs-common": 4.0.2 + "@nomicfoundation/ethereumjs-evm": 2.0.2 + "@nomicfoundation/ethereumjs-rlp": 5.0.2 + "@nomicfoundation/ethereumjs-statemanager": 2.0.2 + "@nomicfoundation/ethereumjs-trie": 6.0.2 + "@nomicfoundation/ethereumjs-tx": 5.0.2 + "@nomicfoundation/ethereumjs-util": 9.0.2 + debug: ^4.3.3 + ethereum-cryptography: 0.1.3 + mcl-wasm: ^0.7.1 + rustbn.js: ~0.2.0 + checksum: 1c25ba4d0644cadb8a2b0241a4bb02e578bfd7f70e3492b855c2ab5c120cb159cb8f7486f84dc1597884bd1697feedbfb5feb66e91352afb51f3694fd8e4a043 + languageName: node + linkType: hard + +"@nomicfoundation/hardhat-chai-matchers@npm:^1.0.6": + version: 1.0.6 + resolution: "@nomicfoundation/hardhat-chai-matchers@npm:1.0.6" + dependencies: + "@ethersproject/abi": ^5.1.2 + "@types/chai-as-promised": ^7.1.3 + chai-as-promised: ^7.1.1 + deep-eql: ^4.0.1 + ordinal: ^1.0.3 + peerDependencies: + "@nomiclabs/hardhat-ethers": ^2.0.0 + chai: ^4.2.0 + ethers: ^5.0.0 + hardhat: ^2.9.4 + checksum: c388e5ed9068f2ba7c227737ab7312dd03405d5fab195247b061f2fa52e700fbd0fb65359c2d4f2086f2905bfca642c19a9122d034533edd936f89aea65ac7f2 + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.1.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer@npm:^0.1.0": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer@npm:0.1.1" + dependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64": 0.1.1 + "@nomicfoundation/solidity-analyzer-darwin-x64": 0.1.1 + "@nomicfoundation/solidity-analyzer-freebsd-x64": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-x64-musl": 0.1.1 + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": 0.1.1 + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": 0.1.1 + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": 0.1.1 + dependenciesMeta: + "@nomicfoundation/solidity-analyzer-darwin-arm64": + optional: true + "@nomicfoundation/solidity-analyzer-darwin-x64": + optional: true + "@nomicfoundation/solidity-analyzer-freebsd-x64": + optional: true + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": + optional: true + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": + optional: true + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": + optional: true + "@nomicfoundation/solidity-analyzer-linux-x64-musl": + optional: true + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": + optional: true + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": + optional: true + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": + optional: true + checksum: 038cffafd5769e25256b5b8bef88d95cc1c021274a65c020cf84aceb3237752a3b51645fdb0687f5516a2bdfebf166fcf50b08ab64857925100213e0654b266b + languageName: node + linkType: hard + +"@nomiclabs/hardhat-ethers@npm:^2.0.0": + version: 2.2.3 + resolution: "@nomiclabs/hardhat-ethers@npm:2.2.3" + peerDependencies: + ethers: ^5.0.0 + hardhat: ^2.0.0 + checksum: 72321317e55eb510306e04c42353c5f7ceb42d086fc76cc740120da6e1635b7ad5bbf23a8d6b02bd590754adcf646618933111624085ab249b1ff3482e773226 + languageName: node + linkType: hard + +"@nomiclabs/hardhat-waffle@npm:^2.0.1": + version: 2.0.6 + resolution: "@nomiclabs/hardhat-waffle@npm:2.0.6" + peerDependencies: + "@nomiclabs/hardhat-ethers": ^2.0.0 + "@types/sinon-chai": ^3.2.3 + ethereum-waffle: "*" + ethers: ^5.0.0 + hardhat: ^2.0.0 + checksum: e43592b135739c7f077a9d0a38a479a5512000e58f91d684e6a0d4f0894f8f826821d0b637e2cd7b646669ba12300fcb5e180bcc2473f5cc67d55f44ab809770 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@resolver-engine/core@npm:^0.3.3": + version: 0.3.3 + resolution: "@resolver-engine/core@npm:0.3.3" + dependencies: + debug: ^3.1.0 + is-url: ^1.2.4 + request: ^2.85.0 + checksum: e5ac586da2aeb7e384f6841821e528771fca533bf5cf38d7fd0851733bd9b70939e960459f2b841534ecdca6507c9aff71bd317f7481137d7b1d2e87ba15978a + languageName: node + linkType: hard + +"@resolver-engine/fs@npm:^0.3.3": + version: 0.3.3 + resolution: "@resolver-engine/fs@npm:0.3.3" + dependencies: + "@resolver-engine/core": ^0.3.3 + debug: ^3.1.0 + checksum: 734577b7864c3aceaaa80b4b74c252d92fb14a6f3c46dfc0a2d4658288dce1b38797578dd6a4ecbde88cbc4a366e8bdbc46451e282cb25dde8479548453c37a3 + languageName: node + linkType: hard + +"@resolver-engine/imports-fs@npm:^0.3.3": + version: 0.3.3 + resolution: "@resolver-engine/imports-fs@npm:0.3.3" + dependencies: + "@resolver-engine/fs": ^0.3.3 + "@resolver-engine/imports": ^0.3.3 + debug: ^3.1.0 + checksum: d24778788959f8a201bda0a91527cd1703dfbbf3675fd16bd3891046e3f12378be73233bb9d4da19c7247488be38daeab2bdf800317f70553a16fb62208ba2c7 + languageName: node + linkType: hard + +"@resolver-engine/imports@npm:^0.3.3": + version: 0.3.3 + resolution: "@resolver-engine/imports@npm:0.3.3" + dependencies: + "@resolver-engine/core": ^0.3.3 + debug: ^3.1.0 + hosted-git-info: ^2.6.0 + path-browserify: ^1.0.0 + url: ^0.11.0 + checksum: 690cf550fd0608e849fcb9c20a08479ce405173f8d0b09141a5bd140c4ae7c887ebcb0532c4ca64b5c1d3039fe77cc94172b7afb51c1a8fe7722475c429e6944 + languageName: node + linkType: hard + +"@scure/base@npm:~1.1.0": + version: 1.1.3 + resolution: "@scure/base@npm:1.1.3" + checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c + languageName: node + linkType: hard + +"@scure/bip32@npm:1.1.5": + version: 1.1.5 + resolution: "@scure/bip32@npm:1.1.5" + dependencies: + "@noble/hashes": ~1.2.0 + "@noble/secp256k1": ~1.7.0 + "@scure/base": ~1.1.0 + checksum: b08494ab0d2b1efee7226d1b5100db5157ebea22a78bb87126982a76a186cb3048413e8be0ba2622d00d048a20acbba527af730de86c132a77de616eb9907a3b + languageName: node + linkType: hard + +"@scure/bip39@npm:1.1.1": + version: 1.1.1 + resolution: "@scure/bip39@npm:1.1.1" + dependencies: + "@noble/hashes": ~1.2.0 + "@scure/base": ~1.1.0 + checksum: fbb594c50696fa9c14e891d872f382e50a3f919b6c96c55ef2fb10c7102c546dafb8f099a62bd114c12a00525b595dcf7381846f383f0ddcedeaa6e210747d2f + languageName: node + linkType: hard + +"@sentry/core@npm:5.30.0": + version: 5.30.0 + resolution: "@sentry/core@npm:5.30.0" + dependencies: + "@sentry/hub": 5.30.0 + "@sentry/minimal": 5.30.0 + "@sentry/types": 5.30.0 + "@sentry/utils": 5.30.0 + tslib: ^1.9.3 + checksum: 8a2b22687e70d76fa4381bce215d770b6c08561c5ff5d6afe39c8c3c509c18ee7384ad0be3aee18d3a858a3c88e1d2821cf10eb5e05646376a33200903b56da2 + languageName: node + linkType: hard + +"@sentry/hub@npm:5.30.0": + version: 5.30.0 + resolution: "@sentry/hub@npm:5.30.0" + dependencies: + "@sentry/types": 5.30.0 + "@sentry/utils": 5.30.0 + tslib: ^1.9.3 + checksum: 09f778cc78765213f1e35a3ee6da3a8e02a706e8a7e5b7f84614707f4b665c7297b700a1849ab2ca1f02ede5884fd9ae893e58dc65f04f35ccdfee17e99ee93d + languageName: node + linkType: hard + +"@sentry/minimal@npm:5.30.0": + version: 5.30.0 + resolution: "@sentry/minimal@npm:5.30.0" + dependencies: + "@sentry/hub": 5.30.0 + "@sentry/types": 5.30.0 + tslib: ^1.9.3 + checksum: 934650f6989ce51f425c7c4b4d4d9bfecface8162a36d21df8a241f780ab1716dd47b81e2170e4cc624797ed1eebe10f71e4876c1e25b787860daaef75ca7a0c + languageName: node + linkType: hard + +"@sentry/node@npm:^5.18.1": + version: 5.30.0 + resolution: "@sentry/node@npm:5.30.0" + dependencies: + "@sentry/core": 5.30.0 + "@sentry/hub": 5.30.0 + "@sentry/tracing": 5.30.0 + "@sentry/types": 5.30.0 + "@sentry/utils": 5.30.0 + cookie: ^0.4.1 + https-proxy-agent: ^5.0.0 + lru_map: ^0.3.3 + tslib: ^1.9.3 + checksum: 5f0367cc52f9d716c64ba727e2a5c8592364494c8fdadfb3df2d0ee9d7956b886fb3ec674370292d2a7b7e1d9a8e1b84c69c06e8a4a064be8d4687698df0090c + languageName: node + linkType: hard + +"@sentry/tracing@npm:5.30.0": + version: 5.30.0 + resolution: "@sentry/tracing@npm:5.30.0" + dependencies: + "@sentry/hub": 5.30.0 + "@sentry/minimal": 5.30.0 + "@sentry/types": 5.30.0 + "@sentry/utils": 5.30.0 + tslib: ^1.9.3 + checksum: 720c07b111e8128e70a939ab4e9f9cfd13dc23303b27575afddabab08d08f9b94499017c76a9ffe253bf3ca40833e8f9262cf6dc546ba24da6eb74fedae5f92b + languageName: node + linkType: hard + +"@sentry/types@npm:5.30.0": + version: 5.30.0 + resolution: "@sentry/types@npm:5.30.0" + checksum: de7df777824c8e311f143c6fd7de220b24f25b5018312fe8f67d93bebf0f3cdd32bbca9f155846f5c31441d940eebe27c8338000321559a743264c7e41dda560 + languageName: node + linkType: hard + +"@sentry/utils@npm:5.30.0": + version: 5.30.0 + resolution: "@sentry/utils@npm:5.30.0" + dependencies: + "@sentry/types": 5.30.0 + tslib: ^1.9.3 + checksum: 27b259a136c664427641dd32ee3dc490553f3b5e92986accfa829d14063ebc69b191e92209ac9c40fbc367f74cfa17dc93b4c40981d666711fd57b4d51a82062 + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@trufflesuite/bigint-buffer@npm:1.1.10": + version: 1.1.10 + resolution: "@trufflesuite/bigint-buffer@npm:1.1.10" + dependencies: + node-gyp: latest + node-gyp-build: 4.4.0 + checksum: e1dc5e4fbf348a55e660c0055267021eb04cbbdb7f6b0ee983ad32cd4aae1200be448a2ca3963c7d19c7c936d42f66c1ff8b5e4e2332cb1a9e3f870ff818dce4 + languageName: node + linkType: hard + +"@trufflesuite/bigint-buffer@npm:1.1.9": + version: 1.1.9 + resolution: "@trufflesuite/bigint-buffer@npm:1.1.9" + dependencies: + node-gyp: latest + node-gyp-build: 4.3.0 + checksum: 627dcff2cae7afe31432646232518363869e89b300f90f88ca68d903d0bdc79119975a5bc338223c03c1a4484cfac6d9cf4413ef20933a69eee48dd925519165 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@typechain/ethers-v5@npm:^10.0.0": + version: 10.2.1 + resolution: "@typechain/ethers-v5@npm:10.2.1" + dependencies: + lodash: ^4.17.15 + ts-essentials: ^7.0.1 + peerDependencies: + "@ethersproject/abi": ^5.0.0 + "@ethersproject/providers": ^5.0.0 + ethers: ^5.1.3 + typechain: ^8.1.1 + typescript: ">=4.3.0" + checksum: 852da4b1ff368ef87251111a5d50077de3d0fc12c519529269a74223740f8bda89297e67a5eb6c1f5b04ee23119566d6cbccf58264d32a83132be0f328a58d22 + languageName: node + linkType: hard + +"@typechain/hardhat@npm:^3.0.0": + version: 3.1.0 + resolution: "@typechain/hardhat@npm:3.1.0" + dependencies: + fs-extra: ^9.1.0 + peerDependencies: + hardhat: ^2.0.10 + lodash: ^4.17.15 + typechain: ^6.0.0 + checksum: 5eced0650fcfd7b0c4f118153aaa384bf0820659c05c701f0afbf64db3aa0e1755862dff0b0a5dd6cfea22d904dc3a3c3d4101adc925aadf6aced4b4006895e7 + languageName: node + linkType: hard + +"@types/abstract-leveldown@npm:*": + version: 7.2.3 + resolution: "@types/abstract-leveldown@npm:7.2.3" + checksum: 5c74d91712d9e8fee74612feb8c932af5aaa26a70259f1d178095edf4c3ff3e886bec53895382594c026a9179a3dd433c1fc6a7c2e04b0bebc4543c5b37f1c3c + languageName: node + linkType: hard + +"@types/bn.js@npm:^4.11.3": + version: 4.11.6 + resolution: "@types/bn.js@npm:4.11.6" + dependencies: + "@types/node": "*" + checksum: 7f66f2c7b7b9303b3205a57184261974b114495736b77853af5b18d857c0b33e82ce7146911e86e87a87837de8acae28986716fd381ac7c301fd6e8d8b6c811f + languageName: node + linkType: hard + +"@types/bn.js@npm:^5.1.0": + version: 5.1.2 + resolution: "@types/bn.js@npm:5.1.2" + dependencies: + "@types/node": "*" + checksum: 8d9fdb43836646c2ecd445041de03e057f9b459885be57faee64104160487a63730b9f371e8ad7d33f360b3cc6dc0e323543962fc5fa296b92b322b946732be0 + languageName: node + linkType: hard + +"@types/chai-as-promised@npm:^7.1.3": + version: 7.1.6 + resolution: "@types/chai-as-promised@npm:7.1.6" + dependencies: + "@types/chai": "*" + checksum: f765dd249ae9384540f8e6402bd3a9f5e87b97f9078ef58f4b5ec15f7c3673e1f10f0089f819eceb20e00b3df40b7aae1bd44d2b8f4edbbedfcb33ce296f6791 + languageName: node + linkType: hard + +"@types/chai@npm:*": + version: 4.3.8 + resolution: "@types/chai@npm:4.3.8" + checksum: 21431e46fa4a5602641726a24c7631bbf7ba8a41b1a290d0c73dcef6b3521c1d973ee605236b83a978cc918e55470fd04a3109d51aa30dcdf93a8b122e6c3e2c + languageName: node + linkType: hard + +"@types/level-errors@npm:*": + version: 3.0.0 + resolution: "@types/level-errors@npm:3.0.0" + checksum: ad9392663439306677ac9cb704f8fa0b64c300dfea4f3494369eb78a2e09c194156cbab2b52c71a361a09b735d54a2de65195dcadba0ec7db1d14a320198133e + languageName: node + linkType: hard + +"@types/levelup@npm:^4.3.0": + version: 4.3.3 + resolution: "@types/levelup@npm:4.3.3" + dependencies: + "@types/abstract-leveldown": "*" + "@types/level-errors": "*" + "@types/node": "*" + checksum: 04969bb805035960b8d6650e8f76893be7ba70267bb7012f6f00d67a0cf096ada552355629791b3f5925e9cdb6912d3fe08892c33c3c583e8fd02099b573bdd7 + languageName: node + linkType: hard + +"@types/lru-cache@npm:5.1.1, @types/lru-cache@npm:^5.1.0": + version: 5.1.1 + resolution: "@types/lru-cache@npm:5.1.1" + checksum: e1d6c0085f61b16ec5b3073ec76ad1be4844ea036561c3f145fc19f71f084b58a6eb600b14128aa95809d057d28f1d147c910186ae51219f58366ffd2ff2e118 + languageName: node + linkType: hard + +"@types/mkdirp@npm:^0.5.2": + version: 0.5.2 + resolution: "@types/mkdirp@npm:0.5.2" + dependencies: + "@types/node": "*" + checksum: 21e6681ee18cee6314dbe0f57ada48981912b76de8266f438ba2573770d60aaa8dd376baad3f20e2346696a7cca84b0aadd1737222341553a0091831a46e6ad1 + languageName: node + linkType: hard + +"@types/node-fetch@npm:^2.6.1": + version: 2.6.6 + resolution: "@types/node-fetch@npm:2.6.6" + dependencies: + "@types/node": "*" + form-data: ^4.0.0 + checksum: ac66389d9d597ab91f5e5d3724e594965b9f80ae5841ab5da9f0c3bd54ceac084591cfe69b1c413f18bb7efdd97002d05bd7651d58ba0c6c10f804f4fd85e598 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.8.6 + resolution: "@types/node@npm:20.8.6" + dependencies: + undici-types: ~5.25.1 + checksum: ccfb7ac482c5a96edeb239893c5c099f5257fcc2ed9ae62fefdfbc782b79e16dbc2af9a85b379665237bf759904b44ca2be68e75d239e0297882aad42f61905c + languageName: node + linkType: hard + +"@types/node@npm:11.11.6": + version: 11.11.6 + resolution: "@types/node@npm:11.11.6" + checksum: 075f1c011cf568e49701419acbcb55c24906b3bb5a34d9412a3b88f228a7a78401a5ad4d3e1cd6855c99aaea5ef96e37fc86ca097e50f06da92cf822befc1fff + languageName: node + linkType: hard + +"@types/pbkdf2@npm:^3.0.0": + version: 3.1.0 + resolution: "@types/pbkdf2@npm:3.1.0" + dependencies: + "@types/node": "*" + checksum: d15024b1957c21cf3b8887329d9bd8dfde754cf13a09d76ae25f1391cfc62bb8b8d7b760773c5dbaa748172fba8b3e0c3dbe962af6ccbd69b76df12a48dfba40 + languageName: node + linkType: hard + +"@types/prettier@npm:^2.1.1": + version: 2.7.3 + resolution: "@types/prettier@npm:2.7.3" + checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 + languageName: node + linkType: hard + +"@types/qs@npm:^6.9.7": + version: 6.9.8 + resolution: "@types/qs@npm:6.9.8" + checksum: c28e07d00d07970e5134c6eed184a0189b8a4649e28fdf36d9117fe671c067a44820890de6bdecef18217647a95e9c6aebdaaae69f5fe4b0bec9345db885f77e + languageName: node + linkType: hard + +"@types/readable-stream@npm:^2.3.13": + version: 2.3.15 + resolution: "@types/readable-stream@npm:2.3.15" + dependencies: + "@types/node": "*" + safe-buffer: ~5.1.1 + checksum: ec36f525cad09b6c65a1dafcb5ad99b9e2ed824ec49b7aa23180ac427e5d35b8a0706193ecd79ab4253a283ad485ba03d5917a98daaaa144f0ea34f4823e9d82 + languageName: node + linkType: hard + +"@types/secp256k1@npm:^4.0.1": + version: 4.0.4 + resolution: "@types/secp256k1@npm:4.0.4" + dependencies: + "@types/node": "*" + checksum: 6f521a08486a98e71c8529f5c3119f99e610196a47243cc6052c6160b216dff2c85dc50a8f3208ed47028dbb470bbb6fdee47a3fdc064687e46021d5a712767c + languageName: node + linkType: hard + +"@types/seedrandom@npm:3.0.1": + version: 3.0.1 + resolution: "@types/seedrandom@npm:3.0.1" + checksum: d9755452f224a4f5072a1d8738da6c9de3039fc59a2a449b1f658e51087be7b48ada49bcabc8b0f16633c095f55598c32fcd072c448858422a2f6a0566569e4c + languageName: node + linkType: hard + +"@types/sinon-chai@npm:^3.2.3": + version: 3.2.10 + resolution: "@types/sinon-chai@npm:3.2.10" + dependencies: + "@types/chai": "*" + "@types/sinon": "*" + checksum: 72e1f4e4622fba57d59f482ce421a7493e26baeea7bdc57a13e4ec93af62122188f9ea14c7b16e33d0e5a198c7d5df4651401c763071f114aebdc1893e03179e + languageName: node + linkType: hard + +"@types/sinon@npm:*": + version: 10.0.19 + resolution: "@types/sinon@npm:10.0.19" + dependencies: + "@types/sinonjs__fake-timers": "*" + checksum: 79cab4cfc618a37a11e519795a297aa641b30eb05e2d2c7a9b03f40845b54ef631af80bddbef3e57dcd4be6c67bd78dce5210ea9860617d870f1d365c78468b6 + languageName: node + linkType: hard + +"@types/sinonjs__fake-timers@npm:*": + version: 8.1.3 + resolution: "@types/sinonjs__fake-timers@npm:8.1.3" + checksum: d4bac3c1b8d544ac7a57edac3fbf402b055d6401b2f8504fc83908aa40682c71c8ba260c52db29c7a6e72932751c653a0f5185bdb18530534ac50c86425b5cb8 + languageName: node + linkType: hard + +"abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3": + version: 1.0.3 + resolution: "abstract-level@npm:1.0.3" + dependencies: + buffer: ^6.0.3 + catering: ^2.1.0 + is-buffer: ^2.0.5 + level-supports: ^4.0.0 + level-transcoder: ^1.0.1 + module-error: ^1.0.1 + queue-microtask: ^1.2.3 + checksum: 70d61a3924526ebc257b138992052f9ff571a6cee5a7660836e37a1cc7081273c3acf465dd2f5e1897b38dc743a6fd9dba14a5d8a2a9d39e5787cd3da99f301d + languageName: node + linkType: hard + +"abstract-leveldown@npm:^6.2.1": + version: 6.3.0 + resolution: "abstract-leveldown@npm:6.3.0" + dependencies: + buffer: ^5.5.0 + immediate: ^3.2.3 + level-concat-iterator: ~2.0.0 + level-supports: ~1.0.0 + xtend: ~4.0.0 + checksum: 121a8509d8c6a540e656c2a69e5b8d853d4df71072011afefc868b98076991bb00120550e90643de9dc18889c675f62413409eeb4c8c204663124c7d215e4ec3 + languageName: node + linkType: hard + +"abstract-leveldown@npm:^7.2.0": + version: 7.2.0 + resolution: "abstract-leveldown@npm:7.2.0" + dependencies: + buffer: ^6.0.3 + catering: ^2.0.0 + is-buffer: ^2.0.5 + level-concat-iterator: ^3.0.0 + level-supports: ^2.0.1 + queue-microtask: ^1.2.3 + checksum: d558111f2d123da95ac80b8ba3b9b0a5bc8cd87296e64b05dca693f5f4839aa0e2fc97bad56a101766f499824e2962611750f8a76bbac4a5db35801968fbbe02 + languageName: node + linkType: hard + +"abstract-leveldown@npm:~6.2.1": + version: 6.2.3 + resolution: "abstract-leveldown@npm:6.2.3" + dependencies: + buffer: ^5.5.0 + immediate: ^3.2.3 + level-concat-iterator: ~2.0.0 + level-supports: ~1.0.0 + xtend: ~4.0.0 + checksum: 00202b2eb7955dd7bc04f3e44d225e60160cedb8f96fe6ae0e6dca9c356d57071f001ece8ae1d53f48095c4c036d92b3440f2bc7666730610ddea030f9fbde4a + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.4.1": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d + languageName: node + linkType: hard + +"adm-zip@npm:^0.4.16": + version: 0.4.16 + resolution: "adm-zip@npm:0.4.16" + checksum: 5ea46664d8b3b073fffeb7f934705fea288708745e708cffc1dd732ce3d2672cecd476b243f9d051892fd12952db2b6bd061975e1ff40057246f6d0cb6534a50 + languageName: node + linkType: hard + +"aes-js@npm:3.0.0": + version: 3.0.0 + resolution: "aes-js@npm:3.0.0" + checksum: 251e26d533cd1a915b44896b17d5ed68c24a02484cfdd2e74ec700a309267db96651ea4eb657bf20aac32a3baa61f6e34edf8e2fec2de440a655da9942d334b8 + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: ^1.2.1 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv@npm:^6.12.3": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ansi-colors@npm:4.1.1": + version: 4.1.1 + resolution: "ansi-colors@npm:4.1.1" + checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.3.0": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-escapes@npm:^5.0.0": + version: 5.0.0 + resolution: "ansi-escapes@npm:5.0.0" + dependencies: + type-fest: ^1.0.2 + checksum: d4b5eb8207df38367945f5dd2ef41e08c28edc192dc766ef18af6b53736682f49d8bfcfa4e4d6ecbc2e2f97c258fda084fb29a9e43b69170b71090f771afccac + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-back@npm:^3.0.1, array-back@npm:^3.1.0": + version: 3.1.0 + resolution: "array-back@npm:3.1.0" + checksum: 7205004fcd0f9edd926db921af901b083094608d5b265738d0290092f9822f73accb468e677db74c7c94ef432d39e5ed75a7b1786701e182efb25bbba9734209 + languageName: node + linkType: hard + +"array-back@npm:^4.0.1, array-back@npm:^4.0.2": + version: 4.0.2 + resolution: "array-back@npm:4.0.2" + checksum: f30603270771eeb54e5aad5f54604c62b3577a18b6db212a7272b2b6c32049121b49431f656654790ed1469411e45f387e7627c0de8fd0515995cc40df9b9294 + languageName: node + linkType: hard + +"asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: ~2.1.0 + checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d + languageName: node + linkType: hard + +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": + version: 1.0.0 + resolution: "assert-plus@npm:1.0.0" + checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64 + languageName: node + linkType: hard + +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + +"async-eventemitter@npm:^0.2.4": + version: 0.2.4 + resolution: "async-eventemitter@npm:0.2.4" + dependencies: + async: ^2.4.0 + checksum: b9e77e0f58ebd7188c50c23d613d1263e0ab501f5e677e02b57cc97d7032beaf60aafa189887e7105569c791e212df4af00b608be1e9a4c425911d577124911e + languageName: node + linkType: hard + +"async@npm:^2.4.0": + version: 2.6.4 + resolution: "async@npm:2.6.4" + dependencies: + lodash: ^4.17.14 + checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e + languageName: node + linkType: hard + +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.12.0 + resolution: "aws4@npm:1.12.0" + checksum: 68f79708ac7c335992730bf638286a3ee0a645cf12575d557860100767c500c08b30e24726b9f03265d74116417f628af78509e1333575e9f8d52a80edfe8cbc + languageName: node + linkType: hard + +"axios@npm:^0.21.1": + version: 0.21.4 + resolution: "axios@npm:0.21.4" + dependencies: + follow-redirects: ^1.14.0 + checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base-x@npm:^3.0.2": + version: 3.0.9 + resolution: "base-x@npm:3.0.9" + dependencies: + safe-buffer: ^5.0.1 + checksum: 957101d6fd09e1903e846fd8f69fd7e5e3e50254383e61ab667c725866bec54e5ece5ba49ce385128ae48f9ec93a26567d1d5ebb91f4d56ef4a9cc0d5a5481e8 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"bcrypt-pbkdf@npm:^1.0.0": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: ^0.14.3 + checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 + languageName: node + linkType: hard + +"bech32@npm:1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 0e98db619191548390d6f09ff68b0253ba7ae6a55db93dfdbb070ba234c1fd3308c0606fbcc95fad50437227b10011e2698b89f0181f6e7f845c499bd14d0f4b + languageName: node + linkType: hard + +"bigint-crypto-utils@npm:^3.0.23": + version: 3.3.0 + resolution: "bigint-crypto-utils@npm:3.3.0" + checksum: 9598ce57b23f776c8936d44114c9f051e62b5fa654915b664784cbcbacc5aa0485f4479571c51ff58008abb1210c0d6a234853742f07cf84bda890f2a1e01000 + languageName: node + linkType: hard + +"bignumber.js@npm:^9.0.0": + version: 9.1.2 + resolution: "bignumber.js@npm:9.1.2" + checksum: 582c03af77ec9cb0ebd682a373ee6c66475db94a4325f92299621d544aa4bd45cb45fd60001610e94aef8ae98a0905fa538241d9638d4422d57abbeeac6fadaf + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + +"bip39@npm:3.0.4": + version: 3.0.4 + resolution: "bip39@npm:3.0.4" + dependencies: + "@types/node": 11.11.6 + create-hash: ^1.1.0 + pbkdf2: ^3.0.9 + randombytes: ^2.0.1 + checksum: 79ce1600a03d1ba5053bdd4e6323f9463ec340764c7e52918b6c6b9dca81221940f2d9a65656447f108f9bc2c8d9ae8df319cca83bbd1dad63f53ef2768d9bae + languageName: node + linkType: hard + +"blakejs@npm:^1.1.0": + version: 1.2.1 + resolution: "blakejs@npm:1.2.1" + checksum: d699ba116cfa21d0b01d12014a03e484dd76d483133e6dc9eb415aa70a119f08beb3bcefb8c71840106a00b542cba77383f8be60cd1f0d4589cb8afb922eefbe + languageName: node + linkType: hard + +"bn.js@npm:^4.0.0, bn.js@npm:^4.11.0, bn.js@npm:^4.11.1, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 + languageName: node + linkType: hard + +"bn.js@npm:^5.1.2, bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"brorand@npm:^1.0.1, brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be + languageName: node + linkType: hard + +"browser-level@npm:^1.0.1": + version: 1.0.1 + resolution: "browser-level@npm:1.0.1" + dependencies: + abstract-level: ^1.0.2 + catering: ^2.1.1 + module-error: ^1.0.2 + run-parallel-limit: ^1.1.0 + checksum: 67fbc77ce832940bfa25073eccff279f512ad56f545deb996a5b23b02316f5e76f4a79d381acc27eda983f5c9a2566aaf9c97e4fdd0748288c4407307537a29b + languageName: node + linkType: hard + +"browser-stdout@npm:1.3.1": + version: 1.3.1 + resolution: "browser-stdout@npm:1.3.1" + checksum: b717b19b25952dd6af483e368f9bcd6b14b87740c3d226c2977a65e84666ffd67000bddea7d911f111a9b6ddc822b234de42d52ab6507bce4119a4cc003ef7b3 + languageName: node + linkType: hard + +"browserify-aes@npm:^1.2.0": + version: 1.2.0 + resolution: "browserify-aes@npm:1.2.0" + dependencies: + buffer-xor: ^1.0.3 + cipher-base: ^1.0.0 + create-hash: ^1.1.0 + evp_bytestokey: ^1.0.3 + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104 + languageName: node + linkType: hard + +"bs58@npm:^4.0.0": + version: 4.0.1 + resolution: "bs58@npm:4.0.1" + dependencies: + base-x: ^3.0.2 + checksum: b3c5365bb9e0c561e1a82f1a2d809a1a692059fae016be233a6127ad2f50a6b986467c3a50669ce4c18929dcccb297c5909314dd347a25a68c21b68eb3e95ac2 + languageName: node + linkType: hard + +"bs58check@npm:^2.1.2": + version: 2.1.2 + resolution: "bs58check@npm:2.1.2" + dependencies: + bs58: ^4.0.0 + create-hash: ^1.1.0 + safe-buffer: ^5.1.2 + checksum: 43bdf08a5dd04581b78f040bc4169480e17008da482ffe2a6507327bbc4fc5c28de0501f7faf22901cfe57fbca79cbb202ca529003fedb4cb8dccd265b38e54d + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer-xor@npm:^1.0.3": + version: 1.0.3 + resolution: "buffer-xor@npm:1.0.3" + checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a + languageName: node + linkType: hard + +"buffer-xor@npm:^2.0.1": + version: 2.0.2 + resolution: "buffer-xor@npm:2.0.2" + dependencies: + safe-buffer: ^5.1.1 + checksum: 78226fcae9f4a0b4adec69dffc049f26f6bab240dfdd1b3f6fe07c4eb6b90da202ea5c363f98af676156ee39450a06405fddd9e8965f68a5327edcc89dcbe5d0 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0, buffer@npm:^5.6.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.2.1 + checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 + languageName: node + linkType: hard + +"bufferutil@npm:4.0.5": + version: 4.0.5 + resolution: "bufferutil@npm:4.0.5" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 37d5bef7cb38d29f9377b8891ff8a57f53ae6057313d77a8aa2a7417df37a72f16987100796cb2f1e1862f3eb80057705f3c052615ec076a0dcc7aa6c83b68c9 + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^7.0.3 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: ^1.1.1 + get-intrinsic: ^1.0.2 + checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + languageName: node + linkType: hard + +"camelcase@npm:^6.0.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"case@npm:^1.6.3": + version: 1.6.3 + resolution: "case@npm:1.6.3" + checksum: febe73278f910b0d28aab7efd6f51c235f9aa9e296148edb56dfb83fd58faa88308c30ce9a0122b6e53e0362c44f4407105bd5ef89c46860fc2b184e540fd68d + languageName: node + linkType: hard + +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751 + languageName: node + linkType: hard + +"catering@npm:^2.0.0, catering@npm:^2.1.0, catering@npm:^2.1.1": + version: 2.1.1 + resolution: "catering@npm:2.1.1" + checksum: 205daefa69c935b0c19f3d8f2e0a520dd69aebe9bda55902958003f7c9cff8f967dfb90071b421bd6eb618576f657a89d2bc0986872c9bc04bbd66655e9d4bd6 + languageName: node + linkType: hard + +"chai-as-promised@npm:^7.1.1": + version: 7.1.1 + resolution: "chai-as-promised@npm:7.1.1" + dependencies: + check-error: ^1.0.2 + peerDependencies: + chai: ">= 2.1.2 < 5" + checksum: 7262868a5b51a12af4e432838ddf97a893109266a505808e1868ba63a12de7ee1166e9d43b5c501a190c377c1b11ecb9ff8e093c89f097ad96c397e8ec0f8d6a + languageName: node + linkType: hard + +"chai@npm:4.x": + version: 4.3.10 + resolution: "chai@npm:4.3.10" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.3 + deep-eql: ^4.1.3 + get-func-name: ^2.0.2 + loupe: ^2.3.6 + pathval: ^1.1.1 + type-detect: ^4.0.8 + checksum: 536668c60a0d985a0fbd94418028e388d243a925d7c5e858c7443e334753511614a3b6a124bac9ca077dfc4c37acc367d62f8c294960f440749536dc181dfc6d + languageName: node + linkType: hard + +"chalk@npm:5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 + languageName: node + linkType: hard + +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"check-error@npm:^1.0.2, check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" + dependencies: + get-func-name: ^2.0.2 + checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 + languageName: node + linkType: hard + +"chokidar@npm:3.5.3, chokidar@npm:^3.4.0, chokidar@npm:^3.5.2": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + languageName: node + linkType: hard + +"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": + version: 1.0.4 + resolution: "cipher-base@npm:1.0.4" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e + languageName: node + linkType: hard + +"classic-level@npm:^1.2.0": + version: 1.3.0 + resolution: "classic-level@npm:1.3.0" + dependencies: + abstract-level: ^1.0.2 + catering: ^2.1.0 + module-error: ^1.0.1 + napi-macros: ^2.2.2 + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 773da48aef52a041115d413fee8340b357a4da2eb505764f327183b155edd7cc9d24819eb4f707c83dbdae8588024f5dddeb322125567c59d5d1f6f16334cdb9 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-cursor@npm:4.0.0" + dependencies: + restore-cursor: ^4.0.0 + checksum: ab3f3ea2076e2176a1da29f9d64f72ec3efad51c0960898b56c8a17671365c26e67b735920530eaf7328d61f8bd41c27f46b9cf6e4e10fe2fa44b5e8c0e392cc + languageName: node + linkType: hard + +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: ^5.0.0 + string-width: ^5.0.0 + checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"colorette@npm:^2.0.20": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"command-exists@npm:^1.2.8": + version: 1.2.9 + resolution: "command-exists@npm:1.2.9" + checksum: 729ae3d88a2058c93c58840f30341b7f82688a573019535d198b57a4d8cb0135ced0ad7f52b591e5b28a90feb2c675080ce916e56254a0f7c15cb2395277cac3 + languageName: node + linkType: hard + +"command-line-args@npm:^5.1.1": + version: 5.2.1 + resolution: "command-line-args@npm:5.2.1" + dependencies: + array-back: ^3.1.0 + find-replace: ^3.0.0 + lodash.camelcase: ^4.3.0 + typical: ^4.0.0 + checksum: e759519087be3cf2e86af8b9a97d3058b4910cd11ee852495be881a067b72891f6a32718fb685ee6d41531ab76b2b7bfb6602f79f882cd4b7587ff1e827982c7 + languageName: node + linkType: hard + +"command-line-usage@npm:^6.1.0": + version: 6.1.3 + resolution: "command-line-usage@npm:6.1.3" + dependencies: + array-back: ^4.0.2 + chalk: ^2.4.2 + table-layout: ^1.0.2 + typical: ^5.2.0 + checksum: 8261d4e5536eb0bcddee0ec5e89c05bb2abd18e5760785c8078ede5020bc1c612cbe28eb6586f5ed4a3660689748e5aaad4a72f21566f4ef39393694e2fa1a0b + languageName: node + linkType: hard + +"commander@npm:11.0.0": + version: 11.0.0 + resolution: "commander@npm:11.0.0" + checksum: 6621954e1e1d078b4991c1f5bbd9439ad37aa7768d6ab4842de1dbd4d222c8a27e1b8e62108b3a92988614af45031d5bb2a2aaa92951f4d0c934d1a1ac564bb4 + languageName: node + linkType: hard + +"commander@npm:3.0.2": + version: 3.0.2 + resolution: "commander@npm:3.0.2" + checksum: 6d14ad030d1904428139487ed31febcb04c1604db2b8d9fae711f60ee6718828dc0e11602249e91c8a97b0e721e9c6d53edbc166bad3cde1596851d59a8f824d + languageName: node + linkType: hard + +"commander@npm:^8.1.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 0f82321821fc27b83bd409510bb9deeebcfa799ff0bf5d102128b500b7af22872c0c92cb6a0ebc5a4cf19c6b550fba9cedfa7329d18c6442a625f851377bacf0 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"cookie@npm:^0.4.1": + version: 0.4.2 + resolution: "cookie@npm:0.4.2" + checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b + languageName: node + linkType: hard + +"core-js-pure@npm:^3.0.1": + version: 3.33.0 + resolution: "core-js-pure@npm:3.33.0" + checksum: d47084a4de9a0cef9779eccd3ac9f435cf9fd7aa71794150cd4c6b305036bcc392d94766d4a7b6456bdd08faba7752d55c2ec40185bda161c3563081c9fa1e17 + languageName: node + linkType: hard + +"core-util-is@npm:1.0.2": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab + languageName: node + linkType: hard + +"crc-32@npm:^1.2.0": + version: 1.2.2 + resolution: "crc-32@npm:1.2.2" + bin: + crc32: bin/crc32.njs + checksum: ad2d0ad0cbd465b75dcaeeff0600f8195b686816ab5f3ba4c6e052a07f728c3e70df2e3ca9fd3d4484dc4ba70586e161ca5a2334ec8bf5a41bf022a6103ff243 + languageName: node + linkType: hard + +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": + version: 1.2.0 + resolution: "create-hash@npm:1.2.0" + dependencies: + cipher-base: ^1.0.1 + inherits: ^2.0.1 + md5.js: ^1.3.4 + ripemd160: ^2.0.1 + sha.js: ^2.4.0 + checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9 + languageName: node + linkType: hard + +"create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": + version: 1.1.7 + resolution: "create-hmac@npm:1.1.7" + dependencies: + cipher-base: ^1.0.3 + create-hash: ^1.1.0 + inherits: ^2.0.1 + ripemd160: ^2.0.0 + safe-buffer: ^5.0.1 + sha.js: ^2.4.8 + checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: ^1.0.0 + checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^2.2.0": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"debug@npm:^3.1.0": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"decamelize@npm:^4.0.0": + version: 4.0.0 + resolution: "decamelize@npm:4.0.0" + checksum: b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 + languageName: node + linkType: hard + +"deep-eql@npm:^4.0.1, deep-eql@npm:^4.1.3": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" + dependencies: + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f + languageName: node + linkType: hard + +"deep-extend@npm:~0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + +"deferred-leveldown@npm:~5.3.0": + version: 5.3.0 + resolution: "deferred-leveldown@npm:5.3.0" + dependencies: + abstract-leveldown: ~6.2.1 + inherits: ^2.0.3 + checksum: 5631e153528bb9de1aa60d59a5065d1a519374c5e4c1d486f2190dba4008dcf5c2ee8dd7f2f81396fc4d5a6bb6e7d0055e3dfe68afe00da02adaa3bf329addf7 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"depd@npm:2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a + languageName: node + linkType: hard + +"diff@npm:5.0.0": + version: 5.0.0 + resolution: "diff@npm:5.0.0" + checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"dotenv@npm:^16.3.1": + version: 16.3.1 + resolution: "dotenv@npm:16.3.1" + checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: ~0.1.0 + safer-buffer: ^2.1.0 + checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a + languageName: node + linkType: hard + +"elliptic@npm:6.5.4, elliptic@npm:^6.5.2, elliptic@npm:^6.5.4": + version: 6.5.4 + resolution: "elliptic@npm:6.5.4" + dependencies: + bn.js: ^4.11.9 + brorand: ^1.1.0 + hash.js: ^1.0.0 + hmac-drbg: ^1.0.1 + inherits: ^2.0.4 + minimalistic-assert: ^1.0.1 + minimalistic-crypto-utils: ^1.0.1 + checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 + languageName: node + linkType: hard + +"emittery@npm:0.10.0": + version: 0.10.0 + resolution: "emittery@npm:0.10.0" + checksum: 2616a802df51e3f412b9b33f1b43161f7bc96037142cada6ecdbf35ddef1368e30d4f8e47fddc10b0753ccf91d3483b20ebca535b4b1e47526440e13150e2bc7 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encode-utf8@npm:^1.0.2": + version: 1.0.3 + resolution: "encode-utf8@npm:1.0.3" + checksum: 550224bf2a104b1d355458c8a82e9b4ea07f9fc78387bc3a49c151b940ad26473de8dc9e121eefc4e84561cb0b46de1e4cd2bc766f72ee145e9ea9541482817f + languageName: node + linkType: hard + +"encoding-down@npm:^6.3.0": + version: 6.3.0 + resolution: "encoding-down@npm:6.3.0" + dependencies: + abstract-leveldown: ^6.2.1 + inherits: ^2.0.3 + level-codec: ^9.0.0 + level-errors: ^2.0.0 + checksum: 74043e6d9061a470614ff61d708c849259ab32932a428fd5ddfb0878719804f56a52f59b31cccd95fddc2e636c0fd22dc3e02481fb98d5bf1bdbbbc44ca09bdc + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"enquirer@npm:^2.3.0, enquirer@npm:^2.3.6": + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" + dependencies: + ansi-colors: ^4.1.1 + strip-ansi: ^6.0.1 + checksum: f080f11a74209647dbf347a7c6a83c8a47ae1ebf1e75073a808bc1088eb780aa54075bfecd1bcdb3e3c724520edb8e6ee05da031529436b421b71066fcc48cb5 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"errno@npm:~0.1.1": + version: 0.1.8 + resolution: "errno@npm:0.1.8" + dependencies: + prr: ~1.0.1 + bin: + errno: cli.js + checksum: 1271f7b9fbb3bcbec76ffde932485d1e3561856d21d847ec613a9722ee924cdd4e523a62dc71a44174d91e898fe21fdc8d5b50823f4b5e0ce8c35c8271e6ef4a + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-string-regexp@npm:4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"ethereum-cryptography@npm:0.1.3, ethereum-cryptography@npm:^0.1.3": + version: 0.1.3 + resolution: "ethereum-cryptography@npm:0.1.3" + dependencies: + "@types/pbkdf2": ^3.0.0 + "@types/secp256k1": ^4.0.1 + blakejs: ^1.1.0 + browserify-aes: ^1.2.0 + bs58check: ^2.1.2 + create-hash: ^1.2.0 + create-hmac: ^1.1.7 + hash.js: ^1.1.7 + keccak: ^3.0.0 + pbkdf2: ^3.0.17 + randombytes: ^2.1.0 + safe-buffer: ^5.1.2 + scrypt-js: ^3.0.0 + secp256k1: ^4.0.1 + setimmediate: ^1.0.5 + checksum: 54bae7a4a96bd81398cdc35c91cfcc74339f71a95ed1b5b694663782e69e8e3afd21357de3b8bac9ff4877fd6f043601e200a7ad9133d94be6fd7d898ee0a449 + languageName: node + linkType: hard + +"ethereum-cryptography@npm:^1.0.3": + version: 1.2.0 + resolution: "ethereum-cryptography@npm:1.2.0" + dependencies: + "@noble/hashes": 1.2.0 + "@noble/secp256k1": 1.7.1 + "@scure/bip32": 1.1.5 + "@scure/bip39": 1.1.1 + checksum: 97e8e8253cb9f5a9271bd0201c37609c451c890eb85883b9c564f14743c3d7c673287406c93bf5604307593ee298ad9a03983388b85c11ca61461b9fc1a4f2c7 + languageName: node + linkType: hard + +"ethereum-waffle@npm:*": + version: 4.0.10 + resolution: "ethereum-waffle@npm:4.0.10" + dependencies: + "@ethereum-waffle/chai": 4.0.10 + "@ethereum-waffle/compiler": 4.0.3 + "@ethereum-waffle/mock-contract": 4.0.4 + "@ethereum-waffle/provider": 4.0.5 + solc: 0.8.15 + typechain: ^8.0.0 + peerDependencies: + ethers: "*" + bin: + waffle: bin/waffle + checksum: 680df4f5cf61f2f64b740d7724323e0872b1b1462e7ee2f1de6a1c9732155b28c4ac25c669ba557f72e1bb20204f81696a1fd543aece03654d71a9d9ebe1fc53 + languageName: node + linkType: hard + +"ethereumjs-abi@npm:0.6.8, ethereumjs-abi@npm:^0.6.8": + version: 0.6.8 + resolution: "ethereumjs-abi@npm:0.6.8" + dependencies: + bn.js: ^4.11.8 + ethereumjs-util: ^6.0.0 + checksum: cede2a8ae7c7e04eeaec079c2f925601a25b2ef75cf9230e7c5da63b4ea27883b35447365a47e35c1e831af520973a2252af89022c292c18a09a4607821a366b + languageName: node + linkType: hard + +"ethereumjs-util@npm:7.1.3": + version: 7.1.3 + resolution: "ethereumjs-util@npm:7.1.3" + dependencies: + "@types/bn.js": ^5.1.0 + bn.js: ^5.1.2 + create-hash: ^1.1.2 + ethereum-cryptography: ^0.1.3 + rlp: ^2.2.4 + checksum: 6de7a32af05c7265c96163ecd15ad97327afab9deb36092ef26250616657a8c0b5df8e698328247c8193e7b87c643c967f64f0b3cff2b2937cafa870ff5fcb41 + languageName: node + linkType: hard + +"ethereumjs-util@npm:^6.0.0, ethereumjs-util@npm:^6.2.1": + version: 6.2.1 + resolution: "ethereumjs-util@npm:6.2.1" + dependencies: + "@types/bn.js": ^4.11.3 + bn.js: ^4.11.0 + create-hash: ^1.1.2 + elliptic: ^6.5.2 + ethereum-cryptography: ^0.1.3 + ethjs-util: 0.1.6 + rlp: ^2.2.3 + checksum: e3cb4a2c034a2529281fdfc21a2126fe032fdc3038863f5720352daa65ddcc50fc8c67dbedf381a882dc3802e05d979287126d7ecf781504bde1fd8218693bde + languageName: node + linkType: hard + +"ethereumjs-util@npm:^7.1.1, ethereumjs-util@npm:^7.1.3, ethereumjs-util@npm:^7.1.4, ethereumjs-util@npm:^7.1.5": + version: 7.1.5 + resolution: "ethereumjs-util@npm:7.1.5" + dependencies: + "@types/bn.js": ^5.1.0 + bn.js: ^5.1.2 + create-hash: ^1.1.2 + ethereum-cryptography: ^0.1.3 + rlp: ^2.2.4 + checksum: 27a3c79d6e06b2df34b80d478ce465b371c8458b58f5afc14d91c8564c13363ad336e6e83f57eb0bd719fde94d10ee5697ceef78b5aa932087150c5287b286d1 + languageName: node + linkType: hard + +"ethers@npm:^5.5.3, ethers@npm:^5.6.1, ethers@npm:^5.7.1": + version: 5.7.2 + resolution: "ethers@npm:5.7.2" + dependencies: + "@ethersproject/abi": 5.7.0 + "@ethersproject/abstract-provider": 5.7.0 + "@ethersproject/abstract-signer": 5.7.0 + "@ethersproject/address": 5.7.0 + "@ethersproject/base64": 5.7.0 + "@ethersproject/basex": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/contracts": 5.7.0 + "@ethersproject/hash": 5.7.0 + "@ethersproject/hdnode": 5.7.0 + "@ethersproject/json-wallets": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/networks": 5.7.1 + "@ethersproject/pbkdf2": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/providers": 5.7.2 + "@ethersproject/random": 5.7.0 + "@ethersproject/rlp": 5.7.0 + "@ethersproject/sha2": 5.7.0 + "@ethersproject/signing-key": 5.7.0 + "@ethersproject/solidity": 5.7.0 + "@ethersproject/strings": 5.7.0 + "@ethersproject/transactions": 5.7.0 + "@ethersproject/units": 5.7.0 + "@ethersproject/wallet": 5.7.0 + "@ethersproject/web": 5.7.1 + "@ethersproject/wordlists": 5.7.0 + checksum: b7c08cf3e257185a7946117dbbf764433b7ba0e77c27298dec6088b3bc871aff711462b0621930c56880ff0a7ceb8b1d3a361ffa259f93377b48e34107f62553 + languageName: node + linkType: hard + +"ethjs-util@npm:0.1.6, ethjs-util@npm:^0.1.6": + version: 0.1.6 + resolution: "ethjs-util@npm:0.1.6" + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + checksum: 1f42959e78ec6f49889c49c8a98639e06f52a15966387dd39faf2930db48663d026efb7db2702dcffe7f2a99c4a0144b7ce784efdbf733f4077aae95de76d65f + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 543d6c858ab699303c3c32e0f0f47fc64d360bf73c3daf0ac0b5079710e340d6fe9f15487f94e66c629f5f82cd1a8678d692f3dbb6f6fcd1190e1b97fcad36f8 + languageName: node + linkType: hard + +"evp_bytestokey@npm:^1.0.3": + version: 1.0.3 + resolution: "evp_bytestokey@npm:1.0.3" + dependencies: + md5.js: ^1.3.4 + node-gyp: latest + safe-buffer: ^5.1.1 + checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 + languageName: node + linkType: hard + +"execa@npm:7.2.0": + version: 7.2.0 + resolution: "execa@npm:7.2.0" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.1 + human-signals: ^4.3.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^3.0.7 + strip-final-newline: ^3.0.0 + checksum: 14fd17ba0ca8c87b277584d93b1d9fc24f2a65e5152b31d5eb159a3b814854283eaae5f51efa9525e304447e2f757c691877f7adff8fde5746aae67eb1edd1cc + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"extend@npm:~3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2 + languageName: node + linkType: hard + +"extsprintf@npm:^1.2.0": + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-replace@npm:^3.0.0": + version: 3.0.0 + resolution: "find-replace@npm:3.0.0" + dependencies: + array-back: ^3.0.1 + checksum: 6b04bcfd79027f5b84aa1dfe100e3295da989bdac4b4de6b277f4d063e78f5c9e92ebc8a1fec6dd3b448c924ba404ee051cc759e14a3ee3e825fa1361025df08 + languageName: node + linkType: hard + +"find-up@npm:5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"find-up@npm:^2.1.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: ^2.0.0 + checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + +"fmix@npm:^0.1.0": + version: 0.1.0 + resolution: "fmix@npm:0.1.0" + dependencies: + imul: ^1.0.0 + checksum: c465344d4f169eaf10d45c33949a1e7a633f09dba2ac7063ce8ae8be743df5979d708f7f24900163589f047f5194ac5fc2476177ce31175e8805adfa7b8fb7a4 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.12.1, follow-redirects@npm:^1.14.0": + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" + peerDependenciesMeta: + debug: + optional: true + checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"form-data@npm:~2.3.2": + version: 2.3.3 + resolution: "form-data@npm:2.3.3" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.6 + mime-types: ^2.1.12 + checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3 + languageName: node + linkType: hard + +"fp-ts@npm:1.19.3": + version: 1.19.3 + resolution: "fp-ts@npm:1.19.3" + checksum: eb0d4766ad561e9c5c01bfdd3d0ae589af135556921c733d26cf5289aad9f400110defdd93e6ac1d71f626697bb44d9d95ed2879c53dfd868f7cac3cf5c5553c + languageName: node + linkType: hard + +"fp-ts@npm:^1.0.0": + version: 1.19.5 + resolution: "fp-ts@npm:1.19.5" + checksum: 67d2d9c3855d211ca2592b1ef805f98b618157e7681791a776d9d0f7f3e52fcca2122ebf5bc215908c9099fad69756d40e37210cf46cb4075dae1b61efe69e40 + languageName: node + linkType: hard + +"fs-extra@npm:^0.30.0": + version: 0.30.0 + resolution: "fs-extra@npm:0.30.0" + dependencies: + graceful-fs: ^4.1.2 + jsonfile: ^2.1.0 + klaw: ^1.0.0 + path-is-absolute: ^1.0.0 + rimraf: ^2.2.8 + checksum: 6edfd65fc813baa27f1603778c0f5ec11f8c5006a20b920437813ee2023eba18aeec8bef1c89b2e6c84f9fc90fdc7c916f4a700466c8c69d22a35d018f2570f0 + languageName: node + linkType: hard + +"fs-extra@npm:^10.0.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 + languageName: node + linkType: hard + +"fs-extra@npm:^7.0.0, fs-extra@npm:^7.0.1": + version: 7.0.1 + resolution: "fs-extra@npm:7.0.1" + dependencies: + graceful-fs: ^4.1.2 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: 141b9dccb23b66a66cefdd81f4cda959ff89282b1d721b98cea19ba08db3dcbe6f862f28841f3cf24bb299e0b7e6c42303908f65093cb7e201708e86ea5a8dcf + languageName: node + linkType: hard + +"fs-extra@npm:^9.1.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + +"functional-red-black-tree@npm:^1.0.1, functional-red-black-tree@npm:~1.0.1": + version: 1.0.1 + resolution: "functional-red-black-tree@npm:1.0.1" + checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f + languageName: node + linkType: hard + +"ganache@npm:7.4.3": + version: 7.4.3 + resolution: "ganache@npm:7.4.3" + dependencies: + "@trufflesuite/bigint-buffer": 1.1.10 + "@types/bn.js": ^5.1.0 + "@types/lru-cache": 5.1.1 + "@types/seedrandom": 3.0.1 + bufferutil: 4.0.5 + emittery: 0.10.0 + keccak: 3.0.2 + leveldown: 6.1.0 + secp256k1: 4.0.3 + utf-8-validate: 5.0.7 + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + bin: + ganache: dist/node/cli.js + ganache-cli: dist/node/cli.js + checksum: 170dde8c2ecd88e7f02a92bf582149e6497a2fdfb05abe9ab63a5b7cf33c061d71390f9719ef3d716dad4149299f8a87c71612ab4b40d1c57c55d7a185314630 + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2": + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f + languageName: node + linkType: hard + +"get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: ^1.0.0 + checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 + languageName: node + linkType: hard + +"glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob@npm:7.1.7": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 + languageName: node + linkType: hard + +"glob@npm:7.2.0": + version: 7.2.0 + resolution: "glob@npm:7.2.0" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"har-schema@npm:^2.0.0": + version: 2.0.0 + resolution: "har-schema@npm:2.0.0" + checksum: d8946348f333fb09e2bf24cc4c67eabb47c8e1d1aa1c14184c7ffec1140a49ec8aa78aa93677ae452d71d5fc0fdeec20f0c8c1237291fc2bcb3f502a5d204f9b + languageName: node + linkType: hard + +"har-validator@npm:~5.1.3": + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" + dependencies: + ajv: ^6.12.3 + har-schema: ^2.0.0 + checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 + languageName: node + linkType: hard + +"hardhat-deploy@npm:0.11.29": + version: 0.11.29 + resolution: "hardhat-deploy@npm:0.11.29" + dependencies: + "@ethersproject/abi": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/contracts": ^5.7.0 + "@ethersproject/providers": ^5.7.2 + "@ethersproject/solidity": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wallet": ^5.7.0 + "@types/qs": ^6.9.7 + axios: ^0.21.1 + chalk: ^4.1.2 + chokidar: ^3.5.2 + debug: ^4.3.2 + enquirer: ^2.3.6 + ethers: ^5.5.3 + form-data: ^4.0.0 + fs-extra: ^10.0.0 + match-all: ^1.2.6 + murmur-128: ^0.2.1 + qs: ^6.9.4 + zksync-web3: ^0.14.3 + checksum: 4a963e202271189566921fb7ab73bde4ed45204fddeeacdc9993883772b7349b513ba3dd17dee4bc178581724ab20d537f0b69c7ddf227710e7f070ec65c70d2 + languageName: node + linkType: hard + +"hardhat-tracer@npm:^2.0.0": + version: 2.6.0 + resolution: "hardhat-tracer@npm:2.6.0" + dependencies: + chalk: ^4.1.2 + debug: ^4.3.4 + ethers: ^5.6.1 + peerDependencies: + chai: 4.x + hardhat: ">=2.16 <3.x" + checksum: 739af035ff86b8729b12ec95591eadda57e680688a90488bb84b7ad35f82ab7a02b1392dec2caf35d2e9bf59328678e9b598a297c06da5c9dc1c800d44ad2abe + languageName: node + linkType: hard + +"hardhat@npm:^2.12.7": + version: 2.18.1 + resolution: "hardhat@npm:2.18.1" + dependencies: + "@ethersproject/abi": ^5.1.2 + "@metamask/eth-sig-util": ^4.0.0 + "@nomicfoundation/ethereumjs-block": 5.0.2 + "@nomicfoundation/ethereumjs-blockchain": 7.0.2 + "@nomicfoundation/ethereumjs-common": 4.0.2 + "@nomicfoundation/ethereumjs-evm": 2.0.2 + "@nomicfoundation/ethereumjs-rlp": 5.0.2 + "@nomicfoundation/ethereumjs-statemanager": 2.0.2 + "@nomicfoundation/ethereumjs-trie": 6.0.2 + "@nomicfoundation/ethereumjs-tx": 5.0.2 + "@nomicfoundation/ethereumjs-util": 9.0.2 + "@nomicfoundation/ethereumjs-vm": 7.0.2 + "@nomicfoundation/solidity-analyzer": ^0.1.0 + "@sentry/node": ^5.18.1 + "@types/bn.js": ^5.1.0 + "@types/lru-cache": ^5.1.0 + adm-zip: ^0.4.16 + aggregate-error: ^3.0.0 + ansi-escapes: ^4.3.0 + chalk: ^2.4.2 + chokidar: ^3.4.0 + ci-info: ^2.0.0 + debug: ^4.1.1 + enquirer: ^2.3.0 + env-paths: ^2.2.0 + ethereum-cryptography: ^1.0.3 + ethereumjs-abi: ^0.6.8 + find-up: ^2.1.0 + fp-ts: 1.19.3 + fs-extra: ^7.0.1 + glob: 7.2.0 + immutable: ^4.0.0-rc.12 + io-ts: 1.10.4 + keccak: ^3.0.2 + lodash: ^4.17.11 + mnemonist: ^0.38.0 + mocha: ^10.0.0 + p-map: ^4.0.0 + raw-body: ^2.4.1 + resolve: 1.17.0 + semver: ^6.3.0 + solc: 0.7.3 + source-map-support: ^0.5.13 + stacktrace-parser: ^0.1.10 + tsort: 0.0.1 + undici: ^5.14.0 + uuid: ^8.3.2 + ws: ^7.4.6 + peerDependencies: + ts-node: "*" + typescript: "*" + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + bin: + hardhat: internal/cli/bootstrap.js + checksum: 34a6b4f27e4412e8878c8612a36c92ae79acea5168514bddb7eb4654be5ea92e19f4b2618e8e789361c8f54eaf10ebe6469042c22bbaae66254e5e3a5a63c3b1 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.4 + resolution: "has@npm:1.0.4" + checksum: 8a11ba062e0627c9578a1d08285401e39f1d071a9692ddf793199070edb5648b21c774dd733e2a181edd635bf6862731885f476f4ccf67c998d7a5ff7cef2550 + languageName: node + linkType: hard + +"hash-base@npm:^3.0.0": + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" + dependencies: + inherits: ^2.0.4 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc + languageName: node + linkType: hard + +"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: ^2.0.3 + minimalistic-assert: ^1.0.1 + checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f + languageName: node + linkType: hard + +"he@npm:1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: ^1.0.3 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.1 + checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.6.0": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"http-signature@npm:~1.2.0": + version: 1.2.0 + resolution: "http-signature@npm:1.2.0" + dependencies: + assert-plus: ^1.0.0 + jsprim: ^1.2.2 + sshpk: ^1.7.0 + checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"husky@npm:^8.0.3": + version: 8.0.3 + resolution: "husky@npm:8.0.3" + bin: + husky: lib/bin.js + checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"immediate@npm:^3.2.3": + version: 3.3.0 + resolution: "immediate@npm:3.3.0" + checksum: 634b4305101e2452eba6c07d485bf3e415995e533c94b9c3ffbc37026fa1be34def6e4f2276b0dc2162a3f91628564a4bfb26280278b89d3ee54624e854d2f5f + languageName: node + linkType: hard + +"immediate@npm:~3.2.3": + version: 3.2.3 + resolution: "immediate@npm:3.2.3" + checksum: 9867dc70794f3aa246a90afe8a0166607590b687e8c572839ff2342292ac2da4b1cdfd396d38f7b9e72625d817d601e73c33c2874e9c0b8e0f1d6658b3c03496 + languageName: node + linkType: hard + +"immutable@npm:^4.0.0-rc.12": + version: 4.3.4 + resolution: "immutable@npm:4.3.4" + checksum: de3edd964c394bab83432429d3fb0b4816b42f56050f2ca913ba520bd3068ec3e504230d0800332d3abc478616e8f55d3787424a90d0952e6aba864524f1afc3 + languageName: node + linkType: hard + +"imul@npm:^1.0.0": + version: 1.0.1 + resolution: "imul@npm:1.0.1" + checksum: 6c2af3d5f09e2135e14d565a2c108412b825b221eb2c881f9130467f2adccf7ae201773ae8bcf1be169e2d090567a1fdfa9cf20d3b7da7b9cecb95b920ff3e52 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"io-ts@npm:1.10.4": + version: 1.10.4 + resolution: "io-ts@npm:1.10.4" + dependencies: + fp-ts: ^1.0.0 + checksum: 619134006778f7ca42693716ade7fc1a383079e7848bbeabc67a0e4ac9139cda6b2a88a052d539ab7d554033ee2ffe4dab5cb96b958c83fee2dff73d23f03e88 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-buffer@npm:^2.0.5": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-hex-prefixed@npm:1.0.0": + version: 1.0.0 + resolution: "is-hex-prefixed@npm:1.0.0" + checksum: 5ac58e6e528fb029cc43140f6eeb380fad23d0041cc23154b87f7c9a1b728bcf05909974e47248fd0b7fcc11ba33cf7e58d64804883056fabd23e2b898be41de + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + languageName: node + linkType: hard + +"is-typedarray@npm:~1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 + languageName: node + linkType: hard + +"is-url@npm:^1.2.4": + version: 1.2.4 + resolution: "is-url@npm:1.2.4" + checksum: 100e74b3b1feab87a43ef7653736e88d997eb7bd32e71fd3ebc413e58c1cbe56269699c776aaea84244b0567f2a7d68dfaa512a062293ed2f9fdecb394148432 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isstream@npm:~0.1.2": + version: 0.1.2 + resolution: "isstream@npm:0.1.2" + checksum: 1eb2fe63a729f7bdd8a559ab552c69055f4f48eb5c2f03724430587c6f450783c8f1cd936c1c952d0a927925180fcc892ebd5b174236cf1065d4bd5bdb37e963 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"js-sdsl@npm:^4.1.4": + version: 4.4.2 + resolution: "js-sdsl@npm:4.4.2" + checksum: ba705adc1788bf3c6f6c8e5077824f2bb4f0acab5a984420ce5cc492c7fff3daddc26335ad2c9a67d4f5e3241ec790f9e5b72a625adcf20cf321d2fd85e62b8b + languageName: node + linkType: hard + +"js-sha3@npm:0.8.0, js-sha3@npm:^0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce + languageName: node + linkType: hard + +"js-yaml@npm:4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2 + languageName: node + linkType: hard + +"json-bigint@npm:^1.0.0": + version: 1.0.0 + resolution: "json-bigint@npm:1.0.0" + dependencies: + bignumber.js: ^9.0.0 + checksum: c67bb93ccb3c291e60eb4b62931403e378906aab113ec1c2a8dd0f9a7f065ad6fd9713d627b732abefae2e244ac9ce1721c7a3142b2979532f12b258634ce6f6 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 + languageName: node + linkType: hard + +"json-stringify-safe@npm:~5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee + languageName: node + linkType: hard + +"jsonfile@npm:^2.1.0": + version: 2.4.0 + resolution: "jsonfile@npm:2.4.0" + dependencies: + graceful-fs: ^4.1.6 + dependenciesMeta: + graceful-fs: + optional: true + checksum: f5064aabbc9e35530dc471d8b203ae1f40dbe949ddde4391c6f6a6d310619a15f0efdae5587df594d1d70c555193aaeee9d2ed4aec9ffd5767bd5e4e62d49c3d + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.6 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsprim@npm:^1.2.2": + version: 1.4.2 + resolution: "jsprim@npm:1.4.2" + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + checksum: 2ad1b9fdcccae8b3d580fa6ced25de930eaa1ad154db21bbf8478a4d30bbbec7925b5f5ff29b933fba9412b16a17bd484a8da4fdb3663b5e27af95dd693bab2a + languageName: node + linkType: hard + +"keccak@npm:3.0.1": + version: 3.0.1 + resolution: "keccak@npm:3.0.1" + dependencies: + node-addon-api: ^2.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + checksum: 1de1b62fbb3e035ee186232b11f154bd5c2c12a2d910bc8ec313dab412b6f39ddc51d3a105618dd8de752875da0ead21abb0eb1d4e7d7b17771a4acbb7159390 + languageName: node + linkType: hard + +"keccak@npm:3.0.2": + version: 3.0.2 + resolution: "keccak@npm:3.0.2" + dependencies: + node-addon-api: ^2.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + readable-stream: ^3.6.0 + checksum: 39a7d6128b8ee4cb7dcd186fc7e20c6087cc39f573a0f81b147c323f688f1f7c2b34f62c4ae189fe9b81c6730b2d1228d8a399cdc1f3d8a4c8f030cdc4f20272 + languageName: node + linkType: hard + +"keccak@npm:^3.0.0, keccak@npm:^3.0.2": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" + dependencies: + node-addon-api: ^2.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + readable-stream: ^3.6.0 + checksum: 2bf27b97b2f24225b1b44027de62be547f5c7326d87d249605665abd0c8c599d774671c35504c62c9b922cae02758504c6f76a73a84234d23af8a2211afaaa11 + languageName: node + linkType: hard + +"klaw@npm:^1.0.0": + version: 1.3.1 + resolution: "klaw@npm:1.3.1" + dependencies: + graceful-fs: ^4.1.9 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 8f69e4797c26e7c3f2426bfa85f38a3da3c2cb1b4c6bd850d2377aed440d41ce9d806f2885c2e2e224372c56af4b1d43b8a499adecf9a05e7373dc6b8b7c52e4 + languageName: node + linkType: hard + +"level-codec@npm:^9.0.0": + version: 9.0.2 + resolution: "level-codec@npm:9.0.2" + dependencies: + buffer: ^5.6.0 + checksum: 289003d51b8afcdd24c4d318606abf2bae81975e4b527d7349abfdbacc8fef26711f2f24e2d20da0e1dce0bb216a856c9433ccb9ca25fa78a96aed9f51e506ed + languageName: node + linkType: hard + +"level-concat-iterator@npm:^3.0.0": + version: 3.1.0 + resolution: "level-concat-iterator@npm:3.1.0" + dependencies: + catering: ^2.1.0 + checksum: a15bc4c5fbbb30c1efa7fad06b72feaac84d90990b356b461593c198a833336f31f6daff8f40c3908fabd14cfd8856d1c5ecae9e1cb0575037b65fa607e760e9 + languageName: node + linkType: hard + +"level-concat-iterator@npm:~2.0.0": + version: 2.0.1 + resolution: "level-concat-iterator@npm:2.0.1" + checksum: 562583ef1292215f8e749c402510cb61c4d6fccf4541082b3d21dfa5ecde9fcccfe52bdcb5cfff9d2384e7ce5891f44df9439a6ddb39b0ffe31015600b4a828a + languageName: node + linkType: hard + +"level-errors@npm:^2.0.0, level-errors@npm:~2.0.0": + version: 2.0.1 + resolution: "level-errors@npm:2.0.1" + dependencies: + errno: ~0.1.1 + checksum: aca5d7670e2a40609db8d7743fce289bb5202c0bc13e4a78f81f36a6642e9abc0110f48087d3d3c2c04f023d70d4ee6f2db0e20c63d29b3fda323a67bfff6526 + languageName: node + linkType: hard + +"level-iterator-stream@npm:~4.0.0": + version: 4.0.2 + resolution: "level-iterator-stream@npm:4.0.2" + dependencies: + inherits: ^2.0.4 + readable-stream: ^3.4.0 + xtend: ^4.0.2 + checksum: 239e2c7e62bffb485ed696bcd3b98de7a2bc455d13be4fce175ae3544fe9cda81c2ed93d3e88b61380ae6d28cce02511862d77b86fb2ba5b5cf00471f3c1eccc + languageName: node + linkType: hard + +"level-mem@npm:^5.0.1": + version: 5.0.1 + resolution: "level-mem@npm:5.0.1" + dependencies: + level-packager: ^5.0.3 + memdown: ^5.0.0 + checksum: 37a38163b0c7cc55f64385fdff78438669f953bc08dc751739e2f1edd401472a89001a73a95cc8b81f38f989e46279797c11eb82e702690ea9a171e02bf31e84 + languageName: node + linkType: hard + +"level-packager@npm:^5.0.3": + version: 5.1.1 + resolution: "level-packager@npm:5.1.1" + dependencies: + encoding-down: ^6.3.0 + levelup: ^4.3.2 + checksum: befe2aa54f2010a6ecf7ddce392c8dee225e1839205080a2704d75e560e28b01191b345494696196777b70d376e3eaae4c9e7c330cc70d3000839f5b18dd78f2 + languageName: node + linkType: hard + +"level-supports@npm:^2.0.1": + version: 2.1.0 + resolution: "level-supports@npm:2.1.0" + checksum: f7b16aea7ddd13326ee4fbc2c1099bcaf8a74dc95346af9ebedea4e02518c6f7a438e829b79b7890d67489b59f615a9428369a0a065021797aa7cb6b6bd84d75 + languageName: node + linkType: hard + +"level-supports@npm:^4.0.0": + version: 4.0.1 + resolution: "level-supports@npm:4.0.1" + checksum: d4552b42bb8cdeada07b0f6356c7a90fefe76279147331f291aceae26e3e56d5f927b09ce921647c0230bfe03ddfbdcef332be921e5c2194421ae2bfa3cf6368 + languageName: node + linkType: hard + +"level-supports@npm:~1.0.0": + version: 1.0.1 + resolution: "level-supports@npm:1.0.1" + dependencies: + xtend: ^4.0.2 + checksum: 5d6bdb88cf00c3d9adcde970db06a548c72c5a94bf42c72f998b58341a105bfe2ea30d313ce1e84396b98cc9ddbc0a9bd94574955a86e929f73c986e10fc0df0 + languageName: node + linkType: hard + +"level-transcoder@npm:^1.0.1": + version: 1.0.1 + resolution: "level-transcoder@npm:1.0.1" + dependencies: + buffer: ^6.0.3 + module-error: ^1.0.1 + checksum: 304f08d802faf3491a533b6d87ad8be3cabfd27f2713bbe9d4c633bf50fcb9460eab5a6776bf015e101ead7ba1c1853e05e7f341112f17a9d0cb37ee5a421a25 + languageName: node + linkType: hard + +"level-ws@npm:^2.0.0": + version: 2.0.0 + resolution: "level-ws@npm:2.0.0" + dependencies: + inherits: ^2.0.3 + readable-stream: ^3.1.0 + xtend: ^4.0.1 + checksum: 4e5cbf090a07367373f693c98ad5b4797e7e694ea801ce5cd4103e06837ec883bdce9588ac11e0b9963ca144b96c95c6401c9e43583028ba1e4f847e81ec9ad6 + languageName: node + linkType: hard + +"level@npm:^8.0.0": + version: 8.0.0 + resolution: "level@npm:8.0.0" + dependencies: + browser-level: ^1.0.1 + classic-level: ^1.2.0 + checksum: 13eb25bd71bfdca6cd714d1233adf9da97de9a8a4bf9f28d62a390b5c96d0250abaf983eb90eb8c4e89c7a985bb330750683d106f12670e5ea8fba1d7e608a1f + languageName: node + linkType: hard + +"leveldown@npm:6.1.0": + version: 6.1.0 + resolution: "leveldown@npm:6.1.0" + dependencies: + abstract-leveldown: ^7.2.0 + napi-macros: ~2.0.0 + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: e984b61e9fbe057cfd5c81ac0afe5d7e35d695ff130a95991e0ecb66390e4c4ff6aa3980a65b6c53edaba80527a47790bb26e3cfbd52a054957b3546d9941fe4 + languageName: node + linkType: hard + +"levelup@npm:^4.3.2": + version: 4.4.0 + resolution: "levelup@npm:4.4.0" + dependencies: + deferred-leveldown: ~5.3.0 + level-errors: ~2.0.0 + level-iterator-stream: ~4.0.0 + level-supports: ~1.0.0 + xtend: ~4.0.0 + checksum: 5a09e34c78cd7c23f9f6cb73563f1ebe8121ffc5f9f5f232242529d4fbdd40e8d1ffb337d2defa0b842334e0dbd4028fbfe7a072eebfe2c4d07174f0aa4aabca + languageName: node + linkType: hard + +"lilconfig@npm:2.1.0": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 + languageName: node + linkType: hard + +"lint-staged@npm:^14.0.1": + version: 14.0.1 + resolution: "lint-staged@npm:14.0.1" + dependencies: + chalk: 5.3.0 + commander: 11.0.0 + debug: 4.3.4 + execa: 7.2.0 + lilconfig: 2.1.0 + listr2: 6.6.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.1 + bin: + lint-staged: bin/lint-staged.js + checksum: 8c5d740cb3c90fab2d970fa6bbffe5ddf35ec66ed374a52caf3a3cf83d8f4d5fd01a949994822bce5ea18c0b8dc8fa4ce087ef886a8c11db674139a063cdfe4f + languageName: node + linkType: hard + +"listr2@npm:6.6.1": + version: 6.6.1 + resolution: "listr2@npm:6.6.1" + dependencies: + cli-truncate: ^3.1.0 + colorette: ^2.0.20 + eventemitter3: ^5.0.1 + log-update: ^5.0.1 + rfdc: ^1.3.0 + wrap-ansi: ^8.1.0 + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + checksum: 99600e8a51f838f7208bce7e16d6b3d91d361f13881e6aa91d0b561a9a093ddcf63b7bc2a7b47aec7fdbff9d0e8c9f68cb66e6dfe2d857e5b1df8ab045c26ce8 + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: ^2.0.0 + path-exists: ^3.0.0 + checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: cb9227612f71b83e42de93eccf1232feeb25e705bdb19ba26c04f91e885bfd3dd5c517c4a97137658190581d3493ea3973072ca010aab7e301046d90740393d1 + languageName: node + linkType: hard + +"lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: ^4.1.0 + is-unicode-supported: ^0.1.0 + checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + languageName: node + linkType: hard + +"log-update@npm:^5.0.1": + version: 5.0.1 + resolution: "log-update@npm:5.0.1" + dependencies: + ansi-escapes: ^5.0.0 + cli-cursor: ^4.0.0 + slice-ansi: ^5.0.0 + strip-ansi: ^7.0.1 + wrap-ansi: ^8.0.1 + checksum: 2c6b47dcce6f9233df6d232a37d9834cb3657a0749ef6398f1706118de74c55f158587d4128c225297ea66803f35c5ac3db4f3f617046d817233c45eedc32ef1 + languageName: node + linkType: hard + +"loupe@npm:^2.3.6": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" + dependencies: + get-func-name: ^2.0.1 + checksum: 96c058ec7167598e238bb7fb9def2f9339215e97d6685d9c1e3e4bdb33d14600e11fe7a812cf0c003dfb73ca2df374f146280b2287cae9e8d989e9d7a69a203b + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 + languageName: node + linkType: hard + +"lru_map@npm:^0.3.3": + version: 0.3.3 + resolution: "lru_map@npm:0.3.3" + checksum: ca9dd43c65ed7a4f117c548028101c5b6855e10923ea9d1f635af53ad20c5868ff428c364d454a7b57fe391b89c704982275410c3c5099cca5aeee00d76e169a + languageName: node + linkType: hard + +"ltgt@npm:~2.2.0": + version: 2.2.1 + resolution: "ltgt@npm:2.2.1" + checksum: 7e3874296f7538bc8087b428ac4208008d7b76916354b34a08818ca7c83958c1df10ec427eeeaad895f6b81e41e24745b18d30f89abcc21d228b94f6961d50a2 + languageName: node + linkType: hard + +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"match-all@npm:^1.2.6": + version: 1.2.6 + resolution: "match-all@npm:1.2.6" + checksum: 3d4f16b8fd082f2fd10e362f4a8b71c62f8a767591b3db831ca2bdcf726337e9a64e4abc30e2ef053dc2bcfb875a9ed80bd78e006ad5ef11380a7158d0cb00e1 + languageName: node + linkType: hard + +"mcl-wasm@npm:^0.7.1": + version: 0.7.9 + resolution: "mcl-wasm@npm:0.7.9" + checksum: 6b6ed5084156b98b2db70b223e1ba2c01953970b48a2e0c4ea3eeb9296610e6b3bfb2a2cce9e92e2d7ad61778b5f5a630e705e663835e915ba188c174a0a37fa + languageName: node + linkType: hard + +"md5.js@npm:^1.3.4": + version: 1.3.5 + resolution: "md5.js@npm:1.3.5" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + safe-buffer: ^5.1.2 + checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c + languageName: node + linkType: hard + +"memdown@npm:^5.0.0": + version: 5.1.0 + resolution: "memdown@npm:5.1.0" + dependencies: + abstract-leveldown: ~6.2.1 + functional-red-black-tree: ~1.0.1 + immediate: ~3.2.3 + inherits: ~2.0.1 + ltgt: ~2.2.0 + safe-buffer: ~5.2.0 + checksum: 23e4414034e975eae1edd6864874bbe77501d41814fc27e8ead946c3379cb1cbea303d724083d08a6a269af9bf5d55073f1f767dfa7ad6e70465769f87e29794 + languageName: node + linkType: hard + +"memory-level@npm:^1.0.0": + version: 1.0.0 + resolution: "memory-level@npm:1.0.0" + dependencies: + abstract-level: ^1.0.0 + functional-red-black-tree: ^1.0.1 + module-error: ^1.0.1 + checksum: 80b1b7aedaf936e754adbcd7b9303018c3684fb32f9992fd967c448f145d177f16c724fbba9ed3c3590a9475fd563151eae664d69b83d2ad48714852e9fc5c72 + languageName: node + linkType: hard + +"memorystream@npm:^0.3.1": + version: 0.3.1 + resolution: "memorystream@npm:0.3.1" + checksum: f18b42440d24d09516d01466c06adf797df7873f0d40aa7db02e5fb9ed83074e5e65412d0720901d7069363465f82dc4f8bcb44f0cde271567a61426ce6ca2e9 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merkle-patricia-tree@npm:^4.2.2, merkle-patricia-tree@npm:^4.2.4": + version: 4.2.4 + resolution: "merkle-patricia-tree@npm:4.2.4" + dependencies: + "@types/levelup": ^4.3.0 + ethereumjs-util: ^7.1.4 + level-mem: ^5.0.1 + level-ws: ^2.0.0 + readable-stream: ^3.6.0 + semaphore-async-await: ^1.5.1 + checksum: acedc7eea7bb14b97da01e8e023406ed55742f8e82bdd28d1ed821e3bd0cfed9e92f18c7cb300aee0d38f319c960026fd4d4e601f61e2a8665b73c0786d9f799 + languageName: node + linkType: hard + +"micromatch@npm:4.0.5": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"miller-rabin@npm:^4.0.0": + version: 4.0.1 + resolution: "miller-rabin@npm:4.0.1" + dependencies: + bn.js: ^4.0.0 + brorand: ^1.0.1 + bin: + miller-rabin: bin/miller-rabin + checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed + languageName: node + linkType: hard + +"minimatch@npm:5.0.1": + version: 5.0.1 + resolution: "minimatch@npm:5.0.1" + dependencies: + brace-expansion: ^2.0.1 + checksum: b34b98463da4754bc526b244d680c69d4d6089451ebe512edaf6dd9eeed0279399cfa3edb19233513b8f830bf4bfcad911dddcdf125e75074100d52f724774f0 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mnemonist@npm:^0.38.0": + version: 0.38.5 + resolution: "mnemonist@npm:0.38.5" + dependencies: + obliterator: ^2.0.0 + checksum: 66080afc1616866beb164e230c432964d6eed467cf37ad00e9c10161b8267928124ca8f1d0ecfea86c85568acfa62d54faaf646a86968d1135189a0fdfdd6b78 + languageName: node + linkType: hard + +"mocha@npm:^10.0.0": + version: 10.2.0 + resolution: "mocha@npm:10.2.0" + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + bin: + _mocha: bin/_mocha + mocha: bin/mocha.js + checksum: 406c45eab122ffd6ea2003c2f108b2bc35ba036225eee78e0c784b6fa2c7f34e2b13f1dbacef55a4fdf523255d76e4f22d1b5aacda2394bd11666febec17c719 + languageName: node + linkType: hard + +"module-error@npm:^1.0.1, module-error@npm:^1.0.2": + version: 1.0.2 + resolution: "module-error@npm:1.0.2" + checksum: 5d653e35bd55b3e95f8aee2cdac108082ea892e71b8f651be92cde43e4ee86abee4fa8bd7fc3fe5e68b63926d42f63c54cd17b87a560c31f18739295575a3962 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"murmur-128@npm:^0.2.1": + version: 0.2.1 + resolution: "murmur-128@npm:0.2.1" + dependencies: + encode-utf8: ^1.0.2 + fmix: ^0.1.0 + imul: ^1.0.0 + checksum: 94ff8b39bf1a1a7bde83b6d13f656bbe591e0a5b5ffe4384c39470120ab70e9eadf0af38557742a30d24421ddc63aea6bba1028a1d6b66553038ee86a660dd92 + languageName: node + linkType: hard + +"nanoid@npm:3.3.3": + version: 3.3.3 + resolution: "nanoid@npm:3.3.3" + bin: + nanoid: bin/nanoid.cjs + checksum: ada019402a07464a694553c61d2dca8a4353645a7d92f2830f0d487fedff403678a0bee5323a46522752b2eab95a0bc3da98b6cccaa7c0c55cd9975130e6d6f0 + languageName: node + linkType: hard + +"napi-macros@npm:^2.2.2": + version: 2.2.2 + resolution: "napi-macros@npm:2.2.2" + checksum: c6f9bd71cdbbc37ddc3535aa5be481238641d89585b8a3f4d301cb89abf459e2d294810432bb7d12056d1f9350b1a0899a5afcf460237a3da6c398cf0fec7629 + languageName: node + linkType: hard + +"napi-macros@npm:~2.0.0": + version: 2.0.0 + resolution: "napi-macros@npm:2.0.0" + checksum: 30384819386977c1f82034757014163fa60ab3c5a538094f778d38788bebb52534966279956f796a92ea771c7f8ae072b975df65de910d051ffbdc927f62320c + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"node-addon-api@npm:^2.0.0": + version: 2.0.2 + resolution: "node-addon-api@npm:2.0.2" + dependencies: + node-gyp: latest + checksum: 31fb22d674648204f8dd94167eb5aac896c841b84a9210d614bf5d97c74ef059cc6326389cf0c54d2086e35312938401d4cc82e5fcd679202503eb8ac84814f8 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.7": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + +"node-gyp-build@npm:4.3.0": + version: 4.3.0 + resolution: "node-gyp-build@npm:4.3.0" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 1ecab16d9f275174d516e223f60f65ebe07540347d5c04a6a7d6921060b7f2e3af4f19463d9d1dcedc452e275c2ae71354a99405e55ebd5b655bb2f38025c728 + languageName: node + linkType: hard + +"node-gyp-build@npm:4.4.0": + version: 4.4.0 + resolution: "node-gyp-build@npm:4.4.0" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 972a059f960253d254e0b23ce10f54c8982236fc0edcab85166d0b7f87443b2ce98391c877cfb2f6eeafcf03c538c5f4dd3e0bfff03828eb48634f58f4c64343 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": + version: 4.6.1 + resolution: "node-gyp-build@npm:4.6.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: c3676d337b36803bc7792e35bf7fdcda7cdcb7e289b8f9855a5535702a82498eb976842fefcf487258c58005ca32ce3d537fbed91280b04409161dcd7232a882 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.1.0 + resolution: "npm-run-path@npm:5.1.0" + dependencies: + path-key: ^4.0.0 + checksum: dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"oauth-sign@npm:~0.9.0": + version: 0.9.0 + resolution: "oauth-sign@npm:0.9.0" + checksum: 8f5497a127967866a3c67094c21efd295e46013a94e6e828573c62220e9af568cc1d2d04b16865ba583e430510fa168baf821ea78f355146d8ed7e350fc44c64 + languageName: node + linkType: hard + +"object-inspect@npm:^1.9.0": + version: 1.13.0 + resolution: "object-inspect@npm:1.13.0" + checksum: 21353e910a3079466cb44adca71d8bef15bd8b87e518eb68bb33d82c5c70b83193993edce432cc92268f7dd02c4a8ab338663a011844367d0bd0559f6dde1fed + languageName: node + linkType: hard + +"obliterator@npm:^2.0.0": + version: 2.0.4 + resolution: "obliterator@npm:2.0.4" + checksum: f28ad35b6d812089315f375dc3e6e5f9bebf958ebe4b10ccd471c7115cbcf595e74bdac4783ae758e5b1f47e3096427fdb37cfa7bed566b132df92ff317b9a7c + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: ^4.0.0 + checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 + languageName: node + linkType: hard + +"ordinal@npm:^1.0.3": + version: 1.0.3 + resolution: "ordinal@npm:1.0.3" + checksum: 6761c5b7606b6c4b0c22b4097dab4fe7ffcddacc49238eedf9c0ced877f5d4e4ad3f4fd43fefa1cc3f167cc54c7149267441b2ae85b81ccf13f45cf4b7947164 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: ^1.0.0 + checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: ^1.1.0 + checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605 + languageName: node + linkType: hard + +"path-browserify@npm:^1.0.0": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.6": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + +"pbkdf2@npm:^3.0.17, pbkdf2@npm:^3.0.9": + version: 3.1.2 + resolution: "pbkdf2@npm:3.1.2" + dependencies: + create-hash: ^1.1.2 + create-hmac: ^1.1.4 + ripemd160: ^2.0.1 + safe-buffer: ^5.0.1 + sha.js: ^2.4.8 + checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pidtree@npm:0.6.0": + version: 0.6.0 + resolution: "pidtree@npm:0.6.0" + bin: + pidtree: bin/pidtree.js + checksum: 8fbc073ede9209dd15e80d616e65eb674986c93be49f42d9ddde8dbbd141bb53d628a7ca4e58ab5c370bb00383f67d75df59a9a226dede8fa801267a7030c27a + languageName: node + linkType: hard + +"prettier@npm:^2.1.2, prettier@npm:^2.3.1": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prr@npm:~1.0.1": + version: 1.0.1 + resolution: "prr@npm:1.0.1" + checksum: 3bca2db0479fd38f8c4c9439139b0c42dcaadcc2fbb7bb8e0e6afaa1383457f1d19aea9e5f961d5b080f1cfc05bfa1fe9e45c97a1d3fd6d421950a73d3108381 + languageName: node + linkType: hard + +"psl@npm:^1.1.28": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + languageName: node + linkType: hard + +"punycode@npm:^1.4.1": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + +"qs@npm:^6.11.2, qs@npm:^6.9.4": + version: 6.11.2 + resolution: "qs@npm:6.11.2" + dependencies: + side-channel: ^1.0.4 + checksum: e812f3c590b2262548647d62f1637b6989cc56656dc960b893fe2098d96e1bd633f36576f4cd7564dfbff9db42e17775884db96d846bebe4f37420d073ecdc0b + languageName: node + linkType: hard + +"qs@npm:~6.5.2": + version: 6.5.3 + resolution: "qs@npm:6.5.3" + checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2, queue-microtask@npm:^1.2.3": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"randombytes@npm:^2.0.1, randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"raw-body@npm:^2.4.1": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.0, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"reduce-flatten@npm:^2.0.0": + version: 2.0.0 + resolution: "reduce-flatten@npm:2.0.0" + checksum: 64393ef99a16b20692acfd60982d7fdbd7ff8d9f8f185c6023466444c6dd2abb929d67717a83cec7f7f8fb5f46a25d515b3b2bf2238fdbfcdbfd01d2a9e73cb8 + languageName: node + linkType: hard + +"request@npm:^2.85.0": + version: 2.88.2 + resolution: "request@npm:2.88.2" + dependencies: + aws-sign2: ~0.7.0 + aws4: ^1.8.0 + caseless: ~0.12.0 + combined-stream: ~1.0.6 + extend: ~3.0.2 + forever-agent: ~0.6.1 + form-data: ~2.3.2 + har-validator: ~5.1.3 + http-signature: ~1.2.0 + is-typedarray: ~1.0.0 + isstream: ~0.1.2 + json-stringify-safe: ~5.0.1 + mime-types: ~2.1.19 + oauth-sign: ~0.9.0 + performance-now: ^2.1.0 + qs: ~6.5.2 + safe-buffer: ^5.1.2 + tough-cookie: ~2.5.0 + tunnel-agent: ^0.6.0 + uuid: ^3.3.2 + checksum: 4e112c087f6eabe7327869da2417e9d28fcd0910419edd2eb17b6acfc4bfa1dad61954525949c228705805882d8a98a86a0ea12d7f739c01ee92af7062996983 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.0": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"resolve@npm:1.17.0": + version: 1.17.0 + resolution: "resolve@npm:1.17.0" + dependencies: + path-parse: ^1.0.6 + checksum: 9ceaf83b3429f2d7ff5d0281b8d8f18a1f05b6ca86efea7633e76b8f76547f33800799dfdd24434942dec4fbd9e651ed3aef577d9a6b5ec87ad89c1060e24759 + languageName: node + linkType: hard + +"resolve@patch:resolve@1.17.0#~builtin": + version: 1.17.0 + resolution: "resolve@patch:resolve@npm%3A1.17.0#~builtin::version=1.17.0&hash=c3c19d" + dependencies: + path-parse: ^1.0.6 + checksum: 6fd799f282ddf078c4bc20ce863e3af01fa8cb218f0658d9162c57161a2dbafe092b13015b9a4c58d0e1e801cf7aa7a4f13115fea9db98c3f9a0c43e429bad6f + languageName: node + linkType: hard + +"restore-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "restore-cursor@npm:4.0.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: 5b675c5a59763bf26e604289eab35711525f11388d77f409453904e1e69c0d37ae5889295706b2c81d23bd780165084d040f9b68fffc32cc921519031c4fa4af + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"rfdc@npm:^1.3.0": + version: 1.3.0 + resolution: "rfdc@npm:1.3.0" + checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32 + languageName: node + linkType: hard + +"rimraf@npm:^2.2.8": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": + version: 2.0.2 + resolution: "ripemd160@npm:2.0.2" + dependencies: + hash-base: ^3.0.0 + inherits: ^2.0.1 + checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 + languageName: node + linkType: hard + +"rlp@npm:2.2.6": + version: 2.2.6 + resolution: "rlp@npm:2.2.6" + dependencies: + bn.js: ^4.11.1 + bin: + rlp: bin/rlp + checksum: 2601225df0fe7aa3b497b33a12fd9fbaf8fb1d2989ecc5c091918ed93ee77d1c3fab20ddd3891a9ca66a8ba66d993e6079be6fb31f450fcf38ba30873102ca46 + languageName: node + linkType: hard + +"rlp@npm:^2.2.3, rlp@npm:^2.2.4": + version: 2.2.7 + resolution: "rlp@npm:2.2.7" + dependencies: + bn.js: ^5.2.0 + bin: + rlp: bin/rlp + checksum: 3db4dfe5c793f40ac7e0be689a1f75d05e6f2ca0c66189aeb62adab8c436b857ab4420a419251ee60370d41d957a55698fc5e23ab1e1b41715f33217bc4bb558 + languageName: node + linkType: hard + +"rns-contracts@workspace:.": + version: 0.0.0-use.local + resolution: "rns-contracts@workspace:." + dependencies: + "@nomicfoundation/hardhat-chai-matchers": ^1.0.6 + "@nomiclabs/hardhat-ethers": ^2.0.0 + "@nomiclabs/hardhat-waffle": ^2.0.1 + "@typechain/hardhat": ^3.0.0 + "@types/sinon-chai": ^3.2.3 + chai: 4.x + dotenv: ^16.3.1 + ethereum-waffle: "*" + hardhat: ^2.12.7 + hardhat-deploy: 0.11.29 + hardhat-tracer: ^2.0.0 + husky: ^8.0.3 + lint-staged: ^14.0.1 + ts-node: ^10.4.0 + typechain: ^6.0.5 + typescript: ^4.5.4 + languageName: unknown + linkType: soft + +"run-parallel-limit@npm:^1.1.0": + version: 1.1.0 + resolution: "run-parallel-limit@npm:1.1.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: 672c3b87e7f939c684b9965222b361421db0930223ed1e43ebf0e7e48ccc1a022ea4de080bef4d5468434e2577c33b7681e3f03b7593fdc49ad250a55381123c + languageName: node + linkType: hard + +"rustbn.js@npm:~0.2.0": + version: 0.2.0 + resolution: "rustbn.js@npm:0.2.0" + checksum: 2148e7ba34e70682907ee29df4784639e6eb025481b2c91249403b7ec57181980161868d9aa24822a5075dd1bb5a180dfedc77309e5f0d27b6301f9b563af99a + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"scrypt-js@npm:3.0.1, scrypt-js@npm:^3.0.0": + version: 3.0.1 + resolution: "scrypt-js@npm:3.0.1" + checksum: b7c7d1a68d6ca946f2fbb0778e0c4ec63c65501b54023b2af7d7e9f48fdb6c6580d6f7675cd53bda5944c5ebc057560d5a6365079752546865defb3b79dea454 + languageName: node + linkType: hard + +"secp256k1@npm:4.0.3, secp256k1@npm:^4.0.1": + version: 4.0.3 + resolution: "secp256k1@npm:4.0.3" + dependencies: + elliptic: ^6.5.4 + node-addon-api: ^2.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + checksum: 21e219adc0024fbd75021001358780a3cc6ac21273c3fcaef46943af73969729709b03f1df7c012a0baab0830fb9a06ccc6b42f8d50050c665cb98078eab477b + languageName: node + linkType: hard + +"seedrandom@npm:3.0.5": + version: 3.0.5 + resolution: "seedrandom@npm:3.0.5" + checksum: 728b56bc3bc1b9ddeabd381e449b51cb31bdc0aa86e27fcd0190cea8c44613d5bcb2f6bb63ed79f78180cbe791c20b8ec31a9627f7b7fc7f476fd2bdb7e2da9f + languageName: node + linkType: hard + +"semaphore-async-await@npm:^1.5.1": + version: 1.5.1 + resolution: "semaphore-async-await@npm:1.5.1" + checksum: 2dedf7c59ba5f2da860fed95a81017189de6257cbe06c9de0ff2e610a3ae427e9bde1ab7685a62b03ebc28982dee437110492215d75fd6dc8257ce7a38e66b74 + languageName: node + linkType: hard + +"semver@npm:^5.5.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:^6.3.0": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"serialize-javascript@npm:6.0.0": + version: 6.0.0 + resolution: "serialize-javascript@npm:6.0.0" + dependencies: + randombytes: ^2.1.0 + checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 + languageName: node + linkType: hard + +"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + bin: + sha.js: ./bin.js + checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: ^1.0.0 + get-intrinsic: ^1.0.2 + object-inspect: ^1.9.0 + checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: ^6.0.0 + is-fullwidth-code-point: ^4.0.0 + checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"solc@npm:0.7.3": + version: 0.7.3 + resolution: "solc@npm:0.7.3" + dependencies: + command-exists: ^1.2.8 + commander: 3.0.2 + follow-redirects: ^1.12.1 + fs-extra: ^0.30.0 + js-sha3: 0.8.0 + memorystream: ^0.3.1 + require-from-string: ^2.0.0 + semver: ^5.5.0 + tmp: 0.0.33 + bin: + solcjs: solcjs + checksum: 2d8eb16c6d8f648213c94dc8d977cffe5099cba7d41c82d92d769ef71ae8320a985065ce3d6c306440a85f8e8d2b27fb30bdd3ac38f69e5c1fa0ab8a3fb2f217 + languageName: node + linkType: hard + +"solc@npm:0.8.15": + version: 0.8.15 + resolution: "solc@npm:0.8.15" + dependencies: + command-exists: ^1.2.8 + commander: ^8.1.0 + follow-redirects: ^1.12.1 + js-sha3: 0.8.0 + memorystream: ^0.3.1 + semver: ^5.5.0 + tmp: 0.0.33 + bin: + solcjs: solc.js + checksum: a11de198bc5d481485a4a4803fb08a81a56dd9ffa7cdc62f8d6d5fc669f72e7cb4b22789004d54481353463421f6e6e3d1dffe7365b6d0ed5f37baee303266db + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.13": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map@npm:^0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"sshpk@npm:^1.7.0": + version: 1.17.0 + resolution: "sshpk@npm:1.17.0" + dependencies: + asn1: ~0.2.3 + assert-plus: ^1.0.0 + bcrypt-pbkdf: ^1.0.0 + dashdash: ^1.12.0 + ecc-jsbn: ~0.1.1 + getpass: ^0.1.1 + jsbn: ~0.1.0 + safer-buffer: ^2.0.2 + tweetnacl: ~0.14.0 + bin: + sshpk-conv: bin/sshpk-conv + sshpk-sign: bin/sshpk-sign + sshpk-verify: bin/sshpk-verify + checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"stacktrace-parser@npm:^0.1.10": + version: 0.1.10 + resolution: "stacktrace-parser@npm:0.1.10" + dependencies: + type-fest: ^0.7.1 + checksum: f4fbddfc09121d91e587b60de4beb4941108e967d71ad3a171812dc839b010ca374d064ad0a296295fed13acd103609d99a4224a25b4e67de13cae131f1901ee + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + +"string-argv@npm:0.3.2": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 8703ad3f3db0b2641ed2adbb15cf24d3945070d9a751f9e74a924966db9f325ac755169007233e8985a39a6a292f14d4fee20482989b89b96e473c4221508a0f + languageName: node + linkType: hard + +"string-format@npm:^2.0.0": + version: 2.0.0 + resolution: "string-format@npm:2.0.0" + checksum: dada2ef95f6d36c66562c673d95315f80457fa7dce2f3609a2e75d1190b98c88319028cf0a5b6c043d01c18d581b2641579f79480584ba030d6ac6fceb30bc55 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 + languageName: node + linkType: hard + +"strip-hex-prefix@npm:1.0.0": + version: 1.0.0 + resolution: "strip-hex-prefix@npm:1.0.0" + dependencies: + is-hex-prefixed: 1.0.0 + checksum: 4cafe7caee1d281d3694d14920fd5d3c11adf09371cef7e2ccedd5b83efd9e9bd2219b5d6ce6e809df6e0f437dc9d30db1192116580875698aad164a6d6b285b + languageName: node + linkType: hard + +"strip-json-comments@npm:3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"supports-color@npm:8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"table-layout@npm:^1.0.2": + version: 1.0.2 + resolution: "table-layout@npm:1.0.2" + dependencies: + array-back: ^4.0.1 + deep-extend: ~0.6.0 + typical: ^5.2.0 + wordwrapjs: ^4.0.0 + checksum: 8f41b5671f101a5195747ec1727b1d35ea2cd5bf85addda11cc2f4b36892db9696ce3c2c7334b5b8a122505b34d19135fede50e25678df71b0439e0704fd953f + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"tmp@npm:0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 + languageName: node + linkType: hard + +"tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" + dependencies: + psl: ^1.1.28 + punycode: ^2.1.1 + checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"ts-command-line-args@npm:^2.2.0": + version: 2.5.1 + resolution: "ts-command-line-args@npm:2.5.1" + dependencies: + chalk: ^4.1.0 + command-line-args: ^5.1.1 + command-line-usage: ^6.1.0 + string-format: ^2.0.0 + bin: + write-markdown: dist/write-markdown.js + checksum: 7c0a7582e94f1d2160e3dd379851ec4f1758bc673ccd71bae07f839f83051b6b83e0ae14325c2d04ea728e5bde7b7eacfd2ab060b8fd4b8ab29e0bbf77f6c51e + languageName: node + linkType: hard + +"ts-essentials@npm:^7.0.1": + version: 7.0.3 + resolution: "ts-essentials@npm:7.0.3" + peerDependencies: + typescript: ">=3.7.0" + checksum: 74d75868acf7f8b95e447d8b3b7442ca21738c6894e576df9917a352423fde5eb43c5651da5f78997da6061458160ae1f6b279150b42f47ccc58b73e55acaa2f + languageName: node + linkType: hard + +"ts-node@npm:^10.4.0": + version: 10.9.1 + resolution: "ts-node@npm:10.9.1" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + languageName: node + linkType: hard + +"tslib@npm:^1.9.3": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tsort@npm:0.0.1": + version: 0.0.1 + resolution: "tsort@npm:0.0.1" + checksum: 581566c248690b9ea7e431e1545affb3d2cab0f5dcd0e45ddef815dfaec4864cb5f0cfd8072924dedbc0de9585ff07e3e65db60f14fab4123737b9bb6e72eacc + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: ^5.0.1 + checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711 + languageName: node + linkType: hard + +"tweetnacl-util@npm:^0.15.1": + version: 0.15.1 + resolution: "tweetnacl-util@npm:0.15.1" + checksum: ae6aa8a52cdd21a95103a4cc10657d6a2040b36c7a6da7b9d3ab811c6750a2d5db77e8c36969e75fdee11f511aa2b91c552496c6e8e989b6e490e54aca2864fc + languageName: node + linkType: hard + +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 + languageName: node + linkType: hard + +"tweetnacl@npm:^1.0.3": + version: 1.0.3 + resolution: "tweetnacl@npm:1.0.3" + checksum: e4a57cac188f0c53f24c7a33279e223618a2bfb5fea426231991652a13247bea06b081fd745d71291fcae0f4428d29beba1b984b1f1ce6f66b06a6d1ab90645c + languageName: node + linkType: hard + +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.7.1": + version: 0.7.1 + resolution: "type-fest@npm:0.7.1" + checksum: 5b1b113529d59949d97b76977d545989ddc11b81bb0c766b6d2ccc65473cb4b4a5c7d24f5be2c2bb2de302a5d7a13c1732ea1d34c8c59b7e0ec1f890cf7fc424 + languageName: node + linkType: hard + +"type-fest@npm:^1.0.2": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 + languageName: node + linkType: hard + +"typechain@npm:^6.0.5": + version: 6.1.0 + resolution: "typechain@npm:6.1.0" + dependencies: + "@types/prettier": ^2.1.1 + debug: ^4.1.1 + fs-extra: ^7.0.0 + glob: ^7.1.6 + js-sha3: ^0.8.0 + lodash: ^4.17.15 + mkdirp: ^1.0.4 + prettier: ^2.1.2 + ts-command-line-args: ^2.2.0 + ts-essentials: ^7.0.1 + peerDependencies: + typescript: ">=4.1.0" + bin: + typechain: dist/cli/cli.js + checksum: 9803a61d2c316a9f5cfbdbb88718ea9bdeff5485401b3d584d035069b96316d5bb4923129bfdcdd4327a7d44b9d37de95e38c7cd6d83ce1368ec38fab9d419b4 + languageName: node + linkType: hard + +"typechain@npm:^8.0.0": + version: 8.3.2 + resolution: "typechain@npm:8.3.2" + dependencies: + "@types/prettier": ^2.1.1 + debug: ^4.3.1 + fs-extra: ^7.0.0 + glob: 7.1.7 + js-sha3: ^0.8.0 + lodash: ^4.17.15 + mkdirp: ^1.0.4 + prettier: ^2.3.1 + ts-command-line-args: ^2.2.0 + ts-essentials: ^7.0.1 + peerDependencies: + typescript: ">=4.3.0" + bin: + typechain: dist/cli/cli.js + checksum: 146a1896fa93403404be78757790b0f95b5457efebcca16b61622e09c374d555ef4f837c1c4eedf77e03abc50276d96a2f33064ec09bb802f62d8cc2b13fce70 + languageName: node + linkType: hard + +"typescript@npm:^4.5.4": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db + languageName: node + linkType: hard + +"typescript@patch:typescript@^4.5.4#~builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 1f8f3b6aaea19f0f67cba79057674ba580438a7db55057eb89cc06950483c5d632115c14077f6663ea76fd09fce3c190e6414bb98582ec80aa5a4eaf345d5b68 + languageName: node + linkType: hard + +"typical@npm:^4.0.0": + version: 4.0.0 + resolution: "typical@npm:4.0.0" + checksum: a242081956825328f535e6195a924240b34daf6e7fdb573a1809a42b9f37fb8114fa99c7ab89a695e0cdb419d4149d067f6723e4b95855ffd39c6c4ca378efb3 + languageName: node + linkType: hard + +"typical@npm:^5.2.0": + version: 5.2.0 + resolution: "typical@npm:5.2.0" + checksum: ccaeb151a9a556291b495571ca44c4660f736fb49c29314bbf773c90fad92e9485d3cc2b074c933866c1595abbbc962f2b8bfc6e0f52a8c6b0cdd205442036ac + languageName: node + linkType: hard + +"undici-types@npm:~5.25.1": + version: 5.25.3 + resolution: "undici-types@npm:5.25.3" + checksum: ec9d2cc36520cbd9fbe3b3b6c682a87fe5be214699e1f57d1e3d9a2cb5be422e62735f06e0067dc325fd3dd7404c697e4d479f9147dc8a804e049e29f357f2ff + languageName: node + linkType: hard + +"undici@npm:^5.14.0": + version: 5.26.3 + resolution: "undici@npm:5.26.3" + dependencies: + "@fastify/busboy": ^2.0.0 + checksum: aaa9aadb712cf80e1a9cea2377e4842670105e00abbc184a21770ea5a8b77e4e2eadc200eac62442e74a1cd3b16a840c6f73b112b9e886bd3c1a125eb22e4f21 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.0 + resolution: "universalify@npm:2.0.0" + checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + languageName: node + linkType: hard + +"unpipe@npm:1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"url@npm:^0.11.0": + version: 0.11.3 + resolution: "url@npm:0.11.3" + dependencies: + punycode: ^1.4.1 + qs: ^6.11.2 + checksum: f9e7886f46a16f96d2e42fbcc5d682c231c55ef5442c1ff66150c0f6556f6e3a97d094a84f51be15ec2432711d212eb60426659ce418f5fcadeaa3f601532c4e + languageName: node + linkType: hard + +"utf-8-validate@npm:5.0.7": + version: 5.0.7 + resolution: "utf-8-validate@npm:5.0.7" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 588d272b359bf555a0c4c2ffe97286edc73126de132f63f4f0c80110bd06b67d3ce44d2b3d24feea6da13ced50c04d774ba4d25fe28576371cd714cd013bd3b7 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: ^1.0.0 + core-util-is: 1.0.2 + extsprintf: ^1.2.0 + checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"wordwrapjs@npm:^4.0.0": + version: 4.0.1 + resolution: "wordwrapjs@npm:4.0.1" + dependencies: + reduce-flatten: ^2.0.0 + typical: ^5.2.0 + checksum: 3d927f3c95d0ad990968da54c0ad8cde2801d8e91006cd7474c26e6b742cc8557250ce495c9732b2f9db1f903601cb74ec282e0f122ee0d02d7abe81e150eea8 + languageName: node + linkType: hard + +"workerpool@npm:6.2.1": + version: 6.2.1 + resolution: "workerpool@npm:6.2.1" + checksum: c2c6eebbc5225f10f758d599a5c016fa04798bcc44e4c1dffb34050cd361d7be2e97891aa44419e7afe647b1f767b1dc0b85a5e046c409d890163f655028b09d + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"ws@npm:7.4.6": + version: 7.4.6 + resolution: "ws@npm:7.4.6" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 3a990b32ed08c72070d5e8913e14dfcd831919205be52a3ff0b4cdd998c8d554f167c9df3841605cde8b11d607768cacab3e823c58c96a5c08c987e093eb767a + languageName: node + linkType: hard + +"ws@npm:^7.4.6": + version: 7.5.9 + resolution: "ws@npm:7.5.9" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 + languageName: node + linkType: hard + +"xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.0": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml@npm:2.3.1": + version: 2.3.1 + resolution: "yaml@npm:2.3.1" + checksum: 2c7bc9a7cd4c9f40d3b0b0a98e370781b68b8b7c4515720869aced2b00d92f5da1762b4ffa947f9e795d6cd6b19f410bd4d15fdd38aca7bd96df59bd9486fb54 + languageName: node + linkType: hard + +"yargs-parser@npm:20.2.4": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs-unparser@npm:2.0.0": + version: 2.0.0 + resolution: "yargs-unparser@npm:2.0.0" + dependencies: + camelcase: ^6.0.0 + decamelize: ^4.0.0 + flat: ^5.0.2 + is-plain-obj: ^2.1.0 + checksum: 68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 + languageName: node + linkType: hard + +"yargs@npm:16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard + +"zksync-web3@npm:^0.14.3": + version: 0.14.4 + resolution: "zksync-web3@npm:0.14.4" + peerDependencies: + ethers: ^5.7.0 + checksum: f702a3437f48a8d42c4bb35b8dd13671a168aadfc4e23ce723d62959220ccb6bf9c529c60331fe5b91afaa622147c6a37490551474fe3e35c06ac476524b5160 + languageName: node + linkType: hard