commit d3059fc6c4768a35ff367db8b2bcf16771de9c0a
parent ecd6b47ba1dffa4707a96acea8f8f5d9a2fec8da
Author: lash <dev@holbrook.no>
Date: Tue, 7 Feb 2023 06:40:41 +0000
Require allocated token for tokenURI method
Diffstat:
7 files changed, 23 insertions(+), 43 deletions(-)
diff --git a/js/contract/CraftNFT.bin b/js/contract/CraftNFT.bin
@@ -1 +1 @@
-60806040523480156200001157600080fd5b506040516200432738038062004327833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060098190555082600690816200008f919062000564565b508160079081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b613ccc806200065b6000396000f3fe6080604052600436106101d4576000357c01000000000000000000000000000000000000000000000000000000009004806370a0823111610109578063b88d4fde116100a7578063d824ee4f11610081578063d824ee4f1461069c578063e985e9c5146106d9578063f117e17314610716578063f9613ab214610753576101d4565b8063b88d4fde14610606578063c87b56dd14610622578063c9796c391461065f576101d4565b8063a22cb465116100e3578063a22cb46514610538578063adf288df14610561578063b1a6afd31461059e578063b242e534146105c9576101d4565b806370a08231146104a55780638da5cb5b146104e257806395d89b411461050d576101d4565b806342842e0e116101765780634f64b2be116101505780634f64b2be146103af578063559f5dc9146103ec5780636352211e1461042b57806369e85c7114610468576101d4565b806342842e0e1461032d57806349f2553a146103495780634d03546a14610372576101d4565b806318160ddd116101b257806318160ddd1461027e57806323b872dd146102a957806324e0febc146102c557806340c84b0e14610302576101d4565b806301ffc9a7146101d957806306fdde0314610216578063081812fc14610241575b600080fd5b3480156101e557600080fd5b5061020060048036038101906101fb9190612e26565b610790565b60405161020d9190612e6e565b60405180910390f35b34801561022257600080fd5b5061022b610936565b6040516102389190612f19565b60405180910390f35b34801561024d57600080fd5b5061026860048036038101906102639190612f71565b6109c4565b6040516102759190612fdf565b60405180910390f35b34801561028a57600080fd5b50610293610a01565b6040516102a09190613009565b60405180910390f35b6102c360048036038101906102be9190613050565b610a0b565b005b3480156102d157600080fd5b506102ec60048036038101906102e791906130d9565b610a76565b6040516102f99190613115565b60405180910390f35b34801561030e57600080fd5b50610317610a8e565b6040516103249190613185565b60405180910390f35b61034760048036038101906103429190613050565b610b1c565b005b34801561035557600080fd5b50610370600480360381019061036b91906132dc565b610b87565b005b34801561037e57600080fd5b5061039960048036038101906103949190613363565b610e9f565b6040516103a69190612e6e565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190612f71565b611129565b6040516103e39190613115565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906133a3565b61114d565b604051610422939291906133f2565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190612f71565b6111c1565b60405161045f9190612fdf565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906130d9565b6111fd565b60405161049c9190612f19565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613429565b611416565b6040516104d99190613009565b60405180910390f35b3480156104ee57600080fd5b506104f761145f565b6040516105049190612fdf565b60405180910390f35b34801561051957600080fd5b50610522611483565b60405161052f9190612f19565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613482565b611511565b005b34801561056d57600080fd5b50610588600480360381019061058391906134c2565b6117b3565b6040516105959190613115565b60405180910390f35b3480156105aa57600080fd5b506105b36119d1565b6040516105c09190613115565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613482565b6119d7565b6040516105fd9190612e6e565b60405180910390f35b610620600480360381019061061b91906135a3565b611ab8565b005b34801561062e57600080fd5b5061064960048036038101906106449190612f71565b611b93565b6040516106569190612f19565b60405180910390f35b34801561066b57600080fd5b50610686600480360381019061068191906130d9565b611ba8565b6040516106939190612f19565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190613660565b611fa2565b6040516106d09190613115565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb91906136b3565b612155565b60405161070d9190612e6e565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906136f3565b6121ed565b60405161074a9190613115565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906130d9565b6122f2565b6040516107879190613115565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107e45760019050610931565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108365760019050610931565b63780e9d637c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108885760019050610931565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108da5760019050610931565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361092c5760019050610931565b600090505b919050565b6006805461094390613789565b80601f016020809104026020016040519081016040528092919081815260200182805461096f90613789565b80156109bc5780601f10610991576101008083540402835291602001916109bc565b820191906000526020600020905b81548152906001019060200180831161099f57829003601f168201915b505050505081565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600854905090565b610a1683838361239e565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60036020528060005260406000206000915090505481565b600a8054610a9b90613789565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac790613789565b8015610b145780601f10610ae957610100808354040283529160200191610b14565b820191906000526020600020905b815481529060010190602001808311610af757829003601f168201915b505050505081565b610b2783838361239e565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be457600080fd5b82915081519050602f7f01000000000000000000000000000000000000000000000000000000000000000282600183610c1d91906137e9565b81518110610c2e57610c2d61381d565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610cae578080610caa9061384c565b9150505b8067ffffffffffffffff811115610cc857610cc76131b1565b5b6040519080825280601f01601f191660200182016040528015610cfa5781602001600182028036833780820191505090505b50600a9081610d099190613a46565b5060005b8251811015610dfa57828181518110610d2957610d2861381d565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600a828154610d8190613789565b8110610d9057610d8f61381d565b5b815460011615610daf5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055508080610df29061384c565b915050610d0d565b5081518114610e9a577f2f00000000000000000000000000000000000000000000000000000000000000600a83518154610e3390613789565b8110610e4257610e4161381d565b5b815460011615610e615790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efa57600080fd5b610f02612d87565b600260008681526020019081526020016000208054905091506000821115610f7f57600060026000878152602001908152602001600020600081548110610f4c57610f4b61381d565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610f7e57600080fd5b5b83816000019065ffffffffffff16908165ffffffffffff168152505060026000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff0219169083151502179055505050600185908060018154018082558091505060019003906000526020600020016000909190919091505560008465ffffffffffff16036110a4576001600860008282546110989190613b18565b925050819055506110c6565b8365ffffffffffff16600860008282546110be9190613b18565b925050819055505b8365ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb85ba54b9f6f8241b7e1499e3cfc186ac0b1c8b7100f599bf6ca6844f896c342876040516111159190613115565b60405180910390a360019250505092915050565b6001818154811061113957600080fd5b906000526020600020016000915090505481565b6002602052816000526040600020818154811061116957600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff16905083565b600080600360008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061120d856126b5565b9150600a805461121c90613789565b9050905080825161122d9190613b18565b67ffffffffffffffff811115611246576112456131b1565b5b6040519080825280601f01601f1916602001820160405280156112785781602001600182028036833780820191505090505b50925060005b8181101561133d57600a81815461129490613789565b81106112a3576112a261381d565b5b8154600116156112c25790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106112fb576112fa61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113359061384c565b91505061127e565b5060005b825181101561140a5782818151811061135d5761135c61381d565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106113ba576113b961381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806113f49061384c565b92505080806114029061384c565b915050611341565b50829350505050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6007805461149090613789565b80601f01602080910402602001604051908101604052809291908181526020018280546114bc90613789565b80156115095780601f106114de57610100808354040283529160200191611509565b820191906000526020600020905b8154815290600101906020018083116114ec57829003601f168201915b505050505081565b801561163257600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115af57600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061174a565b600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116ca57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117a79190612e6e565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461180e57600080fd5b600160026000858152602001908152602001600020805490501461183157600080fd5b6000600260008581526020019081526020016000206000815481106118595761185861381d565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461188b57600080fd5b60006001026003600085815260200190815260200160002054146118ae57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260036000858152602001908152602001600020819055506001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119579190613b18565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885600190046040516119bf9190613009565b60405180910390a38291505092915050565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a3257600080fd5b600060149054906101000a900460ff1615611a4c57600080fd5b8115611a6e576001600060146101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b611ac384848461239e565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e84611b7890613b71565b604051611b859190613115565b60405180910390a450505050565b6060611ba1826001026111fd565b9050919050565b60608060606000611bb8856126b5565b9150604767ffffffffffffffff811115611bd557611bd46131b1565b5b6040519080825280601f01601f191660200182016040528015611c075781602001600182028036833780820191505090505b5092507f730000000000000000000000000000000000000000000000000000000000000083600081518110611c3f57611c3e61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f680000000000000000000000000000000000000000000000000000000000000083600181518110611ca357611ca261381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f610000000000000000000000000000000000000000000000000000000000000083600281518110611d0757611d0661381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f320000000000000000000000000000000000000000000000000000000000000083600381518110611d6b57611d6a61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f350000000000000000000000000000000000000000000000000000000000000083600481518110611dcf57611dce61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f360000000000000000000000000000000000000000000000000000000000000083600581518110611e3357611e3261381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a0000000000000000000000000000000000000000000000000000000000000083600681518110611e9757611e9661381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b6040811015611f9657828181518110611ee957611ee861381d565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002848381518110611f4657611f4561381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611f809061384c565b9250508080611f8e9061384c565b915050611ecd565b50829350505050919050565b600080600260008581526020019081526020016000208361ffff1681548110611fce57611fcd61381d565b5b90600052602060002001905080600001600c9054906101000a900460ff1615611ff657600080fd5b60008361ffff16148015612028575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b156120875760018160000160068282829054906101000a900465ffffffffffff166120539190613bd8565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555061207f85856117b3565b91505061214e565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120df57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff161061212757600080fd5b61214a8585858460000160069054906101000a900465ffffffffffff1685612a14565b9150505b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600260008681526020019081526020016000208461ffff16815481106122195761221861381d565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227d57600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff16116122a857600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff16106122da57600080fd5b6122e78686868685612a14565b915050949350505050565b6000806003600084815260200190815260200160002054905061231481612c92565b61231d57600080fd5b61232681612cc4565b156123345782915050612399565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016123f59190613009565b602060405180830381865afa158015612412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124369190613c27565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461247057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146125a4573373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061259a57503373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6125a357600080fd5b5b60006004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126018284612cf6565b6001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461265191906137e9565b925050819055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a89190613b18565b9250508190555050505050565b606080600080604067ffffffffffffffff8111156126d6576126d56131b1565b5b6040519080825280601f01601f1916602001820160405280156127085781602001600182028036833780820191505090505b5092506000905060005b6020811015612a0857600460f08783602081106127325761273161381d565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff16101561280a576030836127a19190613c61565b7f0100000000000000000000000000000000000000000000000000000000000000028483815181106127d6576127d561381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061287c565b6057836128179190613c61565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061284c5761284b61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682602081106128915761289061381d565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015612968576030836128f39190613c61565b7f010000000000000000000000000000000000000000000000000000000000000002846001846129239190613b18565b815181106129345761293361381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506129e6565b6057836129759190613c61565b7f010000000000000000000000000000000000000000000000000000000000000002846001846129a59190613b18565b815181106129b6576129b561381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b6002826129f39190613b18565b91508080612a009061384c565b915050612712565b50829350505050919050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff16831792508260010290506000600102600360008381526020019081526020016000205414612aa757600080fd5b84600001600c9054906101000a900460ff16612b09578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1614612b0857600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff16612b8a9190613bd8565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055508160010260036000838152602001908152602001600020819055506001600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c179190613b18565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051612c7b9190613009565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b600080836001029050600360008281526020019081526020016000205460019004915060008203612d2657600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600360008381526020019081526020016000208190555050505050565b6040518060600160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0381612dce565b8114612e0e57600080fd5b50565b600081359050612e2081612dfa565b92915050565b600060208284031215612e3c57612e3b612dc4565b5b6000612e4a84828501612e11565b91505092915050565b60008115159050919050565b612e6881612e53565b82525050565b6000602082019050612e836000830184612e5f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ec3578082015181840152602081019050612ea8565b60008484015250505050565b6000601f19601f8301169050919050565b6000612eeb82612e89565b612ef58185612e94565b9350612f05818560208601612ea5565b612f0e81612ecf565b840191505092915050565b60006020820190508181036000830152612f338184612ee0565b905092915050565b6000819050919050565b612f4e81612f3b565b8114612f5957600080fd5b50565b600081359050612f6b81612f45565b92915050565b600060208284031215612f8757612f86612dc4565b5b6000612f9584828501612f5c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fc982612f9e565b9050919050565b612fd981612fbe565b82525050565b6000602082019050612ff46000830184612fd0565b92915050565b61300381612f3b565b82525050565b600060208201905061301e6000830184612ffa565b92915050565b61302d81612fbe565b811461303857600080fd5b50565b60008135905061304a81613024565b92915050565b60008060006060848603121561306957613068612dc4565b5b60006130778682870161303b565b93505060206130888682870161303b565b925050604061309986828701612f5c565b9150509250925092565b6000819050919050565b6130b6816130a3565b81146130c157600080fd5b50565b6000813590506130d3816130ad565b92915050565b6000602082840312156130ef576130ee612dc4565b5b60006130fd848285016130c4565b91505092915050565b61310f816130a3565b82525050565b600060208201905061312a6000830184613106565b92915050565b600081519050919050565b600082825260208201905092915050565b600061315782613130565b613161818561313b565b9350613171818560208601612ea5565b61317a81612ecf565b840191505092915050565b6000602082019050818103600083015261319f818461314c565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131e982612ecf565b810181811067ffffffffffffffff82111715613208576132076131b1565b5b80604052505050565b600061321b612dba565b905061322782826131e0565b919050565b600067ffffffffffffffff821115613247576132466131b1565b5b61325082612ecf565b9050602081019050919050565b82818337600083830152505050565b600061327f61327a8461322c565b613211565b90508281526020810184848401111561329b5761329a6131ac565b5b6132a684828561325d565b509392505050565b600082601f8301126132c3576132c26131a7565b5b81356132d384826020860161326c565b91505092915050565b6000602082840312156132f2576132f1612dc4565b5b600082013567ffffffffffffffff8111156133105761330f612dc9565b5b61331c848285016132ae565b91505092915050565b600065ffffffffffff82169050919050565b61334081613325565b811461334b57600080fd5b50565b60008135905061335d81613337565b92915050565b6000806040838503121561337a57613379612dc4565b5b6000613388858286016130c4565b92505060206133998582860161334e565b9150509250929050565b600080604083850312156133ba576133b9612dc4565b5b60006133c8858286016130c4565b92505060206133d985828601612f5c565b9150509250929050565b6133ec81613325565b82525050565b600060608201905061340760008301866133e3565b61341460208301856133e3565b6134216040830184612e5f565b949350505050565b60006020828403121561343f5761343e612dc4565b5b600061344d8482850161303b565b91505092915050565b61345f81612e53565b811461346a57600080fd5b50565b60008135905061347c81613456565b92915050565b6000806040838503121561349957613498612dc4565b5b60006134a78582860161303b565b92505060206134b88582860161346d565b9150509250929050565b600080604083850312156134d9576134d8612dc4565b5b60006134e78582860161303b565b92505060206134f8858286016130c4565b9150509250929050565b600067ffffffffffffffff82111561351d5761351c6131b1565b5b61352682612ecf565b9050602081019050919050565b600061354661354184613502565b613211565b905082815260208101848484011115613562576135616131ac565b5b61356d84828561325d565b509392505050565b600082601f83011261358a576135896131a7565b5b813561359a848260208601613533565b91505092915050565b600080600080608085870312156135bd576135bc612dc4565b5b60006135cb8782880161303b565b94505060206135dc8782880161303b565b93505060406135ed87828801612f5c565b925050606085013567ffffffffffffffff81111561360e5761360d612dc9565b5b61361a87828801613575565b91505092959194509250565b600061ffff82169050919050565b61363d81613626565b811461364857600080fd5b50565b60008135905061365a81613634565b92915050565b60008060006060848603121561367957613678612dc4565b5b60006136878682870161303b565b9350506020613698868287016130c4565b92505060406136a98682870161364b565b9150509250925092565b600080604083850312156136ca576136c9612dc4565b5b60006136d88582860161303b565b92505060206136e98582860161303b565b9150509250929050565b6000806000806080858703121561370d5761370c612dc4565b5b600061371b8782880161303b565b945050602061372c878288016130c4565b935050604061373d8782880161364b565b925050606061374e8782880161334e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137a157607f821691505b6020821081036137b4576137b361375a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137f482612f3b565b91506137ff83612f3b565b9250828203905081811115613817576138166137ba565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061385782612f3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613889576138886137ba565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026138f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826138b9565b61390386836138b9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061394061393b61393684612f3b565b61391b565b612f3b565b9050919050565b6000819050919050565b61395a83613925565b61396e61396682613947565b8484546138c9565b825550505050565b600090565b613983613976565b61398e818484613951565b505050565b5b818110156139b2576139a760008261397b565b600181019050613994565b5050565b601f8211156139f7576139c881613894565b6139d1846138a9565b810160208510156139e0578190505b6139f46139ec856138a9565b830182613993565b50505b505050565b60008160020a8304905092915050565b6000613a1d600019846008026139fc565b1980831691505092915050565b6000613a368383613a0c565b9150826002028217905092915050565b613a4f82613130565b67ffffffffffffffff811115613a6857613a676131b1565b5b613a728254613789565b613a7d8282856139b6565b600060209050601f831160018114613ab05760008415613a9e578287015190505b613aa88582613a2a565b865550613b10565b601f198416613abe86613894565b60005b82811015613ae657848901518255600182019150602085019450602081019050613ac1565b86831015613b035784890151613aff601f891682613a0c565b8355505b6001600288020188555050505b505050505050565b6000613b2382612f3b565b9150613b2e83612f3b565b9250828201905080821115613b4657613b456137ba565b5b92915050565b6000819050602082019050919050565b6000613b6882516130a3565b80915050919050565b6000613b7c82613130565b82613b8684613b4c565b9050613b9181613b5c565b92506020821015613bd157613bcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026138b9565b831692505b5050919050565b6000613be382613325565b9150613bee83613325565b9250828201905065ffffffffffff811115613c0c57613c0b6137ba565b5b92915050565b600081519050613c2181613024565b92915050565b600060208284031215613c3d57613c3c612dc4565b5b6000613c4b84828501613c12565b91505092915050565b600060ff82169050919050565b6000613c6c82613c54565b9150613c7783613c54565b9250828201905060ff811115613c9057613c8f6137ba565b5b9291505056fea264697066735822122077361d598f679782404ae11030ea625cd25005a2e158b847efb53141c9485e9b64736f6c63430008110033
-\ No newline at end of file
+60806040523480156200001157600080fd5b506040516200434938038062004349833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060098190555082600690816200008f919062000564565b508160079081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b613cee806200065b6000396000f3fe6080604052600436106101df576000357c01000000000000000000000000000000000000000000000000000000009004806369e85c7111610114578063b242e534116100b2578063d824ee4f11610081578063d824ee4f146106e4578063e985e9c514610721578063f117e1731461075e578063f9613ab21461079b576101df565b8063b242e53414610611578063b88d4fde1461064e578063c87b56dd1461066a578063c9796c39146106a7576101df565b806395d89b41116100ee57806395d89b4114610555578063a22cb46514610580578063adf288df146105a9578063b1a6afd3146105e6576101df565b806369e85c71146104b057806370a08231146104ed5780638da5cb5b1461052a576101df565b806340c84b0e116101815780634d03546a1161015b5780634d03546a146103ba5780634f64b2be146103f7578063559f5dc9146104345780636352211e14610473576101df565b806340c84b0e1461034a57806342842e0e1461037557806349f2553a14610391576101df565b806318160ddd116101bd57806318160ddd1461028957806323b872dd146102b457806324e0febc146102d05780633fd2f5931461030d576101df565b806301ffc9a7146101e457806306fdde0314610221578063081812fc1461024c575b600080fd5b3480156101f057600080fd5b5061020b60048036038101906102069190612e48565b6107d8565b6040516102189190612e90565b60405180910390f35b34801561022d57600080fd5b5061023661092c565b6040516102439190612f3b565b60405180910390f35b34801561025857600080fd5b50610273600480360381019061026e9190612f93565b6109ba565b6040516102809190613001565b60405180910390f35b34801561029557600080fd5b5061029e6109f7565b6040516102ab919061302b565b60405180910390f35b6102ce60048036038101906102c99190613072565b610a01565b005b3480156102dc57600080fd5b506102f760048036038101906102f291906130fb565b610a6c565b6040516103049190613137565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f91906130fb565b610a84565b60405161034191906131a7565b60405180910390f35b34801561035657600080fd5b5061035f610de3565b60405161036c91906131a7565b60405180910390f35b61038f600480360381019061038a9190613072565b610e71565b005b34801561039d57600080fd5b506103b860048036038101906103b391906132fe565b610edc565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190613385565b6111f4565b6040516103ee9190612e90565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612f93565b61147e565b60405161042b9190613137565b60405180910390f35b34801561044057600080fd5b5061045b600480360381019061045691906133c5565b6114a2565b60405161046a93929190613414565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190612f93565b611516565b6040516104a79190613001565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d291906130fb565b611552565b6040516104e49190612f3b565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f919061344b565b61176b565b604051610521919061302b565b60405180910390f35b34801561053657600080fd5b5061053f6117b4565b60405161054c9190613001565b60405180910390f35b34801561056157600080fd5b5061056a6117d8565b6040516105779190612f3b565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a291906134a4565b611866565b005b3480156105b557600080fd5b506105d060048036038101906105cb91906134e4565b611b08565b6040516105dd9190613137565b60405180910390f35b3480156105f257600080fd5b506105fb611d26565b6040516106089190613137565b60405180910390f35b34801561061d57600080fd5b50610638600480360381019061063391906134a4565b611d2c565b6040516106459190612e90565b60405180910390f35b610668600480360381019061066391906135c5565b611e0d565b005b34801561067657600080fd5b50610691600480360381019061068c9190612f93565b611ee8565b60405161069e9190612f3b565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906130fb565b611f29565b6040516106db9190612f3b565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190613682565b612323565b6040516107189190613137565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906136d5565b6124d6565b6040516107559190612e90565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190613715565b61256e565b6040516107929190613137565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd91906130fb565b612673565b6040516107cf9190613137565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361082c5760019050610927565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361087e5760019050610927565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108d05760019050610927565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109225760019050610927565b600090505b919050565b60068054610939906137ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610965906137ab565b80156109b25780601f10610987576101008083540402835291602001916109b2565b820191906000526020600020905b81548152906001019060200180831161099557829003601f168201915b505050505081565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600854905090565b610a0c83838361271f565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60036020528060005260406000206000915090505481565b606080600080604067ffffffffffffffff811115610aa557610aa46131d3565b5b6040519080825280601f01601f191660200182016040528015610ad75781602001600182028036833780820191505090505b5092506000905060005b6020811015610dd757600460f0878360208110610b0157610b006137dc565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610bd957603083610b709190613847565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610ba557610ba46137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610c4b565b605783610be69190613847565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610c1b57610c1a6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610c6057610c5f6137dc565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610d3757603083610cc29190613847565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610cf2919061387c565b81518110610d0357610d026137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610db5565b605783610d449190613847565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610d74919061387c565b81518110610d8557610d846137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610dc2919061387c565b91508080610dcf906138b0565b915050610ae1565b50829350505050919050565b600a8054610df0906137ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1c906137ab565b8015610e695780601f10610e3e57610100808354040283529160200191610e69565b820191906000526020600020905b815481529060010190602001808311610e4c57829003601f168201915b505050505081565b610e7c83838361271f565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3957600080fd5b82915081519050602f7f01000000000000000000000000000000000000000000000000000000000000000282600183610f7291906138f8565b81518110610f8357610f826137dc565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611003578080610fff906138b0565b9150505b8067ffffffffffffffff81111561101d5761101c6131d3565b5b6040519080825280601f01601f19166020018201604052801561104f5781602001600182028036833780820191505090505b50600a908161105e9190613ade565b5060005b825181101561114f5782818151811061107e5761107d6137dc565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600a8281546110d6906137ab565b81106110e5576110e46137dc565b5b8154600116156111045790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055508080611147906138b0565b915050611062565b50815181146111ef577f2f00000000000000000000000000000000000000000000000000000000000000600a83518154611188906137ab565b8110611197576111966137dc565b5b8154600116156111b65790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461124f57600080fd5b611257612da9565b6002600086815260200190815260200160002080549050915060008211156112d4576000600260008781526020019081526020016000206000815481106112a1576112a06137dc565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff16116112d357600080fd5b5b83816000019065ffffffffffff16908165ffffffffffff168152505060026000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff0219169083151502179055505050600185908060018154018082558091505060019003906000526020600020016000909190919091505560008465ffffffffffff16036113f9576001600860008282546113ed919061387c565b9250508190555061141b565b8365ffffffffffff1660086000828254611413919061387c565b925050819055505b8365ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb85ba54b9f6f8241b7e1499e3cfc186ac0b1c8b7100f599bf6ca6844f896c3428760405161146a9190613137565b60405180910390a360019250505092915050565b6001818154811061148e57600080fd5b906000526020600020016000915090505481565b600260205281600052604060002081815481106114be57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff16905083565b600080600360008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061156285610a84565b9150600a8054611571906137ab565b90509050808251611582919061387c565b67ffffffffffffffff81111561159b5761159a6131d3565b5b6040519080825280601f01601f1916602001820160405280156115cd5781602001600182028036833780820191505090505b50925060005b8181101561169257600a8181546115e9906137ab565b81106115f8576115f76137dc565b5b8154600116156116175790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106116505761164f6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061168a906138b0565b9150506115d3565b5060005b825181101561175f578281815181106116b2576116b16137dc565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061170f5761170e6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611749906138b0565b9250508080611757906138b0565b915050611696565b50829350505050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600780546117e5906137ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611811906137ab565b801561185e5780601f106118335761010080835404028352916020019161185e565b820191906000526020600020905b81548152906001019060200180831161184157829003601f168201915b505050505081565b801561198757600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190457600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a9f565b600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a1f57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611afc9190612e90565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b6357600080fd5b6001600260008581526020019081526020016000208054905014611b8657600080fd5b600060026000858152602001908152602001600020600081548110611bae57611bad6137dc565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611be057600080fd5b6000600102600360008581526020019081526020016000205414611c0357600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260036000858152602001908152602001600020819055506001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cac919061387c565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560019004604051611d14919061302b565b60405180910390a38291505092915050565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d8757600080fd5b600060149054906101000a900460ff1615611da157600080fd5b8115611dc3576001600060146101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b611e1884848461271f565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e84611ecd90613bd5565b604051611eda9190613137565b60405180910390a450505050565b606060008260010290506000600260008381526020019081526020016000208054905011611f1557600080fd5b611f2183600102611552565b915050919050565b60608060606000611f3985610a84565b9150604767ffffffffffffffff811115611f5657611f556131d3565b5b6040519080825280601f01601f191660200182016040528015611f885781602001600182028036833780820191505090505b5092507f730000000000000000000000000000000000000000000000000000000000000083600081518110611fc057611fbf6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f680000000000000000000000000000000000000000000000000000000000000083600181518110612024576120236137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f610000000000000000000000000000000000000000000000000000000000000083600281518110612088576120876137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3200000000000000000000000000000000000000000000000000000000000000836003815181106120ec576120eb6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3500000000000000000000000000000000000000000000000000000000000000836004815181106121505761214f6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3600000000000000000000000000000000000000000000000000000000000000836005815181106121b4576121b36137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a0000000000000000000000000000000000000000000000000000000000000083600681518110612218576122176137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b60408110156123175782818151811061226a576122696137dc565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106122c7576122c66137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180612301906138b0565b925050808061230f906138b0565b91505061224e565b50829350505050919050565b600080600260008581526020019081526020016000208361ffff168154811061234f5761234e6137dc565b5b90600052602060002001905080600001600c9054906101000a900460ff161561237757600080fd5b60008361ffff161480156123a9575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b156124085760018160000160068282829054906101000a900465ffffffffffff166123d49190613c3c565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506124008585611b08565b9150506124cf565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461246057600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff16106124a857600080fd5b6124cb8585858460000160069054906101000a900465ffffffffffff1685612a36565b9150505b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600260008681526020019081526020016000208461ffff168154811061259a576125996137dc565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125fe57600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff161161262957600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff161061265b57600080fd5b6126688686868685612a36565b915050949350505050565b6000806003600084815260200190815260200160002054905061269581612cb4565b61269e57600080fd5b6126a781612ce6565b156126b5578291505061271a565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612776919061302b565b602060405180830381865afa158015612793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b79190613c8b565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146127f157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612925573373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061291b57503373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61292457600080fd5b5b60006004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506129828284612d18565b6001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129d291906138f8565b925050819055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a29919061387c565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff16831792508260010290506000600102600360008381526020019081526020016000205414612ac957600080fd5b84600001600c9054906101000a900460ff16612b2b578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1614612b2a57600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff16612bac9190613c3c565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055508160010260036000838152602001908152602001600020819055506001600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c39919061387c565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051612c9d919061302b565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b600080836001029050600360008281526020019081526020016000205460019004915060008203612d4857600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600360008381526020019081526020016000208190555050505050565b6040518060600160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e2581612df0565b8114612e3057600080fd5b50565b600081359050612e4281612e1c565b92915050565b600060208284031215612e5e57612e5d612de6565b5b6000612e6c84828501612e33565b91505092915050565b60008115159050919050565b612e8a81612e75565b82525050565b6000602082019050612ea56000830184612e81565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ee5578082015181840152602081019050612eca565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f0d82612eab565b612f178185612eb6565b9350612f27818560208601612ec7565b612f3081612ef1565b840191505092915050565b60006020820190508181036000830152612f558184612f02565b905092915050565b6000819050919050565b612f7081612f5d565b8114612f7b57600080fd5b50565b600081359050612f8d81612f67565b92915050565b600060208284031215612fa957612fa8612de6565b5b6000612fb784828501612f7e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612feb82612fc0565b9050919050565b612ffb81612fe0565b82525050565b60006020820190506130166000830184612ff2565b92915050565b61302581612f5d565b82525050565b6000602082019050613040600083018461301c565b92915050565b61304f81612fe0565b811461305a57600080fd5b50565b60008135905061306c81613046565b92915050565b60008060006060848603121561308b5761308a612de6565b5b60006130998682870161305d565b93505060206130aa8682870161305d565b92505060406130bb86828701612f7e565b9150509250925092565b6000819050919050565b6130d8816130c5565b81146130e357600080fd5b50565b6000813590506130f5816130cf565b92915050565b60006020828403121561311157613110612de6565b5b600061311f848285016130e6565b91505092915050565b613131816130c5565b82525050565b600060208201905061314c6000830184613128565b92915050565b600081519050919050565b600082825260208201905092915050565b600061317982613152565b613183818561315d565b9350613193818560208601612ec7565b61319c81612ef1565b840191505092915050565b600060208201905081810360008301526131c1818461316e565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61320b82612ef1565b810181811067ffffffffffffffff8211171561322a576132296131d3565b5b80604052505050565b600061323d612ddc565b90506132498282613202565b919050565b600067ffffffffffffffff821115613269576132686131d3565b5b61327282612ef1565b9050602081019050919050565b82818337600083830152505050565b60006132a161329c8461324e565b613233565b9050828152602081018484840111156132bd576132bc6131ce565b5b6132c884828561327f565b509392505050565b600082601f8301126132e5576132e46131c9565b5b81356132f584826020860161328e565b91505092915050565b60006020828403121561331457613313612de6565b5b600082013567ffffffffffffffff81111561333257613331612deb565b5b61333e848285016132d0565b91505092915050565b600065ffffffffffff82169050919050565b61336281613347565b811461336d57600080fd5b50565b60008135905061337f81613359565b92915050565b6000806040838503121561339c5761339b612de6565b5b60006133aa858286016130e6565b92505060206133bb85828601613370565b9150509250929050565b600080604083850312156133dc576133db612de6565b5b60006133ea858286016130e6565b92505060206133fb85828601612f7e565b9150509250929050565b61340e81613347565b82525050565b60006060820190506134296000830186613405565b6134366020830185613405565b6134436040830184612e81565b949350505050565b60006020828403121561346157613460612de6565b5b600061346f8482850161305d565b91505092915050565b61348181612e75565b811461348c57600080fd5b50565b60008135905061349e81613478565b92915050565b600080604083850312156134bb576134ba612de6565b5b60006134c98582860161305d565b92505060206134da8582860161348f565b9150509250929050565b600080604083850312156134fb576134fa612de6565b5b60006135098582860161305d565b925050602061351a858286016130e6565b9150509250929050565b600067ffffffffffffffff82111561353f5761353e6131d3565b5b61354882612ef1565b9050602081019050919050565b600061356861356384613524565b613233565b905082815260208101848484011115613584576135836131ce565b5b61358f84828561327f565b509392505050565b600082601f8301126135ac576135ab6131c9565b5b81356135bc848260208601613555565b91505092915050565b600080600080608085870312156135df576135de612de6565b5b60006135ed8782880161305d565b94505060206135fe8782880161305d565b935050604061360f87828801612f7e565b925050606085013567ffffffffffffffff8111156136305761362f612deb565b5b61363c87828801613597565b91505092959194509250565b600061ffff82169050919050565b61365f81613648565b811461366a57600080fd5b50565b60008135905061367c81613656565b92915050565b60008060006060848603121561369b5761369a612de6565b5b60006136a98682870161305d565b93505060206136ba868287016130e6565b92505060406136cb8682870161366d565b9150509250925092565b600080604083850312156136ec576136eb612de6565b5b60006136fa8582860161305d565b925050602061370b8582860161305d565b9150509250929050565b6000806000806080858703121561372f5761372e612de6565b5b600061373d8782880161305d565b945050602061374e878288016130e6565b935050604061375f8782880161366d565b925050606061377087828801613370565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137c357607f821691505b6020821081036137d6576137d561377c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138528261380b565b915061385d8361380b565b9250828201905060ff81111561387657613875613818565b5b92915050565b600061388782612f5d565b915061389283612f5d565b92508282019050808211156138aa576138a9613818565b5b92915050565b60006138bb82612f5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138ed576138ec613818565b5b600182019050919050565b600061390382612f5d565b915061390e83612f5d565b925082820390508181111561392657613925613818565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026139917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613951565b61399b8683613951565b95508019841693508086168417925050509392505050565b6000819050919050565b60006139d86139d36139ce84612f5d565b6139b3565b612f5d565b9050919050565b6000819050919050565b6139f2836139bd565b613a066139fe826139df565b848454613961565b825550505050565b600090565b613a1b613a0e565b613a268184846139e9565b505050565b5b81811015613a4a57613a3f600082613a13565b600181019050613a2c565b5050565b601f821115613a8f57613a608161392c565b613a6984613941565b81016020851015613a78578190505b613a8c613a8485613941565b830182613a2b565b50505b505050565b60008160020a8304905092915050565b6000613ab560001984600802613a94565b1980831691505092915050565b6000613ace8383613aa4565b9150826002028217905092915050565b613ae782613152565b67ffffffffffffffff811115613b0057613aff6131d3565b5b613b0a82546137ab565b613b15828285613a4e565b600060209050601f831160018114613b485760008415613b36578287015190505b613b408582613ac2565b865550613ba8565b601f198416613b568661392c565b60005b82811015613b7e57848901518255600182019150602085019450602081019050613b59565b86831015613b9b5784890151613b97601f891682613aa4565b8355505b6001600288020188555050505b505050505050565b6000819050602082019050919050565b6000613bcc82516130c5565b80915050919050565b6000613be082613152565b82613bea84613bb0565b9050613bf581613bc0565b92506020821015613c3557613c307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613951565b831692505b5050919050565b6000613c4782613347565b9150613c5283613347565b9250828201905065ffffffffffff811115613c7057613c6f613818565b5b92915050565b600081519050613c8581613046565b92915050565b600060208284031215613ca157613ca0612de6565b5b6000613caf84828501613c76565b9150509291505056fea264697066735822122068552215e0e6a8df402cfef150f4f27d29f7e142d614f38c9d6fc5998835ea9264736f6c63430008110033
+\ No newline at end of file
diff --git a/js/contract/CraftNFT.json b/js/contract/CraftNFT.json
@@ -1 +1 @@
-[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"bytes32","name":"_declaration","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"uint48","name":"_count","type":"uint48"},{"indexed":false,"internalType":"bytes32","name":"_tokenId","type":"bytes32"}],"name":"Allocate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"TransferWithData","type":"event"},{"inputs":[{"internalType":"bytes32","name":"content","type":"bytes32"},{"internalType":"uint48","name":"count","type":"uint48"}],"name":"allocate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURL","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"declaration","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_truncatedId","type":"bytes32"}],"name":"getDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_index","type":"uint48"}],"name":"mintExactFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"}],"name":"mintFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"}],"name":"mintTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintedToken","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseString","type":"string"}],"name":"setBaseURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"toURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"toURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"token","outputs":[{"internalType":"uint48","name":"count","type":"uint48"},{"internalType":"uint48","name":"cursor","type":"uint48"},{"internalType":"bool","name":"sparse","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"bool","name":"_final","type":"bool"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
+[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"bytes32","name":"_declaration","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"uint48","name":"_count","type":"uint48"},{"indexed":false,"internalType":"bytes32","name":"_tokenId","type":"bytes32"}],"name":"Allocate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"TransferWithData","type":"event"},{"inputs":[{"internalType":"bytes32","name":"content","type":"bytes32"},{"internalType":"uint48","name":"count","type":"uint48"}],"name":"allocate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURL","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"declaration","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_truncatedId","type":"bytes32"}],"name":"getDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"getDigestHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_index","type":"uint48"}],"name":"mintExactFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"}],"name":"mintFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"}],"name":"mintTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintedToken","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseString","type":"string"}],"name":"setBaseURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"toURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"toURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"token","outputs":[{"internalType":"uint48","name":"count","type":"uint48"},{"internalType":"uint48","name":"cursor","type":"uint48"},{"internalType":"bool","name":"sparse","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"bool","name":"_final","type":"bool"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
diff --git a/python/craft_nft/data/CraftNFT.bin b/python/craft_nft/data/CraftNFT.bin
@@ -1 +1 @@
-60806040523480156200001157600080fd5b506040516200432738038062004327833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060098190555082600690816200008f919062000564565b508160079081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b613ccc806200065b6000396000f3fe6080604052600436106101d4576000357c01000000000000000000000000000000000000000000000000000000009004806370a0823111610109578063b88d4fde116100a7578063d824ee4f11610081578063d824ee4f1461069c578063e985e9c5146106d9578063f117e17314610716578063f9613ab214610753576101d4565b8063b88d4fde14610606578063c87b56dd14610622578063c9796c391461065f576101d4565b8063a22cb465116100e3578063a22cb46514610538578063adf288df14610561578063b1a6afd31461059e578063b242e534146105c9576101d4565b806370a08231146104a55780638da5cb5b146104e257806395d89b411461050d576101d4565b806342842e0e116101765780634f64b2be116101505780634f64b2be146103af578063559f5dc9146103ec5780636352211e1461042b57806369e85c7114610468576101d4565b806342842e0e1461032d57806349f2553a146103495780634d03546a14610372576101d4565b806318160ddd116101b257806318160ddd1461027e57806323b872dd146102a957806324e0febc146102c557806340c84b0e14610302576101d4565b806301ffc9a7146101d957806306fdde0314610216578063081812fc14610241575b600080fd5b3480156101e557600080fd5b5061020060048036038101906101fb9190612e26565b610790565b60405161020d9190612e6e565b60405180910390f35b34801561022257600080fd5b5061022b610936565b6040516102389190612f19565b60405180910390f35b34801561024d57600080fd5b5061026860048036038101906102639190612f71565b6109c4565b6040516102759190612fdf565b60405180910390f35b34801561028a57600080fd5b50610293610a01565b6040516102a09190613009565b60405180910390f35b6102c360048036038101906102be9190613050565b610a0b565b005b3480156102d157600080fd5b506102ec60048036038101906102e791906130d9565b610a76565b6040516102f99190613115565b60405180910390f35b34801561030e57600080fd5b50610317610a8e565b6040516103249190613185565b60405180910390f35b61034760048036038101906103429190613050565b610b1c565b005b34801561035557600080fd5b50610370600480360381019061036b91906132dc565b610b87565b005b34801561037e57600080fd5b5061039960048036038101906103949190613363565b610e9f565b6040516103a69190612e6e565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190612f71565b611129565b6040516103e39190613115565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906133a3565b61114d565b604051610422939291906133f2565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190612f71565b6111c1565b60405161045f9190612fdf565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906130d9565b6111fd565b60405161049c9190612f19565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190613429565b611416565b6040516104d99190613009565b60405180910390f35b3480156104ee57600080fd5b506104f761145f565b6040516105049190612fdf565b60405180910390f35b34801561051957600080fd5b50610522611483565b60405161052f9190612f19565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613482565b611511565b005b34801561056d57600080fd5b50610588600480360381019061058391906134c2565b6117b3565b6040516105959190613115565b60405180910390f35b3480156105aa57600080fd5b506105b36119d1565b6040516105c09190613115565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613482565b6119d7565b6040516105fd9190612e6e565b60405180910390f35b610620600480360381019061061b91906135a3565b611ab8565b005b34801561062e57600080fd5b5061064960048036038101906106449190612f71565b611b93565b6040516106569190612f19565b60405180910390f35b34801561066b57600080fd5b50610686600480360381019061068191906130d9565b611ba8565b6040516106939190612f19565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be9190613660565b611fa2565b6040516106d09190613115565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb91906136b3565b612155565b60405161070d9190612e6e565b60405180910390f35b34801561072257600080fd5b5061073d600480360381019061073891906136f3565b6121ed565b60405161074a9190613115565b60405180910390f35b34801561075f57600080fd5b5061077a600480360381019061077591906130d9565b6122f2565b6040516107879190613115565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036107e45760019050610931565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108365760019050610931565b63780e9d637c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108885760019050610931565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108da5760019050610931565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361092c5760019050610931565b600090505b919050565b6006805461094390613789565b80601f016020809104026020016040519081016040528092919081815260200182805461096f90613789565b80156109bc5780601f10610991576101008083540402835291602001916109bc565b820191906000526020600020905b81548152906001019060200180831161099f57829003601f168201915b505050505081565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600854905090565b610a1683838361239e565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60036020528060005260406000206000915090505481565b600a8054610a9b90613789565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac790613789565b8015610b145780601f10610ae957610100808354040283529160200191610b14565b820191906000526020600020905b815481529060010190602001808311610af757829003601f168201915b505050505081565b610b2783838361239e565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be457600080fd5b82915081519050602f7f01000000000000000000000000000000000000000000000000000000000000000282600183610c1d91906137e9565b81518110610c2e57610c2d61381d565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610cae578080610caa9061384c565b9150505b8067ffffffffffffffff811115610cc857610cc76131b1565b5b6040519080825280601f01601f191660200182016040528015610cfa5781602001600182028036833780820191505090505b50600a9081610d099190613a46565b5060005b8251811015610dfa57828181518110610d2957610d2861381d565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600a828154610d8190613789565b8110610d9057610d8f61381d565b5b815460011615610daf5790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055508080610df29061384c565b915050610d0d565b5081518114610e9a577f2f00000000000000000000000000000000000000000000000000000000000000600a83518154610e3390613789565b8110610e4257610e4161381d565b5b815460011615610e615790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610efa57600080fd5b610f02612d87565b600260008681526020019081526020016000208054905091506000821115610f7f57600060026000878152602001908152602001600020600081548110610f4c57610f4b61381d565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1611610f7e57600080fd5b5b83816000019065ffffffffffff16908165ffffffffffff168152505060026000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff0219169083151502179055505050600185908060018154018082558091505060019003906000526020600020016000909190919091505560008465ffffffffffff16036110a4576001600860008282546110989190613b18565b925050819055506110c6565b8365ffffffffffff16600860008282546110be9190613b18565b925050819055505b8365ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb85ba54b9f6f8241b7e1499e3cfc186ac0b1c8b7100f599bf6ca6844f896c342876040516111159190613115565b60405180910390a360019250505092915050565b6001818154811061113957600080fd5b906000526020600020016000915090505481565b6002602052816000526040600020818154811061116957600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff16905083565b600080600360008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061120d856126b5565b9150600a805461121c90613789565b9050905080825161122d9190613b18565b67ffffffffffffffff811115611246576112456131b1565b5b6040519080825280601f01601f1916602001820160405280156112785781602001600182028036833780820191505090505b50925060005b8181101561133d57600a81815461129490613789565b81106112a3576112a261381d565b5b8154600116156112c25790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106112fb576112fa61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806113359061384c565b91505061127e565b5060005b825181101561140a5782818151811061135d5761135c61381d565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106113ba576113b961381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535081806113f49061384c565b92505080806114029061384c565b915050611341565b50829350505050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6007805461149090613789565b80601f01602080910402602001604051908101604052809291908181526020018280546114bc90613789565b80156115095780601f106114de57610100808354040283529160200191611509565b820191906000526020600020905b8154815290600101906020018083116114ec57829003601f168201915b505050505081565b801561163257600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115af57600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061174a565b600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036116ca57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117a79190612e6e565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461180e57600080fd5b600160026000858152602001908152602001600020805490501461183157600080fd5b6000600260008581526020019081526020016000206000815481106118595761185861381d565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff161461188b57600080fd5b60006001026003600085815260200190815260200160002054146118ae57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260036000858152602001908152602001600020819055506001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119579190613b18565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885600190046040516119bf9190613009565b60405180910390a38291505092915050565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a3257600080fd5b600060149054906101000a900460ff1615611a4c57600080fd5b8115611a6e576001600060146101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b611ac384848461239e565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e84611b7890613b71565b604051611b859190613115565b60405180910390a450505050565b6060611ba1826001026111fd565b9050919050565b60608060606000611bb8856126b5565b9150604767ffffffffffffffff811115611bd557611bd46131b1565b5b6040519080825280601f01601f191660200182016040528015611c075781602001600182028036833780820191505090505b5092507f730000000000000000000000000000000000000000000000000000000000000083600081518110611c3f57611c3e61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f680000000000000000000000000000000000000000000000000000000000000083600181518110611ca357611ca261381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f610000000000000000000000000000000000000000000000000000000000000083600281518110611d0757611d0661381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f320000000000000000000000000000000000000000000000000000000000000083600381518110611d6b57611d6a61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f350000000000000000000000000000000000000000000000000000000000000083600481518110611dcf57611dce61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f360000000000000000000000000000000000000000000000000000000000000083600581518110611e3357611e3261381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a0000000000000000000000000000000000000000000000000000000000000083600681518110611e9757611e9661381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b6040811015611f9657828181518110611ee957611ee861381d565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002848381518110611f4657611f4561381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611f809061384c565b9250508080611f8e9061384c565b915050611ecd565b50829350505050919050565b600080600260008581526020019081526020016000208361ffff1681548110611fce57611fcd61381d565b5b90600052602060002001905080600001600c9054906101000a900460ff1615611ff657600080fd5b60008361ffff16148015612028575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b156120875760018160000160068282829054906101000a900465ffffffffffff166120539190613bd8565b92506101000a81548165ffffffffffff021916908365ffffffffffff16021790555061207f85856117b3565b91505061214e565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146120df57600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff161061212757600080fd5b61214a8585858460000160069054906101000a900465ffffffffffff1685612a14565b9150505b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600260008681526020019081526020016000208461ffff16815481106122195761221861381d565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461227d57600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff16116122a857600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff16106122da57600080fd5b6122e78686868685612a14565b915050949350505050565b6000806003600084815260200190815260200160002054905061231481612c92565b61231d57600080fd5b61232681612cc4565b156123345782915050612399565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016123f59190613009565b602060405180830381865afa158015612412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124369190613c27565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461247057600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146125a4573373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061259a57503373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6125a357600080fd5b5b60006004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126018284612cf6565b6001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461265191906137e9565b925050819055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a89190613b18565b9250508190555050505050565b606080600080604067ffffffffffffffff8111156126d6576126d56131b1565b5b6040519080825280601f01601f1916602001820160405280156127085781602001600182028036833780820191505090505b5092506000905060005b6020811015612a0857600460f08783602081106127325761273161381d565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff16101561280a576030836127a19190613c61565b7f0100000000000000000000000000000000000000000000000000000000000000028483815181106127d6576127d561381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061287c565b6057836128179190613c61565b7f01000000000000000000000000000000000000000000000000000000000000000284838151811061284c5761284b61381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f8682602081106128915761289061381d565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015612968576030836128f39190613c61565b7f010000000000000000000000000000000000000000000000000000000000000002846001846129239190613b18565b815181106129345761293361381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506129e6565b6057836129759190613c61565b7f010000000000000000000000000000000000000000000000000000000000000002846001846129a59190613b18565b815181106129b6576129b561381d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b6002826129f39190613b18565b91508080612a009061384c565b915050612712565b50829350505050919050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff16831792508260010290506000600102600360008381526020019081526020016000205414612aa757600080fd5b84600001600c9054906101000a900460ff16612b09578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1614612b0857600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff16612b8a9190613bd8565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055508160010260036000838152602001908152602001600020819055506001600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c179190613b18565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051612c7b9190613009565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b600080836001029050600360008281526020019081526020016000205460019004915060008203612d2657600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600360008381526020019081526020016000208190555050505050565b6040518060600160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0381612dce565b8114612e0e57600080fd5b50565b600081359050612e2081612dfa565b92915050565b600060208284031215612e3c57612e3b612dc4565b5b6000612e4a84828501612e11565b91505092915050565b60008115159050919050565b612e6881612e53565b82525050565b6000602082019050612e836000830184612e5f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ec3578082015181840152602081019050612ea8565b60008484015250505050565b6000601f19601f8301169050919050565b6000612eeb82612e89565b612ef58185612e94565b9350612f05818560208601612ea5565b612f0e81612ecf565b840191505092915050565b60006020820190508181036000830152612f338184612ee0565b905092915050565b6000819050919050565b612f4e81612f3b565b8114612f5957600080fd5b50565b600081359050612f6b81612f45565b92915050565b600060208284031215612f8757612f86612dc4565b5b6000612f9584828501612f5c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fc982612f9e565b9050919050565b612fd981612fbe565b82525050565b6000602082019050612ff46000830184612fd0565b92915050565b61300381612f3b565b82525050565b600060208201905061301e6000830184612ffa565b92915050565b61302d81612fbe565b811461303857600080fd5b50565b60008135905061304a81613024565b92915050565b60008060006060848603121561306957613068612dc4565b5b60006130778682870161303b565b93505060206130888682870161303b565b925050604061309986828701612f5c565b9150509250925092565b6000819050919050565b6130b6816130a3565b81146130c157600080fd5b50565b6000813590506130d3816130ad565b92915050565b6000602082840312156130ef576130ee612dc4565b5b60006130fd848285016130c4565b91505092915050565b61310f816130a3565b82525050565b600060208201905061312a6000830184613106565b92915050565b600081519050919050565b600082825260208201905092915050565b600061315782613130565b613161818561313b565b9350613171818560208601612ea5565b61317a81612ecf565b840191505092915050565b6000602082019050818103600083015261319f818461314c565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6131e982612ecf565b810181811067ffffffffffffffff82111715613208576132076131b1565b5b80604052505050565b600061321b612dba565b905061322782826131e0565b919050565b600067ffffffffffffffff821115613247576132466131b1565b5b61325082612ecf565b9050602081019050919050565b82818337600083830152505050565b600061327f61327a8461322c565b613211565b90508281526020810184848401111561329b5761329a6131ac565b5b6132a684828561325d565b509392505050565b600082601f8301126132c3576132c26131a7565b5b81356132d384826020860161326c565b91505092915050565b6000602082840312156132f2576132f1612dc4565b5b600082013567ffffffffffffffff8111156133105761330f612dc9565b5b61331c848285016132ae565b91505092915050565b600065ffffffffffff82169050919050565b61334081613325565b811461334b57600080fd5b50565b60008135905061335d81613337565b92915050565b6000806040838503121561337a57613379612dc4565b5b6000613388858286016130c4565b92505060206133998582860161334e565b9150509250929050565b600080604083850312156133ba576133b9612dc4565b5b60006133c8858286016130c4565b92505060206133d985828601612f5c565b9150509250929050565b6133ec81613325565b82525050565b600060608201905061340760008301866133e3565b61341460208301856133e3565b6134216040830184612e5f565b949350505050565b60006020828403121561343f5761343e612dc4565b5b600061344d8482850161303b565b91505092915050565b61345f81612e53565b811461346a57600080fd5b50565b60008135905061347c81613456565b92915050565b6000806040838503121561349957613498612dc4565b5b60006134a78582860161303b565b92505060206134b88582860161346d565b9150509250929050565b600080604083850312156134d9576134d8612dc4565b5b60006134e78582860161303b565b92505060206134f8858286016130c4565b9150509250929050565b600067ffffffffffffffff82111561351d5761351c6131b1565b5b61352682612ecf565b9050602081019050919050565b600061354661354184613502565b613211565b905082815260208101848484011115613562576135616131ac565b5b61356d84828561325d565b509392505050565b600082601f83011261358a576135896131a7565b5b813561359a848260208601613533565b91505092915050565b600080600080608085870312156135bd576135bc612dc4565b5b60006135cb8782880161303b565b94505060206135dc8782880161303b565b93505060406135ed87828801612f5c565b925050606085013567ffffffffffffffff81111561360e5761360d612dc9565b5b61361a87828801613575565b91505092959194509250565b600061ffff82169050919050565b61363d81613626565b811461364857600080fd5b50565b60008135905061365a81613634565b92915050565b60008060006060848603121561367957613678612dc4565b5b60006136878682870161303b565b9350506020613698868287016130c4565b92505060406136a98682870161364b565b9150509250925092565b600080604083850312156136ca576136c9612dc4565b5b60006136d88582860161303b565b92505060206136e98582860161303b565b9150509250929050565b6000806000806080858703121561370d5761370c612dc4565b5b600061371b8782880161303b565b945050602061372c878288016130c4565b935050604061373d8782880161364b565b925050606061374e8782880161334e565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137a157607f821691505b6020821081036137b4576137b361375a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137f482612f3b565b91506137ff83612f3b565b9250828203905081811115613817576138166137ba565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061385782612f3b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613889576138886137ba565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026138f97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826138b9565b61390386836138b9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061394061393b61393684612f3b565b61391b565b612f3b565b9050919050565b6000819050919050565b61395a83613925565b61396e61396682613947565b8484546138c9565b825550505050565b600090565b613983613976565b61398e818484613951565b505050565b5b818110156139b2576139a760008261397b565b600181019050613994565b5050565b601f8211156139f7576139c881613894565b6139d1846138a9565b810160208510156139e0578190505b6139f46139ec856138a9565b830182613993565b50505b505050565b60008160020a8304905092915050565b6000613a1d600019846008026139fc565b1980831691505092915050565b6000613a368383613a0c565b9150826002028217905092915050565b613a4f82613130565b67ffffffffffffffff811115613a6857613a676131b1565b5b613a728254613789565b613a7d8282856139b6565b600060209050601f831160018114613ab05760008415613a9e578287015190505b613aa88582613a2a565b865550613b10565b601f198416613abe86613894565b60005b82811015613ae657848901518255600182019150602085019450602081019050613ac1565b86831015613b035784890151613aff601f891682613a0c565b8355505b6001600288020188555050505b505050505050565b6000613b2382612f3b565b9150613b2e83612f3b565b9250828201905080821115613b4657613b456137ba565b5b92915050565b6000819050602082019050919050565b6000613b6882516130a3565b80915050919050565b6000613b7c82613130565b82613b8684613b4c565b9050613b9181613b5c565b92506020821015613bd157613bcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026138b9565b831692505b5050919050565b6000613be382613325565b9150613bee83613325565b9250828201905065ffffffffffff811115613c0c57613c0b6137ba565b5b92915050565b600081519050613c2181613024565b92915050565b600060208284031215613c3d57613c3c612dc4565b5b6000613c4b84828501613c12565b91505092915050565b600060ff82169050919050565b6000613c6c82613c54565b9150613c7783613c54565b9250828201905060ff811115613c9057613c8f6137ba565b5b9291505056fea264697066735822122077361d598f679782404ae11030ea625cd25005a2e158b847efb53141c9485e9b64736f6c63430008110033
-\ No newline at end of file
+60806040523480156200001157600080fd5b506040516200434938038062004349833981810160405281019062000037919062000279565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060098190555082600690816200008f919062000564565b508160079081620000a1919062000564565b505050506200064b565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200011482620000c9565b810181811067ffffffffffffffff82111715620001365762000135620000da565b5b80604052505050565b60006200014b620000ab565b905062000159828262000109565b919050565b600067ffffffffffffffff8211156200017c576200017b620000da565b5b6200018782620000c9565b9050602081019050919050565b60005b83811015620001b457808201518184015260208101905062000197565b60008484015250505050565b6000620001d7620001d1846200015e565b6200013f565b905082815260208101848484011115620001f657620001f5620000c4565b5b6200020384828562000194565b509392505050565b600082601f830112620002235762000222620000bf565b5b815162000235848260208601620001c0565b91505092915050565b6000819050919050565b62000253816200023e565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b600080600060608486031215620002955762000294620000b5565b5b600084015167ffffffffffffffff811115620002b657620002b5620000ba565b5b620002c4868287016200020b565b935050602084015167ffffffffffffffff811115620002e857620002e7620000ba565b5b620002f6868287016200020b565b9250506040620003098682870162000262565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200036657607f821691505b6020821081036200037c576200037b6200031e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620003e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003a7565b620003f58683620003a7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004426200043c62000436846200040d565b62000417565b6200040d565b9050919050565b6000819050919050565b6200045e8362000421565b620004766200046d8262000449565b848454620003b7565b825550505050565b600090565b6200048d6200047e565b6200049a81848462000453565b505050565b5b81811015620004c257620004b660008262000483565b600181019050620004a0565b5050565b601f8211156200051157620004db8162000382565b620004e68462000397565b81016020851015620004f6578190505b6200050e620005058562000397565b8301826200049f565b50505b505050565b60008160020a8304905092915050565b6000620005396000198460080262000516565b1980831691505092915050565b600062000554838362000526565b9150826002028217905092915050565b6200056f8262000313565b67ffffffffffffffff8111156200058b576200058a620000da565b5b6200059782546200034d565b620005a4828285620004c6565b600060209050601f831160018114620005dc5760008415620005c7578287015190505b620005d3858262000546565b86555062000643565b601f198416620005ec8662000382565b60005b828110156200061657848901518255600182019150602085019450602081019050620005ef565b8683101562000636578489015162000632601f89168262000526565b8355505b6001600288020188555050505b505050505050565b613cee806200065b6000396000f3fe6080604052600436106101df576000357c01000000000000000000000000000000000000000000000000000000009004806369e85c7111610114578063b242e534116100b2578063d824ee4f11610081578063d824ee4f146106e4578063e985e9c514610721578063f117e1731461075e578063f9613ab21461079b576101df565b8063b242e53414610611578063b88d4fde1461064e578063c87b56dd1461066a578063c9796c39146106a7576101df565b806395d89b41116100ee57806395d89b4114610555578063a22cb46514610580578063adf288df146105a9578063b1a6afd3146105e6576101df565b806369e85c71146104b057806370a08231146104ed5780638da5cb5b1461052a576101df565b806340c84b0e116101815780634d03546a1161015b5780634d03546a146103ba5780634f64b2be146103f7578063559f5dc9146104345780636352211e14610473576101df565b806340c84b0e1461034a57806342842e0e1461037557806349f2553a14610391576101df565b806318160ddd116101bd57806318160ddd1461028957806323b872dd146102b457806324e0febc146102d05780633fd2f5931461030d576101df565b806301ffc9a7146101e457806306fdde0314610221578063081812fc1461024c575b600080fd5b3480156101f057600080fd5b5061020b60048036038101906102069190612e48565b6107d8565b6040516102189190612e90565b60405180910390f35b34801561022d57600080fd5b5061023661092c565b6040516102439190612f3b565b60405180910390f35b34801561025857600080fd5b50610273600480360381019061026e9190612f93565b6109ba565b6040516102809190613001565b60405180910390f35b34801561029557600080fd5b5061029e6109f7565b6040516102ab919061302b565b60405180910390f35b6102ce60048036038101906102c99190613072565b610a01565b005b3480156102dc57600080fd5b506102f760048036038101906102f291906130fb565b610a6c565b6040516103049190613137565b60405180910390f35b34801561031957600080fd5b50610334600480360381019061032f91906130fb565b610a84565b60405161034191906131a7565b60405180910390f35b34801561035657600080fd5b5061035f610de3565b60405161036c91906131a7565b60405180910390f35b61038f600480360381019061038a9190613072565b610e71565b005b34801561039d57600080fd5b506103b860048036038101906103b391906132fe565b610edc565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190613385565b6111f4565b6040516103ee9190612e90565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612f93565b61147e565b60405161042b9190613137565b60405180910390f35b34801561044057600080fd5b5061045b600480360381019061045691906133c5565b6114a2565b60405161046a93929190613414565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190612f93565b611516565b6040516104a79190613001565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d291906130fb565b611552565b6040516104e49190612f3b565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f919061344b565b61176b565b604051610521919061302b565b60405180910390f35b34801561053657600080fd5b5061053f6117b4565b60405161054c9190613001565b60405180910390f35b34801561056157600080fd5b5061056a6117d8565b6040516105779190612f3b565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a291906134a4565b611866565b005b3480156105b557600080fd5b506105d060048036038101906105cb91906134e4565b611b08565b6040516105dd9190613137565b60405180910390f35b3480156105f257600080fd5b506105fb611d26565b6040516106089190613137565b60405180910390f35b34801561061d57600080fd5b50610638600480360381019061063391906134a4565b611d2c565b6040516106459190612e90565b60405180910390f35b610668600480360381019061066391906135c5565b611e0d565b005b34801561067657600080fd5b50610691600480360381019061068c9190612f93565b611ee8565b60405161069e9190612f3b565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906130fb565b611f29565b6040516106db9190612f3b565b60405180910390f35b3480156106f057600080fd5b5061070b60048036038101906107069190613682565b612323565b6040516107189190613137565b60405180910390f35b34801561072d57600080fd5b50610748600480360381019061074391906136d5565b6124d6565b6040516107559190612e90565b60405180910390f35b34801561076a57600080fd5b5061078560048036038101906107809190613715565b61256e565b6040516107929190613137565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd91906130fb565b612673565b6040516107cf9190613137565b60405180910390f35b60006380ac58cd7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361082c5760019050610927565b635b5e139f7c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361087e5760019050610927565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036108d05760019050610927565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036109225760019050610927565b600090505b919050565b60068054610939906137ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610965906137ab565b80156109b25780601f10610987576101008083540402835291602001916109b2565b820191906000526020600020905b81548152906001019060200180831161099557829003601f168201915b505050505081565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600854905090565b610a0c83838361271f565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60036020528060005260406000206000915090505481565b606080600080604067ffffffffffffffff811115610aa557610aa46131d3565b5b6040519080825280601f01601f191660200182016040528015610ad75781602001600182028036833780820191505090505b5092506000905060005b6020811015610dd757600460f0878360208110610b0157610b006137dc565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff16908060020a82049150509250600a8360ff161015610bd957603083610b709190613847565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610ba557610ba46137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610c4b565b605783610be69190613847565b7f010000000000000000000000000000000000000000000000000000000000000002848381518110610c1b57610c1a6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600f868260208110610c6057610c5f6137dc565b5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004169250600a8360ff161015610d3757603083610cc29190613847565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610cf2919061387c565b81518110610d0357610d026137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610db5565b605783610d449190613847565b7f01000000000000000000000000000000000000000000000000000000000000000284600184610d74919061387c565b81518110610d8557610d846137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505b600282610dc2919061387c565b91508080610dcf906138b0565b915050610ae1565b50829350505050919050565b600a8054610df0906137ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1c906137ab565b8015610e695780601f10610e3e57610100808354040283529160200191610e69565b820191906000526020600020905b815481529060010190602001808311610e4c57829003601f168201915b505050505081565b610e7c83838361271f565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3957600080fd5b82915081519050602f7f01000000000000000000000000000000000000000000000000000000000000000282600183610f7291906138f8565b81518110610f8357610f826137dc565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611003578080610fff906138b0565b9150505b8067ffffffffffffffff81111561101d5761101c6131d3565b5b6040519080825280601f01601f19166020018201604052801561104f5781602001600182028036833780820191505090505b50600a908161105e9190613ade565b5060005b825181101561114f5782818151811061107e5761107d6137dc565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002600a8281546110d6906137ab565b81106110e5576110e46137dc565b5b8154600116156111045790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055508080611147906138b0565b915050611062565b50815181146111ef577f2f00000000000000000000000000000000000000000000000000000000000000600a83518154611188906137ab565b8110611197576111966137dc565b5b8154600116156111b65790600052602060002090602091828204019190065b601f036101000a81548160ff021916907f0100000000000000000000000000000000000000000000000000000000000000840402179055505b505050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461124f57600080fd5b611257612da9565b6002600086815260200190815260200160002080549050915060008211156112d4576000600260008781526020019081526020016000206000815481106112a1576112a06137dc565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff16116112d357600080fd5b5b83816000019065ffffffffffff16908165ffffffffffff168152505060026000868152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548160ff0219169083151502179055505050600185908060018154018082558091505060019003906000526020600020016000909190919091505560008465ffffffffffff16036113f9576001600860008282546113ed919061387c565b9250508190555061141b565b8365ffffffffffff1660086000828254611413919061387c565b925050819055505b8365ffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb85ba54b9f6f8241b7e1499e3cfc186ac0b1c8b7100f599bf6ca6844f896c3428760405161146a9190613137565b60405180910390a360019250505092915050565b6001818154811061148e57600080fd5b906000526020600020016000915090505481565b600260205281600052604060002081815481106114be57600080fd5b90600052602060002001600091509150508060000160009054906101000a900465ffffffffffff16908060000160069054906101000a900465ffffffffffff169080600001600c9054906101000a900460ff16905083565b600080600360008460010281526020019081526020016000205490506060819060020a026c010000000000000000000000009004915050919050565b6060806060600061156285610a84565b9150600a8054611571906137ab565b90509050808251611582919061387c565b67ffffffffffffffff81111561159b5761159a6131d3565b5b6040519080825280601f01601f1916602001820160405280156115cd5781602001600182028036833780820191505090505b50925060005b8181101561169257600a8181546115e9906137ab565b81106115f8576115f76137dc565b5b8154600116156116175790600052602060002090602091828204019190065b9054901a7f0100000000000000000000000000000000000000000000000000000000000000028482815181106116505761164f6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808061168a906138b0565b9150506115d3565b5060005b825181101561175f578281815181106116b2576116b16137dc565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000284838151811061170f5761170e6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180611749906138b0565b9250508080611757906138b0565b915050611696565b50829350505050919050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600780546117e5906137ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611811906137ab565b801561185e5780601f106118335761010080835404028352916020019161185e565b820191906000526020600020905b81548152906001019060200180831161184157829003601f168201915b505050505081565b801561198757600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190457600080fd5b81600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a9f565b600073ffffffffffffffffffffffffffffffffffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a1f57600080fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611afc9190612e90565b60405180910390a35050565b60008060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b6357600080fd5b6001600260008581526020019081526020016000208054905014611b8657600080fd5b600060026000858152602001908152602001600020600081548110611bae57611bad6137dc565b5b9060005260206000200160000160009054906101000a900465ffffffffffff1665ffffffffffff1614611be057600080fd5b6000600102600360008581526020019081526020016000205414611c0357600080fd5b8373ffffffffffffffffffffffffffffffffffffffff1690507fc000000000000000000000000000000000000000000000000000000000000000811790508060010260036000858152602001908152602001600020819055506001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cac919061387c565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f88560019004604051611d14919061302b565b60405180910390a38291505092915050565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d8757600080fd5b600060149054906101000a900460ff1615611da157600080fd5b8115611dc3576001600060146101000a81548160ff0219169083151502179055505b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001905092915050565b611e1884848461271f565b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f75c9e114f073c346aac7d1d7e9a3c3c14edabcdd27de07d1d9e425f45d318c5e84611ecd90613bd5565b604051611eda9190613137565b60405180910390a450505050565b606060008260010290506000600260008381526020019081526020016000208054905011611f1557600080fd5b611f2183600102611552565b915050919050565b60608060606000611f3985610a84565b9150604767ffffffffffffffff811115611f5657611f556131d3565b5b6040519080825280601f01601f191660200182016040528015611f885781602001600182028036833780820191505090505b5092507f730000000000000000000000000000000000000000000000000000000000000083600081518110611fc057611fbf6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f680000000000000000000000000000000000000000000000000000000000000083600181518110612024576120236137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f610000000000000000000000000000000000000000000000000000000000000083600281518110612088576120876137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3200000000000000000000000000000000000000000000000000000000000000836003815181106120ec576120eb6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3500000000000000000000000000000000000000000000000000000000000000836004815181106121505761214f6137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3600000000000000000000000000000000000000000000000000000000000000836005815181106121b4576121b36137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f3a0000000000000000000000000000000000000000000000000000000000000083600681518110612218576122176137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506007905060005b60408110156123175782818151811061226a576122696137dc565b5b60200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000028483815181106122c7576122c66137dc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508180612301906138b0565b925050808061230f906138b0565b91505061224e565b50829350505050919050565b600080600260008581526020019081526020016000208361ffff168154811061234f5761234e6137dc565b5b90600052602060002001905080600001600c9054906101000a900460ff161561237757600080fd5b60008361ffff161480156123a9575060008160000160009054906101000a900465ffffffffffff1665ffffffffffff16145b156124085760018160000160068282829054906101000a900465ffffffffffff166123d49190613c3c565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055506124008585611b08565b9150506124cf565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461246057600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168160000160069054906101000a900465ffffffffffff1665ffffffffffff16106124a857600080fd5b6124cb8585858460000160069054906101000a900465ffffffffffff1685612a36565b9150505b9392505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600080600260008681526020019081526020016000208461ffff168154811061259a576125996137dc565b5b90600052602060002001905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125fe57600080fd5b60008160000160009054906101000a900465ffffffffffff1665ffffffffffff161161262957600080fd5b8060000160009054906101000a900465ffffffffffff1665ffffffffffff168365ffffffffffff161061265b57600080fd5b6126688686868685612a36565b915050949350505050565b6000806003600084815260200190815260200160002054905061269581612cb4565b61269e57600080fd5b6126a781612ce6565b156126b5578291505061271a565b7effffffffffffffff00000000000000000000000000000000000000000000006001028116905060b881908060020a820491505090507fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000600102831681179050809150505b919050565b60003073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612776919061302b565b602060405180830381865afa158015612793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b79190613c8b565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146127f157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612925573373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061291b57503373ffffffffffffffffffffffffffffffffffffffff16600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61292457600080fd5b5b60006004600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506129828284612d18565b6001600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129d291906138f8565b925050819055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a29919061387c565b9250508190555050505050565b6000806000807fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008860019004169250603067ffffffffffffffff8861ffff161667ffffffffffffffff169060020a0267ffffffffffffffff16831792508565ffffffffffff16831792508260010290506000600102600360008381526020019081526020016000205414612ac957600080fd5b84600001600c9054906101000a900460ff16612b2b578460000160069054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1614612b2a57600185600001600c6101000a81548160ff0219169083151502179055505b5b67ffffffffffffffff886001900416915060b8829060020a0291507f8000000000000000000000000000000000000000000000000000000000000000821791508873ffffffffffffffffffffffffffffffffffffffff168217915060018560000160068282829054906101000a900465ffffffffffff16612bac9190613c3c565b92506101000a81548165ffffffffffff021916908365ffffffffffff1602179055508160010260036000838152602001908152602001600020819055506001600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c39919061387c565b925050819055508873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f885604051612c9d919061302b565b60405180910390a380935050505095945050505050565b6000807f8000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b6000807f4000000000000000000000000000000000000000000000000000000000000000836001900416119050919050565b600080836001029050600360008281526020019081526020016000205460019004915060008203612d4857600080fd5b7fffffffffffffffffffffffff0000000000000000000000000000000000000000821691508273ffffffffffffffffffffffffffffffffffffffff168217915081600102600360008381526020019081526020016000208190555050505050565b6040518060600160405280600065ffffffffffff168152602001600065ffffffffffff1681526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e2581612df0565b8114612e3057600080fd5b50565b600081359050612e4281612e1c565b92915050565b600060208284031215612e5e57612e5d612de6565b5b6000612e6c84828501612e33565b91505092915050565b60008115159050919050565b612e8a81612e75565b82525050565b6000602082019050612ea56000830184612e81565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ee5578082015181840152602081019050612eca565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f0d82612eab565b612f178185612eb6565b9350612f27818560208601612ec7565b612f3081612ef1565b840191505092915050565b60006020820190508181036000830152612f558184612f02565b905092915050565b6000819050919050565b612f7081612f5d565b8114612f7b57600080fd5b50565b600081359050612f8d81612f67565b92915050565b600060208284031215612fa957612fa8612de6565b5b6000612fb784828501612f7e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612feb82612fc0565b9050919050565b612ffb81612fe0565b82525050565b60006020820190506130166000830184612ff2565b92915050565b61302581612f5d565b82525050565b6000602082019050613040600083018461301c565b92915050565b61304f81612fe0565b811461305a57600080fd5b50565b60008135905061306c81613046565b92915050565b60008060006060848603121561308b5761308a612de6565b5b60006130998682870161305d565b93505060206130aa8682870161305d565b92505060406130bb86828701612f7e565b9150509250925092565b6000819050919050565b6130d8816130c5565b81146130e357600080fd5b50565b6000813590506130f5816130cf565b92915050565b60006020828403121561311157613110612de6565b5b600061311f848285016130e6565b91505092915050565b613131816130c5565b82525050565b600060208201905061314c6000830184613128565b92915050565b600081519050919050565b600082825260208201905092915050565b600061317982613152565b613183818561315d565b9350613193818560208601612ec7565b61319c81612ef1565b840191505092915050565b600060208201905081810360008301526131c1818461316e565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61320b82612ef1565b810181811067ffffffffffffffff8211171561322a576132296131d3565b5b80604052505050565b600061323d612ddc565b90506132498282613202565b919050565b600067ffffffffffffffff821115613269576132686131d3565b5b61327282612ef1565b9050602081019050919050565b82818337600083830152505050565b60006132a161329c8461324e565b613233565b9050828152602081018484840111156132bd576132bc6131ce565b5b6132c884828561327f565b509392505050565b600082601f8301126132e5576132e46131c9565b5b81356132f584826020860161328e565b91505092915050565b60006020828403121561331457613313612de6565b5b600082013567ffffffffffffffff81111561333257613331612deb565b5b61333e848285016132d0565b91505092915050565b600065ffffffffffff82169050919050565b61336281613347565b811461336d57600080fd5b50565b60008135905061337f81613359565b92915050565b6000806040838503121561339c5761339b612de6565b5b60006133aa858286016130e6565b92505060206133bb85828601613370565b9150509250929050565b600080604083850312156133dc576133db612de6565b5b60006133ea858286016130e6565b92505060206133fb85828601612f7e565b9150509250929050565b61340e81613347565b82525050565b60006060820190506134296000830186613405565b6134366020830185613405565b6134436040830184612e81565b949350505050565b60006020828403121561346157613460612de6565b5b600061346f8482850161305d565b91505092915050565b61348181612e75565b811461348c57600080fd5b50565b60008135905061349e81613478565b92915050565b600080604083850312156134bb576134ba612de6565b5b60006134c98582860161305d565b92505060206134da8582860161348f565b9150509250929050565b600080604083850312156134fb576134fa612de6565b5b60006135098582860161305d565b925050602061351a858286016130e6565b9150509250929050565b600067ffffffffffffffff82111561353f5761353e6131d3565b5b61354882612ef1565b9050602081019050919050565b600061356861356384613524565b613233565b905082815260208101848484011115613584576135836131ce565b5b61358f84828561327f565b509392505050565b600082601f8301126135ac576135ab6131c9565b5b81356135bc848260208601613555565b91505092915050565b600080600080608085870312156135df576135de612de6565b5b60006135ed8782880161305d565b94505060206135fe8782880161305d565b935050604061360f87828801612f7e565b925050606085013567ffffffffffffffff8111156136305761362f612deb565b5b61363c87828801613597565b91505092959194509250565b600061ffff82169050919050565b61365f81613648565b811461366a57600080fd5b50565b60008135905061367c81613656565b92915050565b60008060006060848603121561369b5761369a612de6565b5b60006136a98682870161305d565b93505060206136ba868287016130e6565b92505060406136cb8682870161366d565b9150509250925092565b600080604083850312156136ec576136eb612de6565b5b60006136fa8582860161305d565b925050602061370b8582860161305d565b9150509250929050565b6000806000806080858703121561372f5761372e612de6565b5b600061373d8782880161305d565b945050602061374e878288016130e6565b935050604061375f8782880161366d565b925050606061377087828801613370565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137c357607f821691505b6020821081036137d6576137d561377c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138528261380b565b915061385d8361380b565b9250828201905060ff81111561387657613875613818565b5b92915050565b600061388782612f5d565b915061389283612f5d565b92508282019050808211156138aa576138a9613818565b5b92915050565b60006138bb82612f5d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138ed576138ec613818565b5b600182019050919050565b600061390382612f5d565b915061390e83612f5d565b925082820390508181111561392657613925613818565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b6000600883026139917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613951565b61399b8683613951565b95508019841693508086168417925050509392505050565b6000819050919050565b60006139d86139d36139ce84612f5d565b6139b3565b612f5d565b9050919050565b6000819050919050565b6139f2836139bd565b613a066139fe826139df565b848454613961565b825550505050565b600090565b613a1b613a0e565b613a268184846139e9565b505050565b5b81811015613a4a57613a3f600082613a13565b600181019050613a2c565b5050565b601f821115613a8f57613a608161392c565b613a6984613941565b81016020851015613a78578190505b613a8c613a8485613941565b830182613a2b565b50505b505050565b60008160020a8304905092915050565b6000613ab560001984600802613a94565b1980831691505092915050565b6000613ace8383613aa4565b9150826002028217905092915050565b613ae782613152565b67ffffffffffffffff811115613b0057613aff6131d3565b5b613b0a82546137ab565b613b15828285613a4e565b600060209050601f831160018114613b485760008415613b36578287015190505b613b408582613ac2565b865550613ba8565b601f198416613b568661392c565b60005b82811015613b7e57848901518255600182019150602085019450602081019050613b59565b86831015613b9b5784890151613b97601f891682613aa4565b8355505b6001600288020188555050505b505050505050565b6000819050602082019050919050565b6000613bcc82516130c5565b80915050919050565b6000613be082613152565b82613bea84613bb0565b9050613bf581613bc0565b92506020821015613c3557613c307fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613951565b831692505b5050919050565b6000613c4782613347565b9150613c5283613347565b9250828201905065ffffffffffff811115613c7057613c6f613818565b5b92915050565b600081519050613c8581613046565b92915050565b600060208284031215613ca157613ca0612de6565b5b6000613caf84828501613c76565b9150509291505056fea264697066735822122068552215e0e6a8df402cfef150f4f27d29f7e142d614f38c9d6fc5998835ea9264736f6c63430008110033
+\ No newline at end of file
diff --git a/python/craft_nft/data/CraftNFT.json b/python/craft_nft/data/CraftNFT.json
@@ -1 +1 @@
-[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"bytes32","name":"_declaration","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"uint48","name":"_count","type":"uint48"},{"indexed":false,"internalType":"bytes32","name":"_tokenId","type":"bytes32"}],"name":"Allocate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"TransferWithData","type":"event"},{"inputs":[{"internalType":"bytes32","name":"content","type":"bytes32"},{"internalType":"uint48","name":"count","type":"uint48"}],"name":"allocate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURL","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"declaration","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_truncatedId","type":"bytes32"}],"name":"getDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_index","type":"uint48"}],"name":"mintExactFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"}],"name":"mintFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"}],"name":"mintTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintedToken","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseString","type":"string"}],"name":"setBaseURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"toURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"toURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"token","outputs":[{"internalType":"uint48","name":"count","type":"uint48"},{"internalType":"uint48","name":"cursor","type":"uint48"},{"internalType":"bool","name":"sparse","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"bool","name":"_final","type":"bool"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
+[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"bytes32","name":"_declaration","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"uint48","name":"_count","type":"uint48"},{"indexed":false,"internalType":"bytes32","name":"_tokenId","type":"bytes32"}],"name":"Allocate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_minter","type":"address"},{"indexed":true,"internalType":"address","name":"_beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"TransferWithData","type":"event"},{"inputs":[{"internalType":"bytes32","name":"content","type":"bytes32"},{"internalType":"uint48","name":"count","type":"uint48"}],"name":"allocate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURL","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"declaration","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_truncatedId","type":"bytes32"}],"name":"getDigest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"getDigestHex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"},{"internalType":"uint48","name":"_index","type":"uint48"}],"name":"mintExactFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"},{"internalType":"uint16","name":"_batch","type":"uint16"}],"name":"mintFromBatchTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bytes32","name":"_content","type":"bytes32"}],"name":"mintTo","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"mintedToken","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseString","type":"string"}],"name":"setBaseURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"toURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_data","type":"bytes32"}],"name":"toURL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"token","outputs":[{"internalType":"uint48","name":"count","type":"uint48"},{"internalType":"uint48","name":"cursor","type":"uint48"},{"internalType":"bool","name":"sparse","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"bool","name":"_final","type":"bool"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
diff --git a/python/tests/test_basic.py b/python/tests/test_basic.py
@@ -409,39 +409,6 @@ class Test(EthTesterCase):
self.assertEqual(strip_0x(r), hash_of_foo)
- def test_token_uri(self):
- nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
- c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo)
- self.rpc.do(o)
-
- (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0)
- self.rpc.do(o)
-
- o = c.token_uri(self.address, int(hash_of_foo, 16), sender_address=self.accounts[0])
- r = self.rpc.do(o)
- uri = c.parse_token_uri(r)
-
- self.assertEqual('sha256:' + hash_of_foo, uri)
-
-
- def test_token_uri_batch(self):
- nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
- c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
- (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=2)
- self.rpc.do(o)
-
- (tx_hash_hex, o) = c.mint_to(self.address, self.accounts[0], self.accounts[1], hash_of_foo, 0)
- self.rpc.do(o)
-
- expected_id = hash_of_foo[:64-16] + '0000000000000000'
- o = c.token_uri(self.address, int(expected_id, 16), sender_address=self.accounts[0])
- r = self.rpc.do(o)
- uri = c.parse_token_uri(r)
-
- self.assertEqual('sha256:' + hash_of_foo, uri)
-
-
def test_multi(self):
nonce_oracle = RPCNonceOracle(self.accounts[0], self.rpc)
c = CraftNFT(self.chain_spec, signer=self.signer, nonce_oracle=nonce_oracle)
diff --git a/python/tests/test_uri.py b/python/tests/test_uri.py
@@ -86,7 +86,15 @@ class TestURI(EthTesterCase):
self.assertEqual('http://localhost/' + hash_of_foo, uri)
o = c.token_uri(self.address, int(hash_of_foo, 16), sender_address=self.accounts[0])
- r = self.rpc.do(o)
+ with self.assertRaises(JSONRPCException):
+ self.rpc.do(o)
+ uri = c.parse_uri(r)
+ self.assertEqual('http://localhost/' + hash_of_foo, uri)
+
+ (tx_hash_hex, o) = c.allocate(self.address, self.accounts[0], hash_of_foo, amount=2)
+ self.rpc.do(o)
+ o = c.token_uri(self.address, int(hash_of_foo, 16), sender_address=self.accounts[0])
+ self.rpc.do(o)
uri = c.parse_uri(r)
self.assertEqual('http://localhost/' + hash_of_foo, uri)
diff --git a/solidity/CraftNFT.sol b/solidity/CraftNFT.sol
@@ -362,7 +362,7 @@ contract CraftNFT {
bytes memory _hexDigest;
uint256 c;
- _hexDigest = hexDigest(_data);
+ _hexDigest = getDigestHex(_data);
out = new bytes(64 + 7);
out[0] = "s";
@@ -387,7 +387,7 @@ contract CraftNFT {
bytes memory _hexDigest;
uint256 c;
- _hexDigest = hexDigest(_data);
+ _hexDigest = getDigestHex(_data);
c = baseURL.length;
out = new bytes(_hexDigest.length + c);
@@ -402,7 +402,7 @@ contract CraftNFT {
return string(out);
}
- function hexDigest(bytes32 _data) private pure returns(bytes memory) {
+ function getDigestHex(bytes32 _data) public pure returns(bytes memory) {
bytes memory out;
uint8 t;
uint256 c;
@@ -429,6 +429,11 @@ contract CraftNFT {
// ERC-721 (Metadata - optional)
function tokenURI(uint256 _tokenId) public view returns (string memory) {
+ bytes32 _tokenIdBytes;
+
+ _tokenIdBytes = bytes32(_tokenId);
+
+ require(token[_tokenIdBytes].length > 0);
return toURL(bytes32(_tokenId));
}