commit 089dcefa52106552218679c8d3fd0e1cc407ad03 parent a9f3d3310b6de85a4bb71a343b3aced0dc1c0f96 Author: lash <dev@holbrook.no> Date: Sun, 18 Dec 2022 06:48:51 +0000 Add comments Diffstat:
M | js/contract/CraftNFT.bin | | | 4 | ++-- |
M | python/eth_craft_nft/data/CraftNFT.bin | | | 4 | ++-- |
M | solidity/CraftNFT.sol | | | 52 | ++++++++++++++++++++++++++++++++++++++++++++++------ |
3 files changed, 50 insertions(+), 10 deletions(-)
diff --git a/js/contract/CraftNFT.bin b/js/contract/CraftNFT.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b506040516200353f3803806200353f833981810160405281019062000037919062000236565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600690816200008891906200050c565b5080600790816200009a91906200050c565b505050620005f3565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200010c82620000c1565b810181811067ffffffffffffffff821117156200012e576200012d620000d2565b5b80604052505050565b600062000143620000a3565b905062000151828262000101565b919050565b600067ffffffffffffffff821115620001745762000173620000d2565b5b6200017f82620000c1565b9050602081019050919050565b60005b83811015620001ac5780820151818401526020810190506200018f565b60008484015250505050565b6000620001cf620001c98462000156565b62000137565b905082815260208101848484011115620001ee57620001ed620000bc565b5b620001fb8482856200018c565b509392505050565b600082601f8301126200021b576200021a620000b7565b5b81516200022d848260208601620001b8565b91505092915050565b6000806040838503121562000250576200024f620000ad565b5b600083015167ffffffffffffffff811115620002715762000270620000b2565b5b6200027f8582860162000203565b925050602083015167ffffffffffffffff811115620002a357620002a2620000b2565b5b620002b18582860162000203565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030e57607f821691505b602082108103620003245762000323620002c6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200034f565b6200039d86836200034f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003ea620003e4620003de84620003b5565b620003bf565b620003b5565b9050919050565b6000819050919050565b6200040683620003c9565b6200041e6200041582620003f1565b8484546200035f565b825550505050565b600090565b6200043562000426565b62000442818484620003fb565b505050565b5b818110156200046a576200045e6000826200042b565b60018101905062000448565b5050565b601f821115620004b95762000483816200032a565b6200048e846200033f565b810160208510156200049e578190505b620004b6620004ad856200033f565b83018262000447565b50505b505050565b60008160020a8304905092915050565b6000620004e160001984600802620004be565b1980831691505092915050565b6000620004fc8383620004ce565b9150826002028217905092915050565b6200051782620002bb565b67ffffffffffffffff811115620005335762000532620000d2565b5b6200053f8254620002f5565b6200054c8282856200046e565b600060209050601f8311600181146200058457600084156200056f578287015190505b6200057b8582620004ee565b865550620005eb565b601f19841662000594866200032a565b60005b82811015620005be5784890151825560018201915060208501945060208101905062000597565b86831015620005de5784890151620005da601f891682620004ce565b8355505b6001600288020188555050505b505050505050565b612f3c80620006036000396000f3fe608060405260043610610168576000357c0100000000000000000000000000000000000000000000000000000000900480636352211e116100d3578063b88d4fde1161008c578063b88d4fde1461051c578063bee2c0b514610538578063c87b56dd14610575578063c9796c39146105b2578063e985e9c5146105ef578063f9613ab21461062c57610168565b80636352211e146103e657806370a08231146104235780638da5cb5b1461046057806395d89b411461048b578063a22cb465146104b6578063adf288df146104df57610168565b806325cbaa181161012557806325cbaa18146102965780632c1369de146102d357806342842e0e146103105780634d03546a1461032c5780634f64b2be14610369578063559f5dc9146103a657610168565b806301ffc9a71461016d57806306fdde03146101aa578063081812fc146101d557806318160ddd1461021257806323b872dd1461023d57806324e0febc14610259575b600080fd5b34801561017957600080fd5b50610194600480360381019061018f919061246a565b610669565b6040516101a191906124b2565b60405180910390f35b3480156101b657600080fd5b506101bf61080f565b6040516101cc919061255d565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f791906125b5565b61089d565b6040516102099190612623565b60405180910390f35b34801561021e57600080fd5b506102276108da565b604051610234919061264d565b60405180910390f35b61025760048036038101906102529190612694565b6108e4565b005b34801561026557600080fd5b50610280600480360381019061027b919061271d565b610953565b60405161028d9190612759565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190612774565b61096b565b6040516102ca9190612759565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190612805565b610b16565b6040516103079190612759565b60405180910390f35b61032a60048036038101906103259190612694565b610c17565b005b34801561033857600080fd5b50610353600480360381019061034e919061286c565b610c86565b60405161036091906124b2565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b91906125b5565b610f5e565b60405161039d9190612759565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906128ac565b610f82565b6040516103dd94939291906128fb565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906125b5565b61100e565b60405161041a9190612623565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612940565b61104a565b604051610457919061264d565b60405180910390f35b34801561046c57600080fd5b50610475611051565b6040516104829190612623565b60405180910390f35b34801561049757600080fd5b506104a0611075565b6040516104ad919061255d565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612999565b611103565b005b3480156104eb57600080fd5b50610506600480360381019061050191906129d9565b6113a5565b6040516105139190612759565b60405180910390f35b61053660048036038101906105319190612b4e565b611507565b005b34801561054457600080fd5b5061055f600480360381019061055a9190612bd1565b6115de565b60405161056c9190612c3d565b60405180910390f35b34801561058157600080fd5b5061059c600480360381019061059791906125b5565b6116b1565b6040516105a9919061255d565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d4919061271d565b611761565b6040516105e6919061255d565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190612c58565b611d7c565b60405161062391906124b2565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e919061271d565b611e14565b6040516106609190612759565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106bd576001905061080a565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361070f576001905061080a565b63780e9d637c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610761576001905061080a565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107b3576001905061080a565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610805576001905061080a565b600090505b919050565b6006805461081c90612cc7565b80601f016020809104026020016040519081016040528092919081815260200182805461084890612cc7565b80156108955780601f1061086a57610100808354040283529160200191610895565b820191906000526020600020905b81548152906001019060200180831161087857829003601f168201915b505050505081565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600854905090565b60606108f284848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60036020528060005260406000206000915090505481565b60008060026000858152602001908152602001600020838154811061099357610992612cf8565b5b9060005260206000200190508060000160129054906101000a900460ff16156109bb57600080fd5b6000831480156109e9575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b15610a4857600181600001600c8282829054906101000a900465ffffffffffff16610a149190612d56565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550610a4085856113a5565b915050610b0f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa057600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff1681600001600c9054906101000a900465ffffffffffff1665ffffffffffff1610610ae857600080fd5b610b0b85858584600001600c9054906101000a900465ffffffffffff168561212a565b9150505b9392505050565b600080600260008681526020019081526020016000208481548110610b3e57610b3d612cf8565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba257600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610bcd57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610610bff57600080fd5b610c0c868686868561212a565b915050949350505050565b6060610c2584848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce457600080fd5b610cec6123bc565b600260008781526020019081526020016000208054905092506000831115610dbc57600060026000888152602001908152602001600020600081548110610d3657610d35612cf8565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610d6857600080fd5b60026000878152602001908152602001600020600184610d889190612d90565b81548110610d9957610d98612cf8565b5b9060005260206000200160000160069054906101000a900465ffffffffffff1691505b84816000019065ffffffffffff16908165ffffffffffff16815250508482610de49190612d56565b816020019065ffffffffffff16908165ffffffffffff168152505060026000878152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060608201518160000160126101000a81548160ff0219169083151502179055505050600186908060018154018082558091505060019003906000526020600020016000909190919091505560008565ffffffffffff1603610f3357600160086000828254610f279190612dc4565b92505081905550610f55565b8465ffffffffffff1660086000828254610f4d9190612dc4565b925050819055505b50505092915050565b60018181548110610f6e57600080fd5b906000526020600020016000915090505481565b60026020528160005260406000208181548110610f9e57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900465ffffffffffff16908060000160129054906101000a900460ff16905084565b600080600360008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6000919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6007805461108290612cc7565b80601f01602080910402602001604051908101604052809291908181526020018280546110ae90612cc7565b80156110fb5780601f106110d0576101008083540402835291602001916110fb565b820191906000526020600020905b8154815290600101906020018083116110de57829003601f168201915b505050505081565b801561122457600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a157600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061133c565b600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036112bc57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161139991906124b2565b60405180910390a35050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140357600080fd5b600160026000868152602001908152602001600020805490501461142657600080fd5b60006002600086815260200190815260200160002060008154811061144e5761144d612cf8565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461148057600080fd5b60006001026003600086815260200190815260200160002054146114a357600080fd5b8473ffffffffffffffffffffffffffffffffffffffff1691507fc00000000000000000000000000000000000000000000000000000000000000082179150816001026003600086815260200190815260200160002081905550839250505092915050565b61151384848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e60006001026040516115d09190612759565b60405180910390a450505050565b6000808290505b600260008681526020019081526020016000208054905081101561168557836fffffffffffffffffffffffffffffffff1660026000878152602001908152602001600020828154811061163b5761163a612cf8565b5b9060005260206000200160000160069054906101000a900465ffffffffffff1665ffffffffffff16111561167257809150506116aa565b808061167d90612df8565b9150506115e5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b9392505050565b606060003073ffffffffffffffffffffffffffffffffffffffff1663f9613ab2846001026040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161170d9190612759565b602060405180830381865afa15801561172a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190612e55565b905061175981611761565b915050919050565b606080600080604767ffffffffffffffff81111561178257611781612a23565b5b6040519080825280601f01601f1916602001820160405280156117b45781602001600182028036833780820191505090505b5092507f7300000000000000000000000000000000000000000000000000000000000000836000815181106117ec576117eb612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6800000000000000000000000000000000000000000000000000000000000000836001815181106118505761184f612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106118b4576118b3612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f32000000000000000000000000000000000000000000000000000000000000008360038151811061191857611917612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f35000000000000000000000000000000000000000000000000000000000000008360048151811061197c5761197b612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3600000000000000000000000000000000000000000000000000000000000000836005815181106119e0576119df612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a0000000000000000000000000000000000000000000000000000000000000083600681518110611a4457611a43612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b6020811015611d7057600460f0878360208110611a9a57611a99612cf8565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015611b7257603083611b099190612e8f565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110611b3e57611b3d612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611be4565b605783611b7f9190612e8f565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110611bb457611bb3612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110611bf957611bf8612cf8565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015611cd057603083611c5b9190612e8f565b7f01000000000000000000000000000000000000000000000000000000000000000284600184611c8b9190612dc4565b81518110611c9c57611c9b612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d4e565b605783611cdd9190612e8f565b7f01000000000000000000000000000000000000000000000000000000000000000284600184611d0d9190612dc4565b81518110611d1e57611d1d612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282611d5b9190612dc4565b91508080611d6890612df8565b915050611a7a565b50829350505050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008060036000848152602001908152602001600020549050611e36816122c7565b611e3f57600080fd5b611e48816122f9565b15611e565782915050611ebb565b7effffffffff00000000000000000000000000000000000000000000000000006001028116905060d081908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611f17919061264d565b602060405180830381865afa158015611f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f589190612ed9565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f9257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146120c6573373ffffffffffffffffffffffffffffffffffffffff166004600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806120bc57503373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6120c557600080fd5b5b60006004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612123838561232b565b5050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000088600190041692506014879060020a02831792508565ffffffffffff1683179250826001029050600060010260036000838152602001908152602001600020541461219b57600080fd5b8460000160129054906101000a900460ff166121fd5784600001600c9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16146121fc5760018560000160126101000a81548160ff0219169083151502179055505b5b64ffffffffff886001900416915060d0829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff1682179150600185600001600c8282829054906101000a900465ffffffffffff1661227b9190612d56565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555081600102600360008381526020019081526020016000208190555080935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b60008083600102905060036000828152602001908152602001600020546001900491506000820361235b57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600360008381526020019081526020016000208190555050505050565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61244781612412565b811461245257600080fd5b50565b6000813590506124648161243e565b92915050565b6000602082840312156124805761247f612408565b5b600061248e84828501612455565b91505092915050565b60008115159050919050565b6124ac81612497565b82525050565b60006020820190506124c760008301846124a3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125075780820151818401526020810190506124ec565b60008484015250505050565b6000601f19601f8301169050919050565b600061252f826124cd565b61253981856124d8565b93506125498185602086016124e9565b61255281612513565b840191505092915050565b600060208201905081810360008301526125778184612524565b905092915050565b6000819050919050565b6125928161257f565b811461259d57600080fd5b50565b6000813590506125af81612589565b92915050565b6000602082840312156125cb576125ca612408565b5b60006125d9848285016125a0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061260d826125e2565b9050919050565b61261d81612602565b82525050565b60006020820190506126386000830184612614565b92915050565b6126478161257f565b82525050565b6000602082019050612662600083018461263e565b92915050565b61267181612602565b811461267c57600080fd5b50565b60008135905061268e81612668565b92915050565b6000806000606084860312156126ad576126ac612408565b5b60006126bb8682870161267f565b93505060206126cc8682870161267f565b92505060406126dd868287016125a0565b9150509250925092565b6000819050919050565b6126fa816126e7565b811461270557600080fd5b50565b600081359050612717816126f1565b92915050565b60006020828403121561273357612732612408565b5b600061274184828501612708565b91505092915050565b612753816126e7565b82525050565b600060208201905061276e600083018461274a565b92915050565b60008060006060848603121561278d5761278c612408565b5b600061279b8682870161267f565b93505060206127ac86828701612708565b92505060406127bd868287016125a0565b9150509250925092565b600065ffffffffffff82169050919050565b6127e2816127c7565b81146127ed57600080fd5b50565b6000813590506127ff816127d9565b92915050565b6000806000806080858703121561281f5761281e612408565b5b600061282d8782880161267f565b945050602061283e87828801612708565b935050604061284f878288016125a0565b9250506060612860878288016127f0565b91505092959194509250565b6000806040838503121561288357612882612408565b5b600061289185828601612708565b92505060206128a2858286016127f0565b9150509250929050565b600080604083850312156128c3576128c2612408565b5b60006128d185828601612708565b92505060206128e2858286016125a0565b9150509250929050565b6128f5816127c7565b82525050565b600060808201905061291060008301876128ec565b61291d60208301866128ec565b61292a60408301856128ec565b61293760608301846124a3565b95945050505050565b60006020828403121561295657612955612408565b5b60006129648482850161267f565b91505092915050565b61297681612497565b811461298157600080fd5b50565b6000813590506129938161296d565b92915050565b600080604083850312156129b0576129af612408565b5b60006129be8582860161267f565b92505060206129cf85828601612984565b9150509250929050565b600080604083850312156129f0576129ef612408565b5b60006129fe8582860161267f565b9250506020612a0f85828601612708565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612a5b82612513565b810181811067ffffffffffffffff82111715612a7a57612a79612a23565b5b80604052505050565b6000612a8d6123fe565b9050612a998282612a52565b919050565b600067ffffffffffffffff821115612ab957612ab8612a23565b5b612ac282612513565b9050602081019050919050565b82818337600083830152505050565b6000612af1612aec84612a9e565b612a83565b905082815260208101848484011115612b0d57612b0c612a1e565b5b612b18848285612acf565b509392505050565b600082601f830112612b3557612b34612a19565b5b8135612b45848260208601612ade565b91505092915050565b60008060008060808587031215612b6857612b67612408565b5b6000612b768782880161267f565b9450506020612b878782880161267f565b9350506040612b98878288016125a0565b925050606085013567ffffffffffffffff811115612bb957612bb861240d565b5b612bc587828801612b20565b91505092959194509250565b600080600060608486031215612bea57612be9612408565b5b6000612bf886828701612708565b9350506020612c09868287016125a0565b9250506040612c1a868287016125a0565b9150509250925092565b6000819050919050565b612c3781612c24565b82525050565b6000602082019050612c526000830184612c2e565b92915050565b60008060408385031215612c6f57612c6e612408565b5b6000612c7d8582860161267f565b9250506020612c8e8582860161267f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cdf57607f821691505b602082108103612cf257612cf1612c98565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d61826127c7565b9150612d6c836127c7565b9250828201905065ffffffffffff811115612d8a57612d89612d27565b5b92915050565b6000612d9b8261257f565b9150612da68361257f565b9250828203905081811115612dbe57612dbd612d27565b5b92915050565b6000612dcf8261257f565b9150612dda8361257f565b9250828201905080821115612df257612df1612d27565b5b92915050565b6000612e038261257f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e3557612e34612d27565b5b600182019050919050565b600081519050612e4f816126f1565b92915050565b600060208284031215612e6b57612e6a612408565b5b6000612e7984828501612e40565b91505092915050565b600060ff82169050919050565b6000612e9a82612e82565b9150612ea583612e82565b9250828201905060ff811115612ebe57612ebd612d27565b5b92915050565b600081519050612ed381612668565b92915050565b600060208284031215612eef57612eee612408565b5b6000612efd84828501612ec4565b9150509291505056fea2646970667358221220a62f827589f16aecc656da96e430b2614d60fe5c431eea0396000834def84cf064736f6c63430008110033 -\ No newline at end of file +60806040523480156200001157600080fd5b506040516200353f3803806200353f833981810160405281019062000037919062000236565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600690816200008891906200050c565b5080600790816200009a91906200050c565b505050620005f3565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200010c82620000c1565b810181811067ffffffffffffffff821117156200012e576200012d620000d2565b5b80604052505050565b600062000143620000a3565b905062000151828262000101565b919050565b600067ffffffffffffffff821115620001745762000173620000d2565b5b6200017f82620000c1565b9050602081019050919050565b60005b83811015620001ac5780820151818401526020810190506200018f565b60008484015250505050565b6000620001cf620001c98462000156565b62000137565b905082815260208101848484011115620001ee57620001ed620000bc565b5b620001fb8482856200018c565b509392505050565b600082601f8301126200021b576200021a620000b7565b5b81516200022d848260208601620001b8565b91505092915050565b6000806040838503121562000250576200024f620000ad565b5b600083015167ffffffffffffffff811115620002715762000270620000b2565b5b6200027f8582860162000203565b925050602083015167ffffffffffffffff811115620002a357620002a2620000b2565b5b620002b18582860162000203565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030e57607f821691505b602082108103620003245762000323620002c6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200034f565b6200039d86836200034f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003ea620003e4620003de84620003b5565b620003bf565b620003b5565b9050919050565b6000819050919050565b6200040683620003c9565b6200041e6200041582620003f1565b8484546200035f565b825550505050565b600090565b6200043562000426565b62000442818484620003fb565b505050565b5b818110156200046a576200045e6000826200042b565b60018101905062000448565b5050565b601f821115620004b95762000483816200032a565b6200048e846200033f565b810160208510156200049e578190505b620004b6620004ad856200033f565b83018262000447565b50505b505050565b60008160020a8304905092915050565b6000620004e160001984600802620004be565b1980831691505092915050565b6000620004fc8383620004ce565b9150826002028217905092915050565b6200051782620002bb565b67ffffffffffffffff811115620005335762000532620000d2565b5b6200053f8254620002f5565b6200054c8282856200046e565b600060209050601f8311600181146200058457600084156200056f578287015190505b6200057b8582620004ee565b865550620005eb565b601f19841662000594866200032a565b60005b82811015620005be5784890151825560018201915060208501945060208101905062000597565b86831015620005de5784890151620005da601f891682620004ce565b8355505b6001600288020188555050505b505050505050565b612f3c80620006036000396000f3fe608060405260043610610168576000357c0100000000000000000000000000000000000000000000000000000000900480636352211e116100d3578063b88d4fde1161008c578063b88d4fde1461051c578063bee2c0b514610538578063c87b56dd14610575578063c9796c39146105b2578063e985e9c5146105ef578063f9613ab21461062c57610168565b80636352211e146103e657806370a08231146104235780638da5cb5b1461046057806395d89b411461048b578063a22cb465146104b6578063adf288df146104df57610168565b806325cbaa181161012557806325cbaa18146102965780632c1369de146102d357806342842e0e146103105780634d03546a1461032c5780634f64b2be14610369578063559f5dc9146103a657610168565b806301ffc9a71461016d57806306fdde03146101aa578063081812fc146101d557806318160ddd1461021257806323b872dd1461023d57806324e0febc14610259575b600080fd5b34801561017957600080fd5b50610194600480360381019061018f919061246a565b610669565b6040516101a191906124b2565b60405180910390f35b3480156101b657600080fd5b506101bf61080f565b6040516101cc919061255d565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f791906125b5565b61089d565b6040516102099190612623565b60405180910390f35b34801561021e57600080fd5b506102276108da565b604051610234919061264d565b60405180910390f35b61025760048036038101906102529190612694565b6108e4565b005b34801561026557600080fd5b50610280600480360381019061027b919061271d565b610953565b60405161028d9190612759565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190612774565b61096b565b6040516102ca9190612759565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190612805565b610b16565b6040516103079190612759565b60405180910390f35b61032a60048036038101906103259190612694565b610c17565b005b34801561033857600080fd5b50610353600480360381019061034e919061286c565b610c86565b60405161036091906124b2565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b91906125b5565b610f5e565b60405161039d9190612759565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906128ac565b610f82565b6040516103dd94939291906128fb565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906125b5565b61100e565b60405161041a9190612623565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612940565b61104a565b604051610457919061264d565b60405180910390f35b34801561046c57600080fd5b50610475611051565b6040516104829190612623565b60405180910390f35b34801561049757600080fd5b506104a0611075565b6040516104ad919061255d565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612999565b611103565b005b3480156104eb57600080fd5b50610506600480360381019061050191906129d9565b6113a5565b6040516105139190612759565b60405180910390f35b61053660048036038101906105319190612b4e565b611507565b005b34801561054457600080fd5b5061055f600480360381019061055a9190612bd1565b6115de565b60405161056c9190612c3d565b60405180910390f35b34801561058157600080fd5b5061059c600480360381019061059791906125b5565b6116b1565b6040516105a9919061255d565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d4919061271d565b611761565b6040516105e6919061255d565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190612c58565b611d7c565b60405161062391906124b2565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e919061271d565b611e14565b6040516106609190612759565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106bd576001905061080a565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361070f576001905061080a565b63780e9d637c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610761576001905061080a565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107b3576001905061080a565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610805576001905061080a565b600090505b919050565b6006805461081c90612cc7565b80601f016020809104026020016040519081016040528092919081815260200182805461084890612cc7565b80156108955780601f1061086a57610100808354040283529160200191610895565b820191906000526020600020905b81548152906001019060200180831161087857829003601f168201915b505050505081565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600854905090565b60606108f284848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60036020528060005260406000206000915090505481565b60008060026000858152602001908152602001600020838154811061099357610992612cf8565b5b9060005260206000200190508060000160129054906101000a900460ff16156109bb57600080fd5b6000831480156109e9575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b15610a4857600181600001600c8282829054906101000a900465ffffffffffff16610a149190612d56565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550610a4085856113a5565b915050610b0f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa057600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff1681600001600c9054906101000a900465ffffffffffff1665ffffffffffff1610610ae857600080fd5b610b0b85858584600001600c9054906101000a900465ffffffffffff168561212a565b9150505b9392505050565b600080600260008681526020019081526020016000208481548110610b3e57610b3d612cf8565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba257600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610bcd57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610610bff57600080fd5b610c0c868686868561212a565b915050949350505050565b6060610c2584848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce457600080fd5b610cec6123bc565b600260008781526020019081526020016000208054905092506000831115610dbc57600060026000888152602001908152602001600020600081548110610d3657610d35612cf8565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610d6857600080fd5b60026000878152602001908152602001600020600184610d889190612d90565b81548110610d9957610d98612cf8565b5b9060005260206000200160000160069054906101000a900465ffffffffffff1691505b84816000019065ffffffffffff16908165ffffffffffff16815250508482610de49190612d56565b816020019065ffffffffffff16908165ffffffffffff168152505060026000878152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060608201518160000160126101000a81548160ff0219169083151502179055505050600186908060018154018082558091505060019003906000526020600020016000909190919091505560008565ffffffffffff1603610f3357600160086000828254610f279190612dc4565b92505081905550610f55565b8465ffffffffffff1660086000828254610f4d9190612dc4565b925050819055505b50505092915050565b60018181548110610f6e57600080fd5b906000526020600020016000915090505481565b60026020528160005260406000208181548110610f9e57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900465ffffffffffff16908060000160129054906101000a900460ff16905084565b600080600360008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6000919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6007805461108290612cc7565b80601f01602080910402602001604051908101604052809291908181526020018280546110ae90612cc7565b80156110fb5780601f106110d0576101008083540402835291602001916110fb565b820191906000526020600020905b8154815290600101906020018083116110de57829003601f168201915b505050505081565b801561122457600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a157600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061133c565b600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036112bc57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161139991906124b2565b60405180910390a35050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140357600080fd5b600160026000868152602001908152602001600020805490501461142657600080fd5b60006002600086815260200190815260200160002060008154811061144e5761144d612cf8565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461148057600080fd5b60006001026003600086815260200190815260200160002054146114a357600080fd5b8473ffffffffffffffffffffffffffffffffffffffff1691507fc00000000000000000000000000000000000000000000000000000000000000082179150816001026003600086815260200190815260200160002081905550839250505092915050565b61151384848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e60006001026040516115d09190612759565b60405180910390a450505050565b6000808290505b600260008681526020019081526020016000208054905081101561168557836fffffffffffffffffffffffffffffffff1660026000878152602001908152602001600020828154811061163b5761163a612cf8565b5b9060005260206000200160000160069054906101000a900465ffffffffffff1665ffffffffffff16111561167257809150506116aa565b808061167d90612df8565b9150506115e5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b9392505050565b606060003073ffffffffffffffffffffffffffffffffffffffff1663f9613ab2846001026040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161170d9190612759565b602060405180830381865afa15801561172a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190612e55565b905061175981611761565b915050919050565b606080600080604767ffffffffffffffff81111561178257611781612a23565b5b6040519080825280601f01601f1916602001820160405280156117b45781602001600182028036833780820191505090505b5092507f7300000000000000000000000000000000000000000000000000000000000000836000815181106117ec576117eb612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6800000000000000000000000000000000000000000000000000000000000000836001815181106118505761184f612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106118b4576118b3612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f32000000000000000000000000000000000000000000000000000000000000008360038151811061191857611917612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f35000000000000000000000000000000000000000000000000000000000000008360048151811061197c5761197b612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3600000000000000000000000000000000000000000000000000000000000000836005815181106119e0576119df612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a0000000000000000000000000000000000000000000000000000000000000083600681518110611a4457611a43612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b6020811015611d7057600460f0878360208110611a9a57611a99612cf8565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015611b7257603083611b099190612e8f565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110611b3e57611b3d612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611be4565b605783611b7f9190612e8f565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110611bb457611bb3612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110611bf957611bf8612cf8565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015611cd057603083611c5b9190612e8f565b7f01000000000000000000000000000000000000000000000000000000000000000284600184611c8b9190612dc4565b81518110611c9c57611c9b612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d4e565b605783611cdd9190612e8f565b7f01000000000000000000000000000000000000000000000000000000000000000284600184611d0d9190612dc4565b81518110611d1e57611d1d612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282611d5b9190612dc4565b91508080611d6890612df8565b915050611a7a565b50829350505050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008060036000848152602001908152602001600020549050611e36816122c7565b611e3f57600080fd5b611e48816122f9565b15611e565782915050611ebb565b7effffffffff00000000000000000000000000000000000000000000000000006001028116905060d081908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611f17919061264d565b602060405180830381865afa158015611f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f589190612ed9565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f9257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146120c6573373ffffffffffffffffffffffffffffffffffffffff166004600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806120bc57503373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6120c557600080fd5b5b60006004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612123838561232b565b5050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000088600190041692506014879060020a02831792508565ffffffffffff1683179250826001029050600060010260036000838152602001908152602001600020541461219b57600080fd5b8460000160129054906101000a900460ff166121fd5784600001600c9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16146121fc5760018560000160126101000a81548160ff0219169083151502179055505b5b64ffffffffff886001900416915060d0829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff1682179150600185600001600c8282829054906101000a900465ffffffffffff1661227b9190612d56565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555081600102600360008381526020019081526020016000208190555080935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b60008083600102905060036000828152602001908152602001600020546001900491506000820361235b57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600360008381526020019081526020016000208190555050505050565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61244781612412565b811461245257600080fd5b50565b6000813590506124648161243e565b92915050565b6000602082840312156124805761247f612408565b5b600061248e84828501612455565b91505092915050565b60008115159050919050565b6124ac81612497565b82525050565b60006020820190506124c760008301846124a3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125075780820151818401526020810190506124ec565b60008484015250505050565b6000601f19601f8301169050919050565b600061252f826124cd565b61253981856124d8565b93506125498185602086016124e9565b61255281612513565b840191505092915050565b600060208201905081810360008301526125778184612524565b905092915050565b6000819050919050565b6125928161257f565b811461259d57600080fd5b50565b6000813590506125af81612589565b92915050565b6000602082840312156125cb576125ca612408565b5b60006125d9848285016125a0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061260d826125e2565b9050919050565b61261d81612602565b82525050565b60006020820190506126386000830184612614565b92915050565b6126478161257f565b82525050565b6000602082019050612662600083018461263e565b92915050565b61267181612602565b811461267c57600080fd5b50565b60008135905061268e81612668565b92915050565b6000806000606084860312156126ad576126ac612408565b5b60006126bb8682870161267f565b93505060206126cc8682870161267f565b92505060406126dd868287016125a0565b9150509250925092565b6000819050919050565b6126fa816126e7565b811461270557600080fd5b50565b600081359050612717816126f1565b92915050565b60006020828403121561273357612732612408565b5b600061274184828501612708565b91505092915050565b612753816126e7565b82525050565b600060208201905061276e600083018461274a565b92915050565b60008060006060848603121561278d5761278c612408565b5b600061279b8682870161267f565b93505060206127ac86828701612708565b92505060406127bd868287016125a0565b9150509250925092565b600065ffffffffffff82169050919050565b6127e2816127c7565b81146127ed57600080fd5b50565b6000813590506127ff816127d9565b92915050565b6000806000806080858703121561281f5761281e612408565b5b600061282d8782880161267f565b945050602061283e87828801612708565b935050604061284f878288016125a0565b9250506060612860878288016127f0565b91505092959194509250565b6000806040838503121561288357612882612408565b5b600061289185828601612708565b92505060206128a2858286016127f0565b9150509250929050565b600080604083850312156128c3576128c2612408565b5b60006128d185828601612708565b92505060206128e2858286016125a0565b9150509250929050565b6128f5816127c7565b82525050565b600060808201905061291060008301876128ec565b61291d60208301866128ec565b61292a60408301856128ec565b61293760608301846124a3565b95945050505050565b60006020828403121561295657612955612408565b5b60006129648482850161267f565b91505092915050565b61297681612497565b811461298157600080fd5b50565b6000813590506129938161296d565b92915050565b600080604083850312156129b0576129af612408565b5b60006129be8582860161267f565b92505060206129cf85828601612984565b9150509250929050565b600080604083850312156129f0576129ef612408565b5b60006129fe8582860161267f565b9250506020612a0f85828601612708565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612a5b82612513565b810181811067ffffffffffffffff82111715612a7a57612a79612a23565b5b80604052505050565b6000612a8d6123fe565b9050612a998282612a52565b919050565b600067ffffffffffffffff821115612ab957612ab8612a23565b5b612ac282612513565b9050602081019050919050565b82818337600083830152505050565b6000612af1612aec84612a9e565b612a83565b905082815260208101848484011115612b0d57612b0c612a1e565b5b612b18848285612acf565b509392505050565b600082601f830112612b3557612b34612a19565b5b8135612b45848260208601612ade565b91505092915050565b60008060008060808587031215612b6857612b67612408565b5b6000612b768782880161267f565b9450506020612b878782880161267f565b9350506040612b98878288016125a0565b925050606085013567ffffffffffffffff811115612bb957612bb861240d565b5b612bc587828801612b20565b91505092959194509250565b600080600060608486031215612bea57612be9612408565b5b6000612bf886828701612708565b9350506020612c09868287016125a0565b9250506040612c1a868287016125a0565b9150509250925092565b6000819050919050565b612c3781612c24565b82525050565b6000602082019050612c526000830184612c2e565b92915050565b60008060408385031215612c6f57612c6e612408565b5b6000612c7d8582860161267f565b9250506020612c8e8582860161267f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cdf57607f821691505b602082108103612cf257612cf1612c98565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d61826127c7565b9150612d6c836127c7565b9250828201905065ffffffffffff811115612d8a57612d89612d27565b5b92915050565b6000612d9b8261257f565b9150612da68361257f565b9250828203905081811115612dbe57612dbd612d27565b5b92915050565b6000612dcf8261257f565b9150612dda8361257f565b9250828201905080821115612df257612df1612d27565b5b92915050565b6000612e038261257f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e3557612e34612d27565b5b600182019050919050565b600081519050612e4f816126f1565b92915050565b600060208284031215612e6b57612e6a612408565b5b6000612e7984828501612e40565b91505092915050565b600060ff82169050919050565b6000612e9a82612e82565b9150612ea583612e82565b9250828201905060ff811115612ebe57612ebd612d27565b5b92915050565b600081519050612ed381612668565b92915050565b600060208284031215612eef57612eee612408565b5b6000612efd84828501612ec4565b9150509291505056fea2646970667358221220187736cd9eafc580409730b9da69260cd5c75e9cf78ae7b87ac8e71d85b743e564736f6c63430008110033 +\ No newline at end of file diff --git a/python/eth_craft_nft/data/CraftNFT.bin b/python/eth_craft_nft/data/CraftNFT.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b506040516200353f3803806200353f833981810160405281019062000037919062000236565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600690816200008891906200050c565b5080600790816200009a91906200050c565b505050620005f3565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200010c82620000c1565b810181811067ffffffffffffffff821117156200012e576200012d620000d2565b5b80604052505050565b600062000143620000a3565b905062000151828262000101565b919050565b600067ffffffffffffffff821115620001745762000173620000d2565b5b6200017f82620000c1565b9050602081019050919050565b60005b83811015620001ac5780820151818401526020810190506200018f565b60008484015250505050565b6000620001cf620001c98462000156565b62000137565b905082815260208101848484011115620001ee57620001ed620000bc565b5b620001fb8482856200018c565b509392505050565b600082601f8301126200021b576200021a620000b7565b5b81516200022d848260208601620001b8565b91505092915050565b6000806040838503121562000250576200024f620000ad565b5b600083015167ffffffffffffffff811115620002715762000270620000b2565b5b6200027f8582860162000203565b925050602083015167ffffffffffffffff811115620002a357620002a2620000b2565b5b620002b18582860162000203565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030e57607f821691505b602082108103620003245762000323620002c6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200034f565b6200039d86836200034f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003ea620003e4620003de84620003b5565b620003bf565b620003b5565b9050919050565b6000819050919050565b6200040683620003c9565b6200041e6200041582620003f1565b8484546200035f565b825550505050565b600090565b6200043562000426565b62000442818484620003fb565b505050565b5b818110156200046a576200045e6000826200042b565b60018101905062000448565b5050565b601f821115620004b95762000483816200032a565b6200048e846200033f565b810160208510156200049e578190505b620004b6620004ad856200033f565b83018262000447565b50505b505050565b60008160020a8304905092915050565b6000620004e160001984600802620004be565b1980831691505092915050565b6000620004fc8383620004ce565b9150826002028217905092915050565b6200051782620002bb565b67ffffffffffffffff811115620005335762000532620000d2565b5b6200053f8254620002f5565b6200054c8282856200046e565b600060209050601f8311600181146200058457600084156200056f578287015190505b6200057b8582620004ee565b865550620005eb565b601f19841662000594866200032a565b60005b82811015620005be5784890151825560018201915060208501945060208101905062000597565b86831015620005de5784890151620005da601f891682620004ce565b8355505b6001600288020188555050505b505050505050565b612f3c80620006036000396000f3fe608060405260043610610168576000357c0100000000000000000000000000000000000000000000000000000000900480636352211e116100d3578063b88d4fde1161008c578063b88d4fde1461051c578063bee2c0b514610538578063c87b56dd14610575578063c9796c39146105b2578063e985e9c5146105ef578063f9613ab21461062c57610168565b80636352211e146103e657806370a08231146104235780638da5cb5b1461046057806395d89b411461048b578063a22cb465146104b6578063adf288df146104df57610168565b806325cbaa181161012557806325cbaa18146102965780632c1369de146102d357806342842e0e146103105780634d03546a1461032c5780634f64b2be14610369578063559f5dc9146103a657610168565b806301ffc9a71461016d57806306fdde03146101aa578063081812fc146101d557806318160ddd1461021257806323b872dd1461023d57806324e0febc14610259575b600080fd5b34801561017957600080fd5b50610194600480360381019061018f919061246a565b610669565b6040516101a191906124b2565b60405180910390f35b3480156101b657600080fd5b506101bf61080f565b6040516101cc919061255d565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f791906125b5565b61089d565b6040516102099190612623565b60405180910390f35b34801561021e57600080fd5b506102276108da565b604051610234919061264d565b60405180910390f35b61025760048036038101906102529190612694565b6108e4565b005b34801561026557600080fd5b50610280600480360381019061027b919061271d565b610953565b60405161028d9190612759565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190612774565b61096b565b6040516102ca9190612759565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190612805565b610b16565b6040516103079190612759565b60405180910390f35b61032a60048036038101906103259190612694565b610c17565b005b34801561033857600080fd5b50610353600480360381019061034e919061286c565b610c86565b60405161036091906124b2565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b91906125b5565b610f5e565b60405161039d9190612759565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906128ac565b610f82565b6040516103dd94939291906128fb565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906125b5565b61100e565b60405161041a9190612623565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612940565b61104a565b604051610457919061264d565b60405180910390f35b34801561046c57600080fd5b50610475611051565b6040516104829190612623565b60405180910390f35b34801561049757600080fd5b506104a0611075565b6040516104ad919061255d565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612999565b611103565b005b3480156104eb57600080fd5b50610506600480360381019061050191906129d9565b6113a5565b6040516105139190612759565b60405180910390f35b61053660048036038101906105319190612b4e565b611507565b005b34801561054457600080fd5b5061055f600480360381019061055a9190612bd1565b6115de565b60405161056c9190612c3d565b60405180910390f35b34801561058157600080fd5b5061059c600480360381019061059791906125b5565b6116b1565b6040516105a9919061255d565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d4919061271d565b611761565b6040516105e6919061255d565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190612c58565b611d7c565b60405161062391906124b2565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e919061271d565b611e14565b6040516106609190612759565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106bd576001905061080a565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361070f576001905061080a565b63780e9d637c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610761576001905061080a565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107b3576001905061080a565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610805576001905061080a565b600090505b919050565b6006805461081c90612cc7565b80601f016020809104026020016040519081016040528092919081815260200182805461084890612cc7565b80156108955780601f1061086a57610100808354040283529160200191610895565b820191906000526020600020905b81548152906001019060200180831161087857829003601f168201915b505050505081565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600854905090565b60606108f284848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60036020528060005260406000206000915090505481565b60008060026000858152602001908152602001600020838154811061099357610992612cf8565b5b9060005260206000200190508060000160129054906101000a900460ff16156109bb57600080fd5b6000831480156109e9575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b15610a4857600181600001600c8282829054906101000a900465ffffffffffff16610a149190612d56565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550610a4085856113a5565b915050610b0f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa057600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff1681600001600c9054906101000a900465ffffffffffff1665ffffffffffff1610610ae857600080fd5b610b0b85858584600001600c9054906101000a900465ffffffffffff168561212a565b9150505b9392505050565b600080600260008681526020019081526020016000208481548110610b3e57610b3d612cf8565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba257600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610bcd57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610610bff57600080fd5b610c0c868686868561212a565b915050949350505050565b6060610c2584848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce457600080fd5b610cec6123bc565b600260008781526020019081526020016000208054905092506000831115610dbc57600060026000888152602001908152602001600020600081548110610d3657610d35612cf8565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610d6857600080fd5b60026000878152602001908152602001600020600184610d889190612d90565b81548110610d9957610d98612cf8565b5b9060005260206000200160000160069054906101000a900465ffffffffffff1691505b84816000019065ffffffffffff16908165ffffffffffff16815250508482610de49190612d56565b816020019065ffffffffffff16908165ffffffffffff168152505060026000878152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060608201518160000160126101000a81548160ff0219169083151502179055505050600186908060018154018082558091505060019003906000526020600020016000909190919091505560008565ffffffffffff1603610f3357600160086000828254610f279190612dc4565b92505081905550610f55565b8465ffffffffffff1660086000828254610f4d9190612dc4565b925050819055505b50505092915050565b60018181548110610f6e57600080fd5b906000526020600020016000915090505481565b60026020528160005260406000208181548110610f9e57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900465ffffffffffff16908060000160129054906101000a900460ff16905084565b600080600360008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6000919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6007805461108290612cc7565b80601f01602080910402602001604051908101604052809291908181526020018280546110ae90612cc7565b80156110fb5780601f106110d0576101008083540402835291602001916110fb565b820191906000526020600020905b8154815290600101906020018083116110de57829003601f168201915b505050505081565b801561122457600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a157600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061133c565b600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036112bc57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161139991906124b2565b60405180910390a35050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140357600080fd5b600160026000868152602001908152602001600020805490501461142657600080fd5b60006002600086815260200190815260200160002060008154811061144e5761144d612cf8565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461148057600080fd5b60006001026003600086815260200190815260200160002054146114a357600080fd5b8473ffffffffffffffffffffffffffffffffffffffff1691507fc00000000000000000000000000000000000000000000000000000000000000082179150816001026003600086815260200190815260200160002081905550839250505092915050565b61151384848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e60006001026040516115d09190612759565b60405180910390a450505050565b6000808290505b600260008681526020019081526020016000208054905081101561168557836fffffffffffffffffffffffffffffffff1660026000878152602001908152602001600020828154811061163b5761163a612cf8565b5b9060005260206000200160000160069054906101000a900465ffffffffffff1665ffffffffffff16111561167257809150506116aa565b808061167d90612df8565b9150506115e5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b9392505050565b606060003073ffffffffffffffffffffffffffffffffffffffff1663f9613ab2846001026040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161170d9190612759565b602060405180830381865afa15801561172a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190612e55565b905061175981611761565b915050919050565b606080600080604767ffffffffffffffff81111561178257611781612a23565b5b6040519080825280601f01601f1916602001820160405280156117b45781602001600182028036833780820191505090505b5092507f7300000000000000000000000000000000000000000000000000000000000000836000815181106117ec576117eb612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6800000000000000000000000000000000000000000000000000000000000000836001815181106118505761184f612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106118b4576118b3612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f32000000000000000000000000000000000000000000000000000000000000008360038151811061191857611917612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f35000000000000000000000000000000000000000000000000000000000000008360048151811061197c5761197b612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3600000000000000000000000000000000000000000000000000000000000000836005815181106119e0576119df612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a0000000000000000000000000000000000000000000000000000000000000083600681518110611a4457611a43612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b6020811015611d7057600460f0878360208110611a9a57611a99612cf8565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015611b7257603083611b099190612e8f565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110611b3e57611b3d612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611be4565b605783611b7f9190612e8f565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110611bb457611bb3612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110611bf957611bf8612cf8565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015611cd057603083611c5b9190612e8f565b7f01000000000000000000000000000000000000000000000000000000000000000284600184611c8b9190612dc4565b81518110611c9c57611c9b612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d4e565b605783611cdd9190612e8f565b7f01000000000000000000000000000000000000000000000000000000000000000284600184611d0d9190612dc4565b81518110611d1e57611d1d612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282611d5b9190612dc4565b91508080611d6890612df8565b915050611a7a565b50829350505050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008060036000848152602001908152602001600020549050611e36816122c7565b611e3f57600080fd5b611e48816122f9565b15611e565782915050611ebb565b7effffffffff00000000000000000000000000000000000000000000000000006001028116905060d081908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611f17919061264d565b602060405180830381865afa158015611f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f589190612ed9565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f9257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146120c6573373ffffffffffffffffffffffffffffffffffffffff166004600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806120bc57503373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6120c557600080fd5b5b60006004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612123838561232b565b5050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000088600190041692506014879060020a02831792508565ffffffffffff1683179250826001029050600060010260036000838152602001908152602001600020541461219b57600080fd5b8460000160129054906101000a900460ff166121fd5784600001600c9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16146121fc5760018560000160126101000a81548160ff0219169083151502179055505b5b64ffffffffff886001900416915060d0829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff1682179150600185600001600c8282829054906101000a900465ffffffffffff1661227b9190612d56565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555081600102600360008381526020019081526020016000208190555080935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b60008083600102905060036000828152602001908152602001600020546001900491506000820361235b57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600360008381526020019081526020016000208190555050505050565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61244781612412565b811461245257600080fd5b50565b6000813590506124648161243e565b92915050565b6000602082840312156124805761247f612408565b5b600061248e84828501612455565b91505092915050565b60008115159050919050565b6124ac81612497565b82525050565b60006020820190506124c760008301846124a3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125075780820151818401526020810190506124ec565b60008484015250505050565b6000601f19601f8301169050919050565b600061252f826124cd565b61253981856124d8565b93506125498185602086016124e9565b61255281612513565b840191505092915050565b600060208201905081810360008301526125778184612524565b905092915050565b6000819050919050565b6125928161257f565b811461259d57600080fd5b50565b6000813590506125af81612589565b92915050565b6000602082840312156125cb576125ca612408565b5b60006125d9848285016125a0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061260d826125e2565b9050919050565b61261d81612602565b82525050565b60006020820190506126386000830184612614565b92915050565b6126478161257f565b82525050565b6000602082019050612662600083018461263e565b92915050565b61267181612602565b811461267c57600080fd5b50565b60008135905061268e81612668565b92915050565b6000806000606084860312156126ad576126ac612408565b5b60006126bb8682870161267f565b93505060206126cc8682870161267f565b92505060406126dd868287016125a0565b9150509250925092565b6000819050919050565b6126fa816126e7565b811461270557600080fd5b50565b600081359050612717816126f1565b92915050565b60006020828403121561273357612732612408565b5b600061274184828501612708565b91505092915050565b612753816126e7565b82525050565b600060208201905061276e600083018461274a565b92915050565b60008060006060848603121561278d5761278c612408565b5b600061279b8682870161267f565b93505060206127ac86828701612708565b92505060406127bd868287016125a0565b9150509250925092565b600065ffffffffffff82169050919050565b6127e2816127c7565b81146127ed57600080fd5b50565b6000813590506127ff816127d9565b92915050565b6000806000806080858703121561281f5761281e612408565b5b600061282d8782880161267f565b945050602061283e87828801612708565b935050604061284f878288016125a0565b9250506060612860878288016127f0565b91505092959194509250565b6000806040838503121561288357612882612408565b5b600061289185828601612708565b92505060206128a2858286016127f0565b9150509250929050565b600080604083850312156128c3576128c2612408565b5b60006128d185828601612708565b92505060206128e2858286016125a0565b9150509250929050565b6128f5816127c7565b82525050565b600060808201905061291060008301876128ec565b61291d60208301866128ec565b61292a60408301856128ec565b61293760608301846124a3565b95945050505050565b60006020828403121561295657612955612408565b5b60006129648482850161267f565b91505092915050565b61297681612497565b811461298157600080fd5b50565b6000813590506129938161296d565b92915050565b600080604083850312156129b0576129af612408565b5b60006129be8582860161267f565b92505060206129cf85828601612984565b9150509250929050565b600080604083850312156129f0576129ef612408565b5b60006129fe8582860161267f565b9250506020612a0f85828601612708565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612a5b82612513565b810181811067ffffffffffffffff82111715612a7a57612a79612a23565b5b80604052505050565b6000612a8d6123fe565b9050612a998282612a52565b919050565b600067ffffffffffffffff821115612ab957612ab8612a23565b5b612ac282612513565b9050602081019050919050565b82818337600083830152505050565b6000612af1612aec84612a9e565b612a83565b905082815260208101848484011115612b0d57612b0c612a1e565b5b612b18848285612acf565b509392505050565b600082601f830112612b3557612b34612a19565b5b8135612b45848260208601612ade565b91505092915050565b60008060008060808587031215612b6857612b67612408565b5b6000612b768782880161267f565b9450506020612b878782880161267f565b9350506040612b98878288016125a0565b925050606085013567ffffffffffffffff811115612bb957612bb861240d565b5b612bc587828801612b20565b91505092959194509250565b600080600060608486031215612bea57612be9612408565b5b6000612bf886828701612708565b9350506020612c09868287016125a0565b9250506040612c1a868287016125a0565b9150509250925092565b6000819050919050565b612c3781612c24565b82525050565b6000602082019050612c526000830184612c2e565b92915050565b60008060408385031215612c6f57612c6e612408565b5b6000612c7d8582860161267f565b9250506020612c8e8582860161267f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cdf57607f821691505b602082108103612cf257612cf1612c98565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d61826127c7565b9150612d6c836127c7565b9250828201905065ffffffffffff811115612d8a57612d89612d27565b5b92915050565b6000612d9b8261257f565b9150612da68361257f565b9250828203905081811115612dbe57612dbd612d27565b5b92915050565b6000612dcf8261257f565b9150612dda8361257f565b9250828201905080821115612df257612df1612d27565b5b92915050565b6000612e038261257f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e3557612e34612d27565b5b600182019050919050565b600081519050612e4f816126f1565b92915050565b600060208284031215612e6b57612e6a612408565b5b6000612e7984828501612e40565b91505092915050565b600060ff82169050919050565b6000612e9a82612e82565b9150612ea583612e82565b9250828201905060ff811115612ebe57612ebd612d27565b5b92915050565b600081519050612ed381612668565b92915050565b600060208284031215612eef57612eee612408565b5b6000612efd84828501612ec4565b9150509291505056fea2646970667358221220a62f827589f16aecc656da96e430b2614d60fe5c431eea0396000834def84cf064736f6c63430008110033 -\ No newline at end of file +60806040523480156200001157600080fd5b506040516200353f3803806200353f833981810160405281019062000037919062000236565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600690816200008891906200050c565b5080600790816200009a91906200050c565b505050620005f3565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200010c82620000c1565b810181811067ffffffffffffffff821117156200012e576200012d620000d2565b5b80604052505050565b600062000143620000a3565b905062000151828262000101565b919050565b600067ffffffffffffffff821115620001745762000173620000d2565b5b6200017f82620000c1565b9050602081019050919050565b60005b83811015620001ac5780820151818401526020810190506200018f565b60008484015250505050565b6000620001cf620001c98462000156565b62000137565b905082815260208101848484011115620001ee57620001ed620000bc565b5b620001fb8482856200018c565b509392505050565b600082601f8301126200021b576200021a620000b7565b5b81516200022d848260208601620001b8565b91505092915050565b6000806040838503121562000250576200024f620000ad565b5b600083015167ffffffffffffffff811115620002715762000270620000b2565b5b6200027f8582860162000203565b925050602083015167ffffffffffffffff811115620002a357620002a2620000b2565b5b620002b18582860162000203565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030e57607f821691505b602082108103620003245762000323620002c6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200034f565b6200039d86836200034f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003ea620003e4620003de84620003b5565b620003bf565b620003b5565b9050919050565b6000819050919050565b6200040683620003c9565b6200041e6200041582620003f1565b8484546200035f565b825550505050565b600090565b6200043562000426565b62000442818484620003fb565b505050565b5b818110156200046a576200045e6000826200042b565b60018101905062000448565b5050565b601f821115620004b95762000483816200032a565b6200048e846200033f565b810160208510156200049e578190505b620004b6620004ad856200033f565b83018262000447565b50505b505050565b60008160020a8304905092915050565b6000620004e160001984600802620004be565b1980831691505092915050565b6000620004fc8383620004ce565b9150826002028217905092915050565b6200051782620002bb565b67ffffffffffffffff811115620005335762000532620000d2565b5b6200053f8254620002f5565b6200054c8282856200046e565b600060209050601f8311600181146200058457600084156200056f578287015190505b6200057b8582620004ee565b865550620005eb565b601f19841662000594866200032a565b60005b82811015620005be5784890151825560018201915060208501945060208101905062000597565b86831015620005de5784890151620005da601f891682620004ce565b8355505b6001600288020188555050505b505050505050565b612f3c80620006036000396000f3fe608060405260043610610168576000357c0100000000000000000000000000000000000000000000000000000000900480636352211e116100d3578063b88d4fde1161008c578063b88d4fde1461051c578063bee2c0b514610538578063c87b56dd14610575578063c9796c39146105b2578063e985e9c5146105ef578063f9613ab21461062c57610168565b80636352211e146103e657806370a08231146104235780638da5cb5b1461046057806395d89b411461048b578063a22cb465146104b6578063adf288df146104df57610168565b806325cbaa181161012557806325cbaa18146102965780632c1369de146102d357806342842e0e146103105780634d03546a1461032c5780634f64b2be14610369578063559f5dc9146103a657610168565b806301ffc9a71461016d57806306fdde03146101aa578063081812fc146101d557806318160ddd1461021257806323b872dd1461023d57806324e0febc14610259575b600080fd5b34801561017957600080fd5b50610194600480360381019061018f919061246a565b610669565b6040516101a191906124b2565b60405180910390f35b3480156101b657600080fd5b506101bf61080f565b6040516101cc919061255d565b60405180910390f35b3480156101e157600080fd5b506101fc60048036038101906101f791906125b5565b61089d565b6040516102099190612623565b60405180910390f35b34801561021e57600080fd5b506102276108da565b604051610234919061264d565b60405180910390f35b61025760048036038101906102529190612694565b6108e4565b005b34801561026557600080fd5b50610280600480360381019061027b919061271d565b610953565b60405161028d9190612759565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190612774565b61096b565b6040516102ca9190612759565b60405180910390f35b3480156102df57600080fd5b506102fa60048036038101906102f59190612805565b610b16565b6040516103079190612759565b60405180910390f35b61032a60048036038101906103259190612694565b610c17565b005b34801561033857600080fd5b50610353600480360381019061034e919061286c565b610c86565b60405161036091906124b2565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b91906125b5565b610f5e565b60405161039d9190612759565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906128ac565b610f82565b6040516103dd94939291906128fb565b60405180910390f35b3480156103f257600080fd5b5061040d600480360381019061040891906125b5565b61100e565b60405161041a9190612623565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612940565b61104a565b604051610457919061264d565b60405180910390f35b34801561046c57600080fd5b50610475611051565b6040516104829190612623565b60405180910390f35b34801561049757600080fd5b506104a0611075565b6040516104ad919061255d565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d89190612999565b611103565b005b3480156104eb57600080fd5b50610506600480360381019061050191906129d9565b6113a5565b6040516105139190612759565b60405180910390f35b61053660048036038101906105319190612b4e565b611507565b005b34801561054457600080fd5b5061055f600480360381019061055a9190612bd1565b6115de565b60405161056c9190612c3d565b60405180910390f35b34801561058157600080fd5b5061059c600480360381019061059791906125b5565b6116b1565b6040516105a9919061255d565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d4919061271d565b611761565b6040516105e6919061255d565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190612c58565b611d7c565b60405161062391906124b2565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e919061271d565b611e14565b6040516106609190612759565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036106bd576001905061080a565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361070f576001905061080a565b63780e9d637c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610761576001905061080a565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107b3576001905061080a565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610805576001905061080a565b600090505b919050565b6006805461081c90612cc7565b80601f016020809104026020016040519081016040528092919081815260200182805461084890612cc7565b80156108955780601f1061086a57610100808354040283529160200191610895565b820191906000526020600020905b81548152906001019060200180831161087857829003601f168201915b505050505081565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600854905090565b60606108f284848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60036020528060005260406000206000915090505481565b60008060026000858152602001908152602001600020838154811061099357610992612cf8565b5b9060005260206000200190508060000160129054906101000a900460ff16156109bb57600080fd5b6000831480156109e9575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b15610a4857600181600001600c8282829054906101000a900465ffffffffffff16610a149190612d56565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550610a4085856113a5565b915050610b0f565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa057600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff1681600001600c9054906101000a900465ffffffffffff1665ffffffffffff1610610ae857600080fd5b610b0b85858584600001600c9054906101000a900465ffffffffffff168561212a565b9150505b9392505050565b600080600260008681526020019081526020016000208481548110610b3e57610b3d612cf8565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba257600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610bcd57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff1610610bff57600080fd5b610c0c868686868561212a565b915050949350505050565b6060610c2584848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce457600080fd5b610cec6123bc565b600260008781526020019081526020016000208054905092506000831115610dbc57600060026000888152602001908152602001600020600081548110610d3657610d35612cf8565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610d6857600080fd5b60026000878152602001908152602001600020600184610d889190612d90565b81548110610d9957610d98612cf8565b5b9060005260206000200160000160069054906101000a900465ffffffffffff1691505b84816000019065ffffffffffff16908165ffffffffffff16815250508482610de49190612d56565b816020019065ffffffffffff16908165ffffffffffff168152505060026000878152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060608201518160000160126101000a81548160ff0219169083151502179055505050600186908060018154018082558091505060019003906000526020600020016000909190919091505560008565ffffffffffff1603610f3357600160086000828254610f279190612dc4565b92505081905550610f55565b8465ffffffffffff1660086000828254610f4d9190612dc4565b925050819055505b50505092915050565b60018181548110610f6e57600080fd5b906000526020600020016000915090505481565b60026020528160005260406000208181548110610f9e57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900465ffffffffffff16908060000160129054906101000a900460ff16905084565b600080600360008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6000919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6007805461108290612cc7565b80601f01602080910402602001604051908101604052809291908181526020018280546110ae90612cc7565b80156110fb5780601f106110d0576101008083540402835291602001916110fb565b820191906000526020600020905b8154815290600101906020018083116110de57829003601f168201915b505050505081565b801561122457600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a157600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061133c565b600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036112bc57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161139991906124b2565b60405180910390a35050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461140357600080fd5b600160026000868152602001908152602001600020805490501461142657600080fd5b60006002600086815260200190815260200160002060008154811061144e5761144d612cf8565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461148057600080fd5b60006001026003600086815260200190815260200160002054146114a357600080fd5b8473ffffffffffffffffffffffffffffffffffffffff1691507fc00000000000000000000000000000000000000000000000000000000000000082179150816001026003600086815260200190815260200160002081905550839250505092915050565b61151384848484611ec0565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e60006001026040516115d09190612759565b60405180910390a450505050565b6000808290505b600260008681526020019081526020016000208054905081101561168557836fffffffffffffffffffffffffffffffff1660026000878152602001908152602001600020828154811061163b5761163a612cf8565b5b9060005260206000200160000160069054906101000a900465ffffffffffff1665ffffffffffff16111561167257809150506116aa565b808061167d90612df8565b9150506115e5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b9392505050565b606060003073ffffffffffffffffffffffffffffffffffffffff1663f9613ab2846001026040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161170d9190612759565b602060405180830381865afa15801561172a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190612e55565b905061175981611761565b915050919050565b606080600080604767ffffffffffffffff81111561178257611781612a23565b5b6040519080825280601f01601f1916602001820160405280156117b45781602001600182028036833780820191505090505b5092507f7300000000000000000000000000000000000000000000000000000000000000836000815181106117ec576117eb612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6800000000000000000000000000000000000000000000000000000000000000836001815181106118505761184f612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f6100000000000000000000000000000000000000000000000000000000000000836002815181106118b4576118b3612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f32000000000000000000000000000000000000000000000000000000000000008360038151811061191857611917612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f35000000000000000000000000000000000000000000000000000000000000008360048151811061197c5761197b612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3600000000000000000000000000000000000000000000000000000000000000836005815181106119e0576119df612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a0000000000000000000000000000000000000000000000000000000000000083600681518110611a4457611a43612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b6020811015611d7057600460f0878360208110611a9a57611a99612cf8565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015611b7257603083611b099190612e8f565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110611b3e57611b3d612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611be4565b605783611b7f9190612e8f565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110611bb457611bb3612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110611bf957611bf8612cf8565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015611cd057603083611c5b9190612e8f565b7f01000000000000000000000000000000000000000000000000000000000000000284600184611c8b9190612dc4565b81518110611c9c57611c9b612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d4e565b605783611cdd9190612e8f565b7f01000000000000000000000000000000000000000000000000000000000000000284600184611d0d9190612dc4565b81518110611d1e57611d1d612cf8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282611d5b9190612dc4565b91508080611d6890612df8565b915050611a7a565b50829350505050919050565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60008060036000848152602001908152602001600020549050611e36816122c7565b611e3f57600080fd5b611e48816122f9565b15611e565782915050611ebb565b7effffffffff00000000000000000000000000000000000000000000000000006001028116905060d081908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611f17919061264d565b602060405180830381865afa158015611f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f589190612ed9565b90508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f9257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146120c6573373ffffffffffffffffffffffffffffffffffffffff166004600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806120bc57503373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6120c557600080fd5b5b60006004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612123838561232b565b5050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000088600190041692506014879060020a02831792508565ffffffffffff1683179250826001029050600060010260036000838152602001908152602001600020541461219b57600080fd5b8460000160129054906101000a900460ff166121fd5784600001600c9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff16146121fc5760018560000160126101000a81548160ff0219169083151502179055505b5b64ffffffffff886001900416915060d0829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff1682179150600185600001600c8282829054906101000a900465ffffffffffff1661227b9190612d56565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555081600102600360008381526020019081526020016000208190555080935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b60008083600102905060036000828152602001908152602001600020546001900491506000820361235b57600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600360008381526020019081526020016000208190555050505050565b6040518060800160405280600065ffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61244781612412565b811461245257600080fd5b50565b6000813590506124648161243e565b92915050565b6000602082840312156124805761247f612408565b5b600061248e84828501612455565b91505092915050565b60008115159050919050565b6124ac81612497565b82525050565b60006020820190506124c760008301846124a3565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125075780820151818401526020810190506124ec565b60008484015250505050565b6000601f19601f8301169050919050565b600061252f826124cd565b61253981856124d8565b93506125498185602086016124e9565b61255281612513565b840191505092915050565b600060208201905081810360008301526125778184612524565b905092915050565b6000819050919050565b6125928161257f565b811461259d57600080fd5b50565b6000813590506125af81612589565b92915050565b6000602082840312156125cb576125ca612408565b5b60006125d9848285016125a0565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061260d826125e2565b9050919050565b61261d81612602565b82525050565b60006020820190506126386000830184612614565b92915050565b6126478161257f565b82525050565b6000602082019050612662600083018461263e565b92915050565b61267181612602565b811461267c57600080fd5b50565b60008135905061268e81612668565b92915050565b6000806000606084860312156126ad576126ac612408565b5b60006126bb8682870161267f565b93505060206126cc8682870161267f565b92505060406126dd868287016125a0565b9150509250925092565b6000819050919050565b6126fa816126e7565b811461270557600080fd5b50565b600081359050612717816126f1565b92915050565b60006020828403121561273357612732612408565b5b600061274184828501612708565b91505092915050565b612753816126e7565b82525050565b600060208201905061276e600083018461274a565b92915050565b60008060006060848603121561278d5761278c612408565b5b600061279b8682870161267f565b93505060206127ac86828701612708565b92505060406127bd868287016125a0565b9150509250925092565b600065ffffffffffff82169050919050565b6127e2816127c7565b81146127ed57600080fd5b50565b6000813590506127ff816127d9565b92915050565b6000806000806080858703121561281f5761281e612408565b5b600061282d8782880161267f565b945050602061283e87828801612708565b935050604061284f878288016125a0565b9250506060612860878288016127f0565b91505092959194509250565b6000806040838503121561288357612882612408565b5b600061289185828601612708565b92505060206128a2858286016127f0565b9150509250929050565b600080604083850312156128c3576128c2612408565b5b60006128d185828601612708565b92505060206128e2858286016125a0565b9150509250929050565b6128f5816127c7565b82525050565b600060808201905061291060008301876128ec565b61291d60208301866128ec565b61292a60408301856128ec565b61293760608301846124a3565b95945050505050565b60006020828403121561295657612955612408565b5b60006129648482850161267f565b91505092915050565b61297681612497565b811461298157600080fd5b50565b6000813590506129938161296d565b92915050565b600080604083850312156129b0576129af612408565b5b60006129be8582860161267f565b92505060206129cf85828601612984565b9150509250929050565b600080604083850312156129f0576129ef612408565b5b60006129fe8582860161267f565b9250506020612a0f85828601612708565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612a5b82612513565b810181811067ffffffffffffffff82111715612a7a57612a79612a23565b5b80604052505050565b6000612a8d6123fe565b9050612a998282612a52565b919050565b600067ffffffffffffffff821115612ab957612ab8612a23565b5b612ac282612513565b9050602081019050919050565b82818337600083830152505050565b6000612af1612aec84612a9e565b612a83565b905082815260208101848484011115612b0d57612b0c612a1e565b5b612b18848285612acf565b509392505050565b600082601f830112612b3557612b34612a19565b5b8135612b45848260208601612ade565b91505092915050565b60008060008060808587031215612b6857612b67612408565b5b6000612b768782880161267f565b9450506020612b878782880161267f565b9350506040612b98878288016125a0565b925050606085013567ffffffffffffffff811115612bb957612bb861240d565b5b612bc587828801612b20565b91505092959194509250565b600080600060608486031215612bea57612be9612408565b5b6000612bf886828701612708565b9350506020612c09868287016125a0565b9250506040612c1a868287016125a0565b9150509250925092565b6000819050919050565b612c3781612c24565b82525050565b6000602082019050612c526000830184612c2e565b92915050565b60008060408385031215612c6f57612c6e612408565b5b6000612c7d8582860161267f565b9250506020612c8e8582860161267f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cdf57607f821691505b602082108103612cf257612cf1612c98565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d61826127c7565b9150612d6c836127c7565b9250828201905065ffffffffffff811115612d8a57612d89612d27565b5b92915050565b6000612d9b8261257f565b9150612da68361257f565b9250828203905081811115612dbe57612dbd612d27565b5b92915050565b6000612dcf8261257f565b9150612dda8361257f565b9250828201905080821115612df257612df1612d27565b5b92915050565b6000612e038261257f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e3557612e34612d27565b5b600182019050919050565b600081519050612e4f816126f1565b92915050565b600060208284031215612e6b57612e6a612408565b5b6000612e7984828501612e40565b91505092915050565b600060ff82169050919050565b6000612e9a82612e82565b9150612ea583612e82565b9250828201905060ff811115612ebe57612ebd612d27565b5b92915050565b600081519050612ed381612668565b92915050565b600060208284031215612eef57612eee612408565b5b6000612efd84828501612ec4565b9150509291505056fea2646970667358221220187736cd9eafc580409730b9da69260cd5c75e9cf78ae7b87ac8e71d85b743e564736f6c63430008110033 +\ No newline at end of file diff --git a/solidity/CraftNFT.sol b/solidity/CraftNFT.sol @@ -3,6 +3,15 @@ pragma solidity >= 0.8.0; contract CraftNFT { + // Defines the behavior of a single token batch. + // + // count defines the amount of tokens there are in a batch. A count of 0 indicates a unique token. + // A batched token can never have a token count of 0 in any batch. + // + // cursor keeps track of how many tokens have been minted in the batch. + // + // If sparse is set, token indexes in mintedToken may not be in order. + // In this case a full iteration up to count is required to discover all minted tokens. struct tokenSpec { uint48 count; uint48 cumulativeCount; @@ -10,11 +19,21 @@ contract CraftNFT { bool sparse; } address public owner; + + // Collection of all unique token keys bytes32[] public tokens; + + // Define each batch of a token. (A unqiue token will have a single entry only). mapping(bytes32 => tokenSpec[]) public token; + + // Individual tokens from batches. A unique token is also represented by the same content. mapping(bytes32 => bytes32) public mintedToken; - mapping(uint256 => address) tokenAllowance; // backend for approve - mapping(address => address) tokenOperator; // backend for setApprovalForAll + + // Registry for the approve() method + mapping(uint256 => address) tokenAllowance; + + // Registry for the setApprovalForAll() method + mapping(address => address) tokenOperator; // ERC-721 (Metadata - optional) string public name; @@ -39,14 +58,17 @@ contract CraftNFT { symbol = _symbol; } + // Check bit that is always set on the content data when a token has been minted function isActive(bytes32 _tokenContent) private view returns(bool) { return uint256(_tokenContent) & 0x8000000000000000000000000000000000000000000000000000000000000000 > 0; } + // Returns true if the content data belongs to a unique token function isSingle(bytes32 _tokenContent) private view returns(bool) { return uint256(_tokenContent) & 0x4000000000000000000000000000000000000000000000000000000000000000 > 0; } + // Reassemble unique token key from indexed token id function getDigest(bytes32 _truncatedId) public view returns (bytes32) { bytes32 digest; @@ -63,7 +85,8 @@ contract CraftNFT { return digest; } - // allocate a batch of tokens + // Allocate tokens for minting. + // if count is set to 0, only a single unique token can be minted. function allocate(bytes32 content, uint48 count) public returns (bool) { uint256 l; uint48 _cumulativeCount; @@ -89,6 +112,8 @@ contract CraftNFT { } } + // Find the token batch which contains the given index. + // Search scope can be controlled using the _startAt and _endAt properties. function batchOf(bytes32 _content, uint256 _superIndex, uint256 _startAt) public view returns(int256) { for (uint256 i = _startAt; i < token[_content].length; i++) { if (token[_content][i].cumulativeCount > uint128(_superIndex)) { @@ -98,6 +123,7 @@ contract CraftNFT { return -1; } + // Mint a unique token. The method will fail if the token was allocated as a batch. function mintTo(address _recipient, bytes32 _content) public returns (bytes32) { uint256 right; uint256 first; @@ -113,7 +139,8 @@ contract CraftNFT { return _content; } - + + // Apply the token owner to the token content data. function setTokenOwner(uint256 _tokenId, address _newOwner) private { uint256 _data; bytes32 _k; @@ -128,6 +155,13 @@ contract CraftNFT { mintedToken[_k] = bytes32(_data); } + // Mint a token from a batch. + // Will fail if: + // * All tokens in the batch have already been minted + // * One or more tokens have been minted out of sequential order (see mintExactFromBatchTo) + // + // If the token was allocated as a single token (which has not yet been minted), + // this method will transparently alias to mintTo function mintFromBatchTo(address _recipient, bytes32 _content, uint256 _batch) public returns (bytes32) { tokenSpec storage spec; @@ -144,6 +178,11 @@ contract CraftNFT { } + // Mint a token at a specific index of a batch + // If the index is not the next sequential index in the batch, the token will be marked as sparse. + // Sparse tokens cannot thereafter be minted using mintFromBatchTo + // The method will fail if the token at the specified index has already been minted, or if the index is out of bounds of the batch. + // This method cannot be used to mint a unique token. function mintExactFromBatchTo(address _recipient, bytes32 _content, uint256 _batch, uint48 _index) public returns (bytes32) { tokenSpec storage spec; @@ -154,7 +193,7 @@ contract CraftNFT { return mintBatchCore(_recipient, _content, _batch, _index, spec); } - + // Common code path for both batch mint methods. function mintBatchCore(address _recipient, bytes32 _content, uint256 _batch, uint48 _index, tokenSpec storage _spec) private returns (bytes32) { uint256 left; uint256 right; @@ -219,7 +258,7 @@ contract CraftNFT { return address(bytes20(_tokenContent << 96)); } - // shared function for transfer methods + // Common code path for transfer methods function transferCore(address _from, address _to, uint256 _tokenId, bytes memory _data) internal { address currentTokenOwner; @@ -321,6 +360,7 @@ contract CraftNFT { return false; } + // ERC-721 function totalSupply() public view returns(uint256) { return supply; }