Skip to content

Instantly share code, notes, and snippets.

@drunkirishcoder
Created January 2, 2024 13:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save drunkirishcoder/af0c040bd1510e970456897c6c88b845 to your computer and use it in GitHub Desktop.
Save drunkirishcoder/af0c040bd1510e970456897c6c88b845 to your computer and use it in GitHub Desktop.
deploy erc721
import { DfnsWallet } from '@dfns/lib-ethersjs6'
import { DfnsApiClient } from '@dfns/sdk'
import { AsymmetricKeySigner } from '@dfns/sdk-keysigner'
import dotenv from 'dotenv'
import { ContractFactory, JsonRpcProvider } from 'ethers'
dotenv.config()
const rpcProvider = new JsonRpcProvider(process.env.SEPOLIA_RPC_PROVIDER_URL!)
const initDfnsWallet = () => {
const signer = new AsymmetricKeySigner({
privateKey: process.env.DFNS_PRIVATE_KEY!,
credId: process.env.DFNS_CRED_ID!,
appOrigin: process.env.DFNS_APP_ORIGIN!,
})
const dfnsClient = new DfnsApiClient({
appId: process.env.DFNS_APP_ID!,
authToken: process.env.DFNS_AUTH_TOKEN!,
baseUrl: process.env.DFNS_API_URL!,
signer,
})
return new DfnsWallet({
walletId: 'wa-7dot3-2nbg9-g3rd0cqm4aal0qa',
retryInterval: 2000,
dfnsClient,
}).connect(rpcProvider)
}
const main = async () => {
const wallet = initDfnsWallet()
console.log('Using wallet address ' + (await wallet.getAddress()))
const factory = new ContractFactory(NFT_ABI, NFT_BYTECODE, wallet)
const contract = await factory.deploy()
console.log(await contract.getAddress())
console.log(contract.deploymentTransaction())
}
const NFT_ABI = [
{
inputs: [],
stateMutability: 'nonpayable',
type: 'constructor',
},
{
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: 'previousOwner',
type: 'address',
},
{
indexed: true,
internalType: 'address',
name: 'newOwner',
type: 'address',
},
],
name: 'OwnershipTransferred',
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',
},
{
inputs: [
{
internalType: 'address',
name: 'to',
type: 'address',
},
{
internalType: 'uint256',
name: 'tokenId',
type: 'uint256',
},
],
name: 'approve',
outputs: [],
stateMutability: 'nonpayable',
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: 'tokenId',
type: 'uint256',
},
],
name: 'getApproved',
outputs: [
{
internalType: 'address',
name: '',
type: 'address',
},
],
stateMutability: 'view',
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: [],
name: 'name',
outputs: [
{
internalType: 'string',
name: '',
type: 'string',
},
],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'owner',
outputs: [
{
internalType: 'address',
name: '',
type: 'address',
},
],
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: 'renounceOwnership',
outputs: [],
stateMutability: 'nonpayable',
type: 'function',
},
{
inputs: [
{
internalType: 'address',
name: 'to',
type: 'address',
},
],
name: 'safeMint',
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: '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: 'tokenId',
type: 'uint256',
},
],
name: 'tokenURI',
outputs: [
{
internalType: 'string',
name: '',
type: 'string',
},
],
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: [
{
internalType: 'address',
name: 'newOwner',
type: 'address',
},
],
name: 'transferOwnership',
outputs: [],
stateMutability: 'nonpayable',
type: 'function',
},
]
const NFT_BYTECODE =
'60806040523480156200001157600080fd5b506040518060400160405280600781526020017f4d757070657473000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4d5550504554530000000000000000000000000000000000000000000000000081525081600090816200008f919062000412565b508060019081620000a1919062000412565b505050620000c4620000b8620000ca60201b60201c565b620000d260201b60201c565b620004f9565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200021a57607f821691505b60208210810362000230576200022f620001d2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200029a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200025b565b620002a686836200025b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002f3620002ed620002e784620002be565b620002c8565b620002be565b9050919050565b6000819050919050565b6200030f83620002d2565b620003276200031e82620002fa565b84845462000268565b825550505050565b600090565b6200033e6200032f565b6200034b81848462000304565b505050565b5b8181101562000373576200036760008262000334565b60018101905062000351565b5050565b601f821115620003c2576200038c8162000236565b62000397846200024b565b81016020851015620003a7578190505b620003bf620003b6856200024b565b83018262000350565b50505b505050565b600082821c905092915050565b6000620003e760001984600802620003c7565b1980831691505092915050565b6000620004028383620003d4565b9150826002028217905092915050565b6200041d8262000198565b67ffffffffffffffff811115620004395762000438620001a3565b5b62000445825462000201565b6200045282828562000377565b600060209050601f8311600181146200048a576000841562000475578287015190505b620004818582620003f4565b865550620004f1565b601f1984166200049a8662000236565b60005b82811015620004c4578489015182556001820191506020850194506020810190506200049d565b86831015620004e45784890151620004e0601f891682620003d4565b8355505b6001600288020188555050505b505050505050565b6128a580620005096000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a22cb46511610071578063a22cb465146102a4578063b88d4fde146102c0578063c87b56dd146102dc578063e985e9c51461030c578063f2fde38b1461033c5761010b565b806370a082311461022e578063715018a61461025e5780638da5cb5b1461026857806395d89b41146102865761010b565b806323b872dd116100de57806323b872dd146101aa57806340d097c3146101c657806342842e0e146101e25780636352211e146101fe5761010b565b806301ffc9a71461011057806306fdde0314610140578063081812fc1461015e578063095ea7b31461018e575b600080fd5b61012a60048036038101906101259190611aa3565b610358565b6040516101379190611aeb565b60405180910390f35b61014861043a565b6040516101559190611b96565b60405180910390f35b61017860048036038101906101739190611bee565b6104cc565b6040516101859190611c5c565b60405180910390f35b6101a860048036038101906101a39190611ca3565b610512565b005b6101c460048036038101906101bf9190611ce3565b610629565b005b6101e060048036038101906101db9190611d36565b610689565b005b6101fc60048036038101906101f79190611ce3565b6106b7565b005b61021860048036038101906102139190611bee565b6106d7565b6040516102259190611c5c565b60405180910390f35b61024860048036038101906102439190611d36565b61075d565b6040516102559190611d72565b60405180910390f35b610266610814565b005b610270610828565b60405161027d9190611c5c565b60405180910390f35b61028e610852565b60405161029b9190611b96565b60405180910390f35b6102be60048036038101906102b99190611db9565b6108e4565b005b6102da60048036038101906102d59190611f2e565b6108fa565b005b6102f660048036038101906102f19190611bee565b61095c565b6040516103039190611b96565b60405180910390f35b61032660048036038101906103219190611fb1565b6109c4565b6040516103339190611aeb565b60405180910390f35b61035660048036038101906103519190611d36565b610a58565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061042357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610433575061043282610adb565b5b9050919050565b60606000805461044990612020565b80601f016020809104026020016040519081016040528092919081815260200182805461047590612020565b80156104c25780601f10610497576101008083540402835291602001916104c2565b820191906000526020600020905b8154815290600101906020018083116104a557829003601f168201915b5050505050905090565b60006104d782610b45565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061051d826106d7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361058d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610584906120c3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105ac610b90565b73ffffffffffffffffffffffffffffffffffffffff1614806105db57506105da816105d5610b90565b6109c4565b5b61061a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061190612155565b60405180910390fd5b6106248383610b98565b505050565b61063a610634610b90565b82610c51565b610679576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610670906121e7565b60405180910390fd5b610684838383610ce6565b505050565b610691610fdf565b600061069d600761105d565b90506106a9600761106b565b6106b38282611081565b5050565b6106d2838383604051806020016040528060008152506108fa565b505050565b6000806106e38361109f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074b90612253565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c4906122e5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61081c610fdf565b61082660006110dc565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461086190612020565b80601f016020809104026020016040519081016040528092919081815260200182805461088d90612020565b80156108da5780601f106108af576101008083540402835291602001916108da565b820191906000526020600020905b8154815290600101906020018083116108bd57829003601f168201915b5050505050905090565b6108f66108ef610b90565b83836111a2565b5050565b61090b610905610b90565b83610c51565b61094a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610941906121e7565b60405180910390fd5b6109568484848461130e565b50505050565b606061096782610b45565b600061097161136a565b9050600081511161099157604051806020016040528060008152506109bc565b8061099b846113a7565b6040516020016109ac929190612341565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a60610fdf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac6906123d7565b60405180910390fd5b610ad8816110dc565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610b4e81611475565b610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490612253565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610c0b836106d7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610c5d836106d7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c9f5750610c9e81856109c4565b5b80610cdd57508373ffffffffffffffffffffffffffffffffffffffff16610cc5846104cc565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610d06826106d7565b73ffffffffffffffffffffffffffffffffffffffff1614610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390612469565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc2906124fb565b60405180910390fd5b610dd883838360016114b6565b8273ffffffffffffffffffffffffffffffffffffffff16610df8826106d7565b73ffffffffffffffffffffffffffffffffffffffff1614610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4590612469565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610fda83838360016114bc565b505050565b610fe7610b90565b73ffffffffffffffffffffffffffffffffffffffff16611005610828565b73ffffffffffffffffffffffffffffffffffffffff161461105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290612567565b60405180910390fd5b565b600081600001549050919050565b6001816000016000828254019250508190555050565b61109b8282604051806020016040528060008152506114c2565b5050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611207906125d3565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113019190611aeb565b60405180910390a3505050565b611319848484610ce6565b6113258484848461151d565b611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90612665565b60405180910390fd5b50505050565b60606040518060400160405280601b81526020017f68747470733a2f2f6d7570706574732e6469736e65792e636f6d2f0000000000815250905090565b6060600060016113b6846116a4565b01905060008167ffffffffffffffff8111156113d5576113d4611e03565b5b6040519080825280601f01601f1916602001820160405280156114075781602001600182028036833780820191505090505b509050600082602001820190505b60011561146a578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161145e5761145d612685565b5b04945060008503611415575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166114978361109f565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b6114cc83836117f7565b6114d9600084848461151d565b611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90612665565b60405180910390fd5b505050565b600061153e8473ffffffffffffffffffffffffffffffffffffffff16611a14565b15611697578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611567610b90565b8786866040518563ffffffff1660e01b81526004016115899493929190612709565b6020604051808303816000875af19250505080156115c557506040513d601f19601f820116820180604052508101906115c2919061276a565b60015b611647573d80600081146115f5576040519150601f19603f3d011682016040523d82523d6000602084013e6115fa565b606091505b50600081510361163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690612665565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061169c565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611702577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816116f8576116f7612685565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061173f576d04ee2d6d415b85acef8100000000838161173557611734612685565b5b0492506020810190505b662386f26fc10000831061176e57662386f26fc10000838161176457611763612685565b5b0492506010810190505b6305f5e1008310611797576305f5e100838161178d5761178c612685565b5b0492506008810190505b61271083106117bc5761271083816117b2576117b1612685565b5b0492506004810190505b606483106117df57606483816117d5576117d4612685565b5b0492506002810190505b600a83106117ee576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d906127e3565b60405180910390fd5b61186f81611475565b156118af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a69061284f565b60405180910390fd5b6118bd6000838360016114b6565b6118c681611475565b15611906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fd9061284f565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a106000838360016114bc565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a8081611a4b565b8114611a8b57600080fd5b50565b600081359050611a9d81611a77565b92915050565b600060208284031215611ab957611ab8611a41565b5b6000611ac784828501611a8e565b91505092915050565b60008115159050919050565b611ae581611ad0565b82525050565b6000602082019050611b006000830184611adc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b40578082015181840152602081019050611b25565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b6882611b06565b611b728185611b11565b9350611b82818560208601611b22565b611b8b81611b4c565b840191505092915050565b60006020820190508181036000830152611bb08184611b5d565b905092915050565b6000819050919050565b611bcb81611bb8565b8114611bd657600080fd5b50565b600081359050611be881611bc2565b92915050565b600060208284031215611c0457611c03611a41565b5b6000611c1284828501611bd9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c4682611c1b565b9050919050565b611c5681611c3b565b82525050565b6000602082019050611c716000830184611c4d565b92915050565b611c8081611c3b565b8114611c8b57600080fd5b50565b600081359050611c9d81611c77565b92915050565b60008060408385031215611cba57611cb9611a41565b5b6000611cc885828601611c8e565b9250506020611cd985828601611bd9565b9150509250929050565b600080600060608486031215611cfc57611cfb611a41565b5b6000611d0a86828701611c8e565b9350506020611d1b86828701611c8e565b9250506040611d2c86828701611bd9565b9150509250925092565b600060208284031215611d4c57611d4b611a41565b5b6000611d5a84828501611c8e565b91505092915050565b611d6c81611bb8565b82525050565b6000602082019050611d876000830184611d63565b92915050565b611d9681611ad0565b8114611da157600080fd5b50565b600081359050611db381611d8d565b92915050565b60008060408385031215611dd057611dcf611a41565b5b6000611dde85828601611c8e565b9250506020611def85828601611da4565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611e3b82611b4c565b810181811067ffffffffffffffff82111715611e5a57611e59611e03565b5b80604052505050565b6000611e6d611a37565b9050611e798282611e32565b919050565b600067ffffffffffffffff821115611e9957611e98611e03565b5b611ea282611b4c565b9050602081019050919050565b82818337600083830152505050565b6000611ed1611ecc84611e7e565b611e63565b905082815260208101848484011115611eed57611eec611dfe565b5b611ef8848285611eaf565b509392505050565b600082601f830112611f1557611f14611df9565b5b8135611f25848260208601611ebe565b91505092915050565b60008060008060808587031215611f4857611f47611a41565b5b6000611f5687828801611c8e565b9450506020611f6787828801611c8e565b9350506040611f7887828801611bd9565b925050606085013567ffffffffffffffff811115611f9957611f98611a46565b5b611fa587828801611f00565b91505092959194509250565b60008060408385031215611fc857611fc7611a41565b5b6000611fd685828601611c8e565b9250506020611fe785828601611c8e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061203857607f821691505b60208210810361204b5761204a611ff1565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006120ad602183611b11565b91506120b882612051565b604082019050919050565b600060208201905081810360008301526120dc816120a0565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b600061213f603d83611b11565b915061214a826120e3565b604082019050919050565b6000602082019050818103600083015261216e81612132565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b60006121d1602d83611b11565b91506121dc82612175565b604082019050919050565b60006020820190508181036000830152612200816121c4565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061223d601883611b11565b915061224882612207565b602082019050919050565b6000602082019050818103600083015261226c81612230565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006122cf602983611b11565b91506122da82612273565b604082019050919050565b600060208201905081810360008301526122fe816122c2565b9050919050565b600081905092915050565b600061231b82611b06565b6123258185612305565b9350612335818560208601611b22565b80840191505092915050565b600061234d8285612310565b91506123598284612310565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123c1602683611b11565b91506123cc82612365565b604082019050919050565b600060208201905081810360008301526123f0816123b4565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612453602583611b11565b915061245e826123f7565b604082019050919050565b6000602082019050818103600083015261248281612446565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006124e5602483611b11565b91506124f082612489565b604082019050919050565b60006020820190508181036000830152612514816124d8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612551602083611b11565b915061255c8261251b565b602082019050919050565b6000602082019050818103600083015261258081612544565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006125bd601983611b11565b91506125c882612587565b602082019050919050565b600060208201905081810360008301526125ec816125b0565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061264f603283611b11565b915061265a826125f3565b604082019050919050565b6000602082019050818103600083015261267e81612642565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006126db826126b4565b6126e581856126bf565b93506126f5818560208601611b22565b6126fe81611b4c565b840191505092915050565b600060808201905061271e6000830187611c4d565b61272b6020830186611c4d565b6127386040830185611d63565b818103606083015261274a81846126d0565b905095945050505050565b60008151905061276481611a77565b92915050565b6000602082840312156127805761277f611a41565b5b600061278e84828501612755565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006127cd602083611b11565b91506127d882612797565b602082019050919050565b600060208201905081810360008301526127fc816127c0565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000612839601c83611b11565b915061284482612803565b602082019050919050565b600060208201905081810360008301526128688161282c565b905091905056fea2646970667358221220c0e94b21f7f9f63f611cab2e2e7bd80f68cfe1dfe5a73f0e246e70c217ecae9064736f6c63430008120033'
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment