diff --git a/public/locales/br/common.json b/public/locales/br/common.json index 102e5ecc..b3a5cdef 100644 --- a/public/locales/br/common.json +++ b/public/locales/br/common.json @@ -87,6 +87,7 @@ "transfer_pack_error": "Ocorreu um erro ao tentar transferir o pacote", "finish_album_error": "Ocorreu um erro ao tentar reivindicar o prêmio", "finish_album_success": "Parabéns! Você completou o álbum. Você receberá seu prêmio em DAIs na sua carteira.", + "finish_album_warning": "As condições necessárias para completar os álbuns e reivindicar os prêmios ainda não estão disponíveis. Tente novamente em alguns dias!", "rules_alpha_left_text_1": "Um minijogo temático com 60 cartas que completam 10 coleções temáticas diferentes, cada uma com 5 personagens e um álbum.", "rules_alpha_left_text_2": "O objetivo é completar um álbum com os 5 personagens correspondentes à coleção.", diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 0d2afb7e..e5ccd900 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -87,6 +87,7 @@ "transfer_pack_error": "There was an error trying to transfer one pack", "finish_album_error": "An error occurred while trying to claim the prize", "finish_album_success": "Congratulations! You completed the album. You will receive your prize in DAIs to your wallet.", + "finish_album_warning": " The conditions required to complete the albums and claim the prizes are not yet met. Please try again in a few days!", "rules_alpha_left_text_1": "A thematic minigame with 60 cards that complete 10 different thematic collections, each with 5 characters and an album.", "rules_alpha_left_text_2": "The goal is to complete an album with the 5 characters corresponding to the collection.", diff --git a/public/locales/es/common.json b/public/locales/es/common.json index b4bd6687..2da1566e 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -87,7 +87,8 @@ "transfer_pack_error": "Hubo un error al intentar transferir un pack", "finish_album_error": "Ocurrió un error al intentar reclamar el premio", "finish_album_success": "Felicitaciones! Completaste el álbum. Recibirás en tu wallet tu premio en DAIs.", - + "finish_album_warning": "Aún no están dadas las condiciones para que se puedan completar los álbumnes y reclamas los premios. Intenta en unos días!", + "rules_alpha_left_text_1": "Un minijuego temático con 60 cartas que completan 10 colecciones temáticas diferentes con 5 personajes y un álbum cada uno.", "rules_alpha_left_text_2": "El objetivo es completar un álbum con los 5 personajes correspondientes a la colección.", "rules_alpha_left_text_3": "Para jugar es necesario conectar una billetera a la red de Polygon.", diff --git a/src/components/Navbar/Navbar.jsx b/src/components/Navbar/Navbar.jsx index 2957e05e..e5f4cc3f 100644 --- a/src/components/Navbar/Navbar.jsx +++ b/src/components/Navbar/Navbar.jsx @@ -35,7 +35,6 @@ function Navbar ({ } else if (window.history.state.url.endsWith('/gamma')) { setMidButton('Inventory') } - console.log('page', page, page.endsWith('/alpha')) }, [page]) diff --git a/src/context/Web3Context.js b/src/context/Web3Context.js index 5ce30c5d..6554e401 100644 --- a/src/context/Web3Context.js +++ b/src/context/Web3Context.js @@ -140,7 +140,7 @@ function Web3ContextProvider({ children }) { ] }) } catch (e) { - console.log(e.message) + console.error(e.message) } } } diff --git a/src/context/Web3ContextNew.js b/src/context/Web3ContextNew.js index 7be0345b..c06d019f 100644 --- a/src/context/Web3ContextNew.js +++ b/src/context/Web3ContextNew.js @@ -127,7 +127,7 @@ const Web3ContextProvider = ({ children }) => { */ function switchNetwork() { - console.log(web3Onboard) + // console.log(web3Onboard) // const currentNetwork = web3Onboard.getCurrentNetwork() // const desiredNetwork = 'mumbai' // const isCorrectNetwork = currentNetwork === desiredNetwork @@ -167,7 +167,7 @@ const Web3ContextProvider = ({ children }) => { const getProvider = (wlt) => { if (wlt) { - console.log(wlt) + // console.log(wlt) return new ethers.providers.Web3Provider(wlt.provider, 'any') } else { return new ethers.providers.JsonRpcProvider( diff --git a/src/context/abis/GammaCards.v2.sol/NofGammaCardsV2.json b/src/context/abis/GammaCards.v2.sol/NofGammaCardsV2.json index cf4192ae..c2039e3f 100644 --- a/src/context/abis/GammaCards.v2.sol/NofGammaCardsV2.json +++ b/src/context/abis/GammaCards.v2.sol/NofGammaCardsV2.json @@ -1107,8 +1107,8 @@ "type": "function" } ], - "bytecode": "0x60806040526710a741a462780000600b5567d02ab486cedc0000600e55670de0b6b3a7640000600f553480156200003557600080fd5b5060405162004b3738038062004b37833981016040819052620000589162000348565b6040518060400160405280600a81526020016947616d6d61436172647360b01b815250604051806040016040528060068152602001654e4f465f474360d01b8152508160009081620000ab9190620004ca565b506001620000ba8282620004ca565b505050620000d7620000d16200029960201b60201c565b6200029d565b600880546001600160a01b038086166001600160a01b031992831617909255600a805492871692909116919091179055600d620001158382620004ca565b5060408051808201825260018152602f60f81b60208083019190915282518084018452600381526203132360ec1b8183015283518085018552600681526523173539b7b760d11b8184015293516200017494600d949390910162000596565b60405160208183030381529060405260109081620001939190620004ca565b5060408051808201825260018152602f60f81b60208083019190915282518084018452600381526231323160e81b8183015283518085018552600681526523173539b7b760d11b818401529351620001f294600d949390910162000596565b60405160208183030381529060405260119081620002119190620004ca565b506001600160a01b0381166000908152601860205260408120805460ff199081166001179091556012805490911690555b607a8110156200027357600081815260136020526040902060019055806200026a8162000653565b91505062000242565b5050336000908152601760205260409020805460ff19166001179055506200067b915050565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200030757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200033f57818101518382015260200162000325565b50506000910152565b600080600080608085870312156200035f57600080fd5b6200036a85620002ef565b93506200037a60208601620002ef565b60408601519093506001600160401b03808211156200039857600080fd5b818701915087601f830112620003ad57600080fd5b815181811115620003c257620003c26200030c565b604051601f8201601f19908116603f01168101908382118183101715620003ed57620003ed6200030c565b816040528281528a60208487010111156200040757600080fd5b6200041a83602083016020880162000322565b80965050505050506200043060608601620002ef565b905092959194509250565b600181811c908216806200045057607f821691505b6020821081036200047157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004c557600081815260208120601f850160051c81016020861015620004a05750805b601f850160051c820191505b81811015620004c157828155600101620004ac565b5050505b505050565b81516001600160401b03811115620004e657620004e66200030c565b620004fe81620004f784546200043b565b8462000477565b602080601f8311600181146200053657600084156200051d5750858301515b600019600386901b1c1916600185901b178555620004c1565b600085815260208120601f198616915b82811015620005675788860151825594840194600190910190840162000546565b5085821015620005865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808654620005a6816200043b565b60018281168015620005c15760018114620005d75762000608565b60ff198416875282151583028701945062000608565b8a60005260208060002060005b85811015620005ff5781548a820152908401908201620005e4565b50505082870194505b5050505085516200061e818360208a0162000322565b85519101906200063381836020890162000322565b84519101906200064881836020880162000322565b019695505050505050565b6000600182016200067457634e487b7160e01b600052601160045260246000fd5b5060010190565b6144ac806200068b6000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c8063809eb3551161019d578063aaaeca17116100e9578063dec3f6d9116100a2578063e606df871161007c578063e606df8714610757578063e985e9c51461076a578063eb12d61e1461077d578063f2fde38b1461079057600080fd5b8063dec3f6d914610733578063e1883c6e1461073b578063e5db587a1461074e57600080fd5b8063aaaeca17146106d7578063b88d4fde146106df578063bf400a6a146106f2578063c3461c0714610705578063c87b56dd1461070d578063dbfc05cf1461072057600080fd5b806395d89b41116101565780639c7f707f116101305780639c7f707f146106955780639f4415d8146106a8578063a1af8ad4146106b1578063a22cb465146106c457600080fd5b806395d89b411461067857806396884135146106805780639abc83201461068d57600080fd5b8063809eb355146105875780638ba526fc146105c75780638da5cb5b146105da5780638dc10768146105eb5780638dd8be471461065d5780639038f4141461067057600080fd5b8063335c8b631161025c5780635dde20d81161021557806370a08231116101ef57806370a0823114610529578063715018a61461053c578063736c0d5b146105445780637e50fa8f1461056757600080fd5b80635dde20d8146104e35780636352211e146105035780637065cb481461051657600080fd5b8063335c8b631461045757806342842e0e1461046e57806342966c6814610481578063483823e8146104945780634e5ad3181461049d5780635312ea8e146104d057600080fd5b80630e316ab7116102c957806320965a5f116102a357806320965a5f1461040b57806323b872dd1461041e578063267b841d146104315780632ca699e71461044457600080fd5b80630e316ab7146103d25780631306952c146103e5578063173825d9146103f857600080fd5b806301ffc9a714610311578063022914a7146103395780630435dcaf1461035c57806306fdde031461037d578063081812fc14610392578063095ea7b3146103bd575b600080fd5b61032461031f366004613802565b6107a3565b60405190151581526020015b60405180910390f35b610324610347366004613834565b60176020526000908152604090205460ff1681565b61036f61036a366004613834565b6107f5565b60405161033092919061388f565b610385610a65565b604051610330919061390d565b6103a56103a0366004613920565b610af7565b6040516001600160a01b039091168152602001610330565b6103d06103cb366004613939565b610b1e565b005b6103d06103e0366004613834565b610c38565b6103a56103f3366004613a02565b610d7e565b6103d0610406366004613834565b610e8c565b6103d0610419366004613b22565b610fd1565b6103d061042c366004613b63565b6112d1565b6103d061043f366004613a02565b611303565b6103d0610452366004613ba4565b6117b9565b610460600b5481565b604051908152602001610330565b6103d061047c366004613b63565b61193b565b6103d061048f366004613920565b611956565b610460600f5481565b6103246104ab366004613bd9565b33600090815260156020908152604080832060ff948516845290915290205416151590565b6103d06104de366004613920565b611987565b6104606104f1366004613920565b60136020526000908152604090205481565b6103a5610511366004613920565b611a95565b6103d0610524366004613834565b611af5565b610460610537366004613834565b611bd7565b6103d0611c5d565b610324610552366004613834565b60186020526000908152604090205460ff1681565b610460610575366004613834565b60166020526000908152604090205481565b6105b5610595366004613ba4565b601560209081526000928352604080842090915290825290205460ff1681565b60405160ff9091168152602001610330565b6103d06105d5366004613920565b611c71565b6007546001600160a01b03166103a5565b61062d6105f9366004613920565b60146020526000908152604090208054600182015460028301546003909301549192909160ff808316926101009004169085565b6040805195865260208601949094529115159284019290925260ff9091166060830152608082015260a001610330565b6008546103a5906001600160a01b031681565b6103d0611cde565b610385611fd3565b6012546103249060ff1681565b610385611fe2565b6103d06106a3366004613c6b565b612070565b610460600e5481565b6103d06106bf366004613cce565b6120ea565b6103d06106d2366004613d30565b612355565b6103d0612360565b6103d06106ed366004613d69565b6123c7565b6103d0610700366004613bd9565b6123f9565b6103856124f6565b61038561071b366004613920565b612503565b6103d061072e366004613de8565b61250e565b610385612550565b6103d0610749366004613920565b61255d565b610460600c5481565b600a546103a5906001600160a01b031681565b610324610778366004613e05565b6125b5565b6103d061078b366004613834565b6125e3565b6103d061079e366004613834565b6126c5565b60006001600160e01b031982166380ac58cd60e01b14806107d457506001600160e01b03198216635b5e139f60e01b145b806107ef57506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080516079808252610f408201909252606091829160009160208201610f20803683375050604080516079808252610f408201909252929350600092915060208201610f2080368337019050509050600060015b60788160ff161161091b576001600160a01b038716600090815260156020908152604080832060ff808616855292529091205416156109095780848360ff168151811061089957610899613e33565b60ff9283166020918202929092018101919091526001600160a01b03891660009081526015825260408082208585168352909252205484519082169185919085169081106108e9576108e9613e33565b60ff909216602092830291909101909101528161090581613e5f565b9250505b8061091381613e5f565b91505061084a565b5060008160ff166001600160401b0381111561093957610939613965565b604051908082528060200260200182016040528015610962578160200160208202803683370190505b50905060008260ff166001600160401b0381111561098257610982613965565b6040519080825280602002602001820160405280156109ab578160200160208202803683370190505b50905060005b8360ff168160ff161015610a5757858160ff16815181106109d4576109d4613e33565b6020026020010151838260ff16815181106109f1576109f1613e33565b60ff9283166020918202929092010152855186918316908110610a1657610a16613e33565b6020026020010151828260ff1681518110610a3357610a33613e33565b60ff9092166020928302919091019091015280610a4f81613e5f565b9150506109b1565b509097909650945050505050565b606060008054610a7490613e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa090613e7e565b8015610aed5780601f10610ac257610100808354040283529160200191610aed565b820191906000526020600020905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b6000610b028261273b565b506000908152600460205260409020546001600160a01b031690565b6000610b2982611a95565b9050806001600160a01b0316836001600160a01b031603610b9b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610bb75750610bb781336125b5565b610c295760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b92565b610c33838361279a565b505050565b3360009081526017602052604090205460ff16610c675760405162461bcd60e51b8152600401610b9290613eb8565b6001600160a01b038116610c8d5760405162461bcd60e51b8152600401610b9290613efb565b336001600160a01b03821603610cf55760405162461bcd60e51b815260206004820152602760248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152661039b4b3b732b960c91b6064820152608401610b92565b6001600160a01b03811660009081526018602052604090205460ff16610d5d5760405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f7420616e207369676e657200000000000000006044820152606401610b92565b6001600160a01b03166000908152601860205260409020805460ff19169055565b600080610df9338787604051602001610d9993929190613f24565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90506000610e3f85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506128089050565b9050610e806040518060400160405280601a81526020017f6f70656e207061636b207369676e6572207265636f76657265640000000000008152508261282c565b9150505b949350505050565b3360009081526017602052604090205460ff16610ebb5760405162461bcd60e51b8152600401610b9290613eb8565b6001600160a01b038116610ee15760405162461bcd60e51b8152600401610b9290613efb565b336001600160a01b03821603610f485760405162461bcd60e51b815260206004820152602660248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152651037bbb732b960d11b6064820152608401610b92565b6001600160a01b03811660009081526017602052604090205460ff16610fb05760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420616e206f776e65720000000000000000006044820152606401610b92565b6001600160a01b03166000908152601760205260409020805460ff19169055565b3360009081526015602090815260408083206079845290915290205460ff1661103c5760405162461bcd60e51b815260206004820152601860248201527f4e6f207469656e657320616c62756d206465207175656d6100000000000000006044820152606401610b92565b336000908152601560209081526040808320607984529091528120805460ff169161106683613fb2565b825460ff9182166101009390930a92830291909202199091161790555033600090815260166020526040812080548392906110a2908490613fcf565b90915550600090505b60ff81168211156111435733600090815260156020526040812090848460ff85168181106110db576110db613e33565b90506020020160208101906110f09190613bd9565b60ff9081168252602082019290925260400160009081208054909216919061111783613fb2565b91906101000a81548160ff021916908360ff16021790555050808061113b90613e5f565b9150506110ab565b503360009081526016602052604090205461116090603c90613ff8565b6000036112cd576111ff336011805461117890613e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546111a490613e7e565b80156111f15780601f106111c6576101008083540402835291602001916111f1565b820191906000526020600020905b8154815290600101906020018083116111d457829003601f168201915b505050505060796002612871565b600e54600c6000828254611213919061400c565b9091555050600a54600f5460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061401f565b5060408051338152600260208201527f6d0344e2059f835240cb954cce07d4b26f0d0844eecc234f7ee0e292ba80a1aa91015b60405180910390a15b5050565b6112dc335b826128d4565b6112f85760405162461bcd60e51b8152600401610b929061403c565b610c33838383612932565b60085460405163d3e6a7ad60e01b81526004810186905233916001600160a01b03169063d3e6a7ad90602401602060405180830381865afa15801561134c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113709190614089565b6001600160a01b0316146113be5760405162461bcd60e51b81526020600482015260156024820152744573746520736f627265206e6f206573207475796f60581b6044820152606401610b92565b600f83511061140f5760405162461bcd60e51b815260206004820152601960248201527f4c696d6974652064652063617274617320657863656469646f000000000000006044820152606401610b92565b60125460ff161561151a576000611434338686604051602001610d9993929190613f24565b9050600061147a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506128089050565b90506114bb6040518060400160405280601a81526020017f6f70656e207061636b207369676e6572207265636f76657265640000000000008152508261282c565b6001600160a01b03811660009081526018602052604090205460ff166115175760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610b92565b50505b6008546040516380f2540b60e01b8152600481018690523360248201526001600160a01b03909116906380f2540b90604401600060405180830381600087803b15801561156657600080fd5b505af115801561157a573d6000803e3d6000fd5b505050506006600b5461158d91906140a6565b600b5461159a919061400c565b600c60008282546115ab9190613fcf565b9091555050825160005b818160ff16101561177657848160ff16815181106115d5576115d5613e33565b602002602001015160ff166078146116235761138960136000878460ff168151811061160357611603613e33565b602002602001015160ff1681526020019081526020016000205410611654565b607860005260136020527fdf3e0ba85198d5d74c53175fb24486e82f8e6ac58d6fdc8357e123450eab705e54610bb9115b6116a05760405162461bcd60e51b815260206004820152601e60248201527f696e76616c69642063617264496e76656e746f727920706f736974696f6e00006044820152606401610b92565b60136000868360ff16815181106116b9576116b9613e33565b602002602001015160ff16815260200190815260200160002060008154809291906116e3906140ba565b90915550503360009081526015602052604081208651909190879060ff851690811061171157611711613e33565b602002602001015160ff1660ff168152602001908152602001600020600081819054906101000a900460ff168092919061174a90613e5f565b91906101000a81548160ff021916908360ff16021790555050808061176e90613e5f565b9150506115b5565b507fbabe8f5e83e93ab103ddf917b4292a19335a5128b3530bedd896a681cdd945e33385876040516117aa939291906140d3565b60405180910390a15050505050565b33600090815260156020908152604080832060ff8086168552925290912054166117f55760405162461bcd60e51b8152600401610b9290614107565b336001600160a01b0383160361184d5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73662070726f706961206e6f207065726d69746964610000000000006044820152606401610b92565b6001600160a01b0382166118a35760405162461bcd60e51b815260206004820152601e60248201527f5175656d61646f20646520636172746173206e6f207065726d697469646f00006044820152606401610b92565b33600090815260156020908152604080832060ff8086168552925282208054909116916118cf83613fb2565b82546101009290920a60ff8181021990931691831602179091556001600160a01b0384166000908152601560209081526040808320868516845290915281208054909216925061191e83613e5f565b91906101000a81548160ff021916908360ff160217905550505050565b610c33838383604051806020016040528060008152506123c7565b61195f336112d6565b61197b5760405162461bcd60e51b8152600401610b929061403c565b61198481612aa3565b50565b3360009081526017602052604090205460ff166119b65760405162461bcd60e51b8152600401610b9290613eb8565b806119c030611bd7565b10156119cb57600080fd5b80600c60008282546119dd919061400c565b9091555050600a5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a57919061401f565b5060408051338152602081018390527f23d6711a1d031134a36921253c75aa59e967d38e369ac625992824315e204f2091015b60405180910390a150565b6000818152600260205260408120546001600160a01b0316806107ef5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b92565b3360009081526017602052604090205460ff16611b245760405162461bcd60e51b8152600401610b9290613eb8565b6001600160a01b038116611b4a5760405162461bcd60e51b8152600401610b9290613efb565b6001600160a01b03811660009081526017602052604090205460ff1615611bb35760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920616e206f776e657200000000006044820152606401610b92565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b60006001600160a01b038216611c415760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b92565b506001600160a01b031660009081526003602052604090205490565b611c65612aac565b611c6f6000612b06565b565b6008546001600160a01b03163314611cc45760405162461bcd60e51b8152602060048201526016602482015275536f6c6f20636f6e747261746f206465207061636b7360501b6044820152606401610b92565b80600c6000828254611cd69190613fcf565b909155505050565b3360009081526015602090815260408083206078845290915290205460ff16611d425760405162461bcd60e51b81526020600482015260166024820152754e6f207469656e6573206e696e67756e20616c62756d60501b6044820152606401610b92565b600e54600c541015611d8d5760405162461bcd60e51b8152602060048201526014602482015273466f6e646f7320696e737566696369656e74657360601b6044820152606401610b92565b6000805b60798160ff161015611e235733600090815260156020908152604080832060ff80861685529252822054169003611dcb5760019150611e23565b33600090815260156020908152604080832060ff808616855292528220805490911691611df783613fb2565b91906101000a81548160ff021916908360ff160217905550508080611e1b90613e5f565b915050611d91565b508015611e725760405162461bcd60e51b815260206004820152601760248201527f4d75737420636f6d706c6574652074686520616c62756d0000000000000000006044820152606401610b92565b611f0a3360108054611e8390613e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054611eaf90613e7e565b8015611efc5780601f10611ed157610100808354040283529160200191611efc565b820191906000526020600020905b815481529060010190602001808311611edf57829003601f168201915b505050505060786002612871565b600e54600c6000828254611f1e919061400c565b9091555050600a54600e5460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9c919061401f565b5060408051338152600160208201527f6d0344e2059f835240cb954cce07d4b26f0d0844eecc234f7ee0e292ba80a1aa9101611a8a565b606060018054610a7490613e7e565b600d8054611fef90613e7e565b80601f016020809104026020016040519081016040528092919081815260200182805461201b90613e7e565b80156120685780601f1061203d57610100808354040283529160200191612068565b820191906000526020600020905b81548152906001019060200180831161204b57829003601f168201915b505050505081565b3360009081526017602052604090205460ff1661209f5760405162461bcd60e51b8152600401610b9290613eb8565b60106120ab8382614183565b5060116120b88282614183565b507fabfd337ac5625b7dc2ddd3d3bd465fb1dec15322eeeed81032268b337880bec682826040516112c4929190614242565b336001600160a01b038416036121505760405162461bcd60e51b815260206004820152602560248201527f4e6f2074652070756564657320656e76696172206361727461732061207469206044820152646d69736d6f60d81b6064820152608401610b92565b6001600160a01b0383166121b55760405162461bcd60e51b815260206004820152602660248201527f4e6f20707565646573207175656d6172206361727461732064652065737461206044820152656d616e65726160d01b6064820152608401610b92565b60005b60ff811682111561234f5733600090815260156020526040812081858560ff86168181106121e8576121e8613e33565b90506020020160208101906121fd9190613bd9565b60ff908116825260208201929092526040016000205416116122315760405162461bcd60e51b8152600401610b9290614107565b33600090815260156020526040812090848460ff851681811061225657612256613e33565b905060200201602081019061226b9190613bd9565b60ff9081168252602082019290925260400160009081208054909216919061229283613fb2565b91906101000a81548160ff021916908360ff1602179055505060156000856001600160a01b03166001600160a01b03168152602001908152602001600020600084848460ff168181106122e7576122e7613e33565b90506020020160208101906122fc9190613bd9565b60ff9081168252602082019290925260400160009081208054909216919061232383613e5f565b91906101000a81548160ff021916908360ff16021790555050808061234790613e5f565b9150506121b8565b50505050565b6112cd338383612b58565b60005b60798160ff1610156119845733600090815260156020908152604080832060ff80861685529252822080549091169161239b83613e5f565b91906101000a81548160ff021916908360ff1602179055505080806123bf90613e5f565b915050612363565b6123d133836128d4565b6123ed5760405162461bcd60e51b8152600401610b929061403c565b61234f84848484612c26565b33600090815260156020908152604080832060ff8086168552925290912054166124355760405162461bcd60e51b8152600401610b9290614107565b33600090815260156020908152604080832060ff80861685529252822080549091169161246183613fb2565b91906101000a81548160ff021916908360ff160217905550506000600d604051806040016040528060018152602001602f60f81b8152506124a48460ff16612c59565b60405180604001604052806005815260200164173539b7b760d91b8152506040516020016124d59493929190614267565b60405160208183030381529060405290506112cd33828460ff166001612871565b60108054611fef90613e7e565b60606107ef82612d59565b3360009081526017602052604090205460ff1661253d5760405162461bcd60e51b8152600401610b9290613eb8565b6012805460ff1916911515919091179055565b60118054611fef90613e7e565b6008546001600160a01b031633146125b05760405162461bcd60e51b8152602060048201526016602482015275536f6c6f20636f6e747261746f206465207061636b7360501b6044820152606401610b92565b600b55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3360009081526017602052604090205460ff166126125760405162461bcd60e51b8152600401610b9290613eb8565b6001600160a01b0381166126385760405162461bcd60e51b8152600401610b9290613efb565b6001600160a01b03811660009081526018602052604090205460ff16156126a15760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920616e206f776e657200000000006044820152606401610b92565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6126cd612aac565b6001600160a01b0381166127325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b92565b61198481612b06565b6000818152600260205260409020546001600160a01b03166119845760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b92565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127cf82611a95565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008060006128178585612e61565b9150915061282481612ea6565b509392505050565b6112cd8282604051602401612842929190614316565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052612ff0565b600061287c60095490565b905061288c600980546001019055565b600081815260146020526040902081815560018101849055600201805461ff00191661010060ff8516021790556128c38582612ff9565b6128cd8185613013565b5050505050565b6000806128e083611a95565b9050806001600160a01b0316846001600160a01b03161480612907575061290781856125b5565b80610e845750836001600160a01b031661292084610af7565b6001600160a01b031614949350505050565b826001600160a01b031661294582611a95565b6001600160a01b03161461296b5760405162461bcd60e51b8152600401610b9290614340565b6001600160a01b0382166129cd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b92565b6129da83838360016130a6565b826001600160a01b03166129ed82611a95565b6001600160a01b031614612a135760405162461bcd60e51b8152600401610b9290614340565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6119848161312e565b6007546001600160a01b03163314611c6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b92565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603612bb95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b92565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612c31848484612932565b612c3d8484848461316e565b61234f5760405162461bcd60e51b8152600401610b9290614385565b606081600003612c805750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612caa5780612c94816140ba565b9150612ca39050600a836140a6565b9150612c84565b6000816001600160401b03811115612cc457612cc4613965565b6040519080825280601f01601f191660200182016040528015612cee576020820181803683370190505b5090505b8415610e8457612d0360018361400c565b9150612d10600a86613ff8565b612d1b906030613fcf565b60f81b818381518110612d3057612d30613e33565b60200101906001600160f81b031916908160001a905350612d52600a866140a6565b9450612cf2565b6060612d648261273b565b60008281526006602052604081208054612d7d90613e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054612da990613e7e565b8015612df65780601f10612dcb57610100808354040283529160200191612df6565b820191906000526020600020905b815481529060010190602001808311612dd957829003601f168201915b505050505090506000612e1460408051602081019091526000815290565b90508051600003612e26575092915050565b815115612e58578082604051602001612e409291906143d7565b60405160208183030381529060405292505050919050565b610e848461326c565b6000808251604103612e975760208301516040840151606085015160001a612e8b878285856132e0565b94509450505050612e9f565b506000905060025b9250929050565b6000816004811115612eba57612eba614406565b03612ec25750565b6001816004811115612ed657612ed6614406565b03612f235760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b92565b6002816004811115612f3757612f37614406565b03612f845760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b92565b6003816004811115612f9857612f98614406565b036119845760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b92565b611984816133a4565b6112cd8282604051806020016040528060008152506133c5565b6000828152600260205260409020546001600160a01b031661308e5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610b92565b6000828152600660205260409020610c338282614183565b600181111561234f576001600160a01b038416156130ec576001600160a01b038416600090815260036020526040812080548392906130e690849061400c565b90915550505b6001600160a01b0383161561234f576001600160a01b03831660009081526003602052604081208054839290613123908490613fcf565b909155505050505050565b613137816133f8565b6000818152600660205260409020805461315090613e7e565b1590506119845760008181526006602052604081206119849161379e565b60006001600160a01b0384163b1561326457604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906131b290339089908890889060040161441c565b6020604051808303816000875af19250505080156131ed575060408051601f3d908101601f191682019092526131ea91810190614459565b60015b61324a573d80801561321b576040519150601f19603f3d011682016040523d82523d6000602084013e613220565b606091505b5080516000036132425760405162461bcd60e51b8152600401610b9290614385565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e84565b506001610e84565b60606132778261273b565b600061328e60408051602081019091526000815290565b905060008151116132ae57604051806020016040528060008152506132d9565b806132b88461349b565b6040516020016132c99291906143d7565b6040516020818303038152906040525b9392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613317575060009050600361339b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561336b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166133945760006001925092505061339b565b9150600090505b94509492505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6133cf838361352d565b6133dc600084848461316e565b610c335760405162461bcd60e51b8152600401610b9290614385565b600061340382611a95565b90506134138160008460016130a6565b61341c82611a95565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606060006134a8836136c6565b60010190506000816001600160401b038111156134c7576134c7613965565b6040519080825280601f01601f1916602001820160405280156134f1576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846134fb57509392505050565b6001600160a01b0382166135835760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b92565b6000818152600260205260409020546001600160a01b0316156135e85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b92565b6135f66000838360016130a6565b6000818152600260205260409020546001600160a01b03161561365b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b92565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106137055772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613731576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061374f57662386f26fc10000830492506010015b6305f5e1008310613767576305f5e100830492506008015b612710831061377b57612710830492506004015b6064831061378d576064830492506002015b600a83106107ef5760010192915050565b5080546137aa90613e7e565b6000825580601f106137ba575050565b601f01602090049060005260206000209081019061198491905b808211156137e857600081556001016137d4565b5090565b6001600160e01b03198116811461198457600080fd5b60006020828403121561381457600080fd5b81356132d9816137ec565b6001600160a01b038116811461198457600080fd5b60006020828403121561384657600080fd5b81356132d98161381f565b600081518084526020808501945080840160005b8381101561388457815160ff1687529582019590820190600101613865565b509495945050505050565b6040815260006138a26040830185613851565b82810360208401526138b48185613851565b95945050505050565b60005b838110156138d85781810151838201526020016138c0565b50506000910152565b600081518084526138f98160208601602086016138bd565b601f01601f19169290920160200192915050565b6020815260006132d960208301846138e1565b60006020828403121561393257600080fd5b5035919050565b6000806040838503121561394c57600080fd5b82356139578161381f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156139a3576139a3613965565b604052919050565b803560ff811681146139bc57600080fd5b919050565b60008083601f8401126139d357600080fd5b5081356001600160401b038111156139ea57600080fd5b602083019150836020828501011115612e9f57600080fd5b60008060008060608587031215613a1857600080fd5b843593506020808601356001600160401b0380821115613a3757600080fd5b818801915088601f830112613a4b57600080fd5b813581811115613a5d57613a5d613965565b8060051b613a6c85820161397b565b918252838101850191858101908c841115613a8657600080fd5b948601945b83861015613aab57613a9c866139ab565b82529486019490860190613a8b565b98505050506040880135925080831115613ac457600080fd5b5050613ad2878288016139c1565b95989497509550505050565b60008083601f840112613af057600080fd5b5081356001600160401b03811115613b0757600080fd5b6020830191508360208260051b8501011115612e9f57600080fd5b60008060208385031215613b3557600080fd5b82356001600160401b03811115613b4b57600080fd5b613b5785828601613ade565b90969095509350505050565b600080600060608486031215613b7857600080fd5b8335613b838161381f565b92506020840135613b938161381f565b929592945050506040919091013590565b60008060408385031215613bb757600080fd5b8235613bc28161381f565b9150613bd0602084016139ab565b90509250929050565b600060208284031215613beb57600080fd5b6132d9826139ab565b60006001600160401b03831115613c0d57613c0d613965565b613c20601f8401601f191660200161397b565b9050828152838383011115613c3457600080fd5b828260208301376000602084830101529392505050565b600082601f830112613c5c57600080fd5b6132d983833560208501613bf4565b60008060408385031215613c7e57600080fd5b82356001600160401b0380821115613c9557600080fd5b613ca186838701613c4b565b93506020850135915080821115613cb757600080fd5b50613cc485828601613c4b565b9150509250929050565b600080600060408486031215613ce357600080fd5b8335613cee8161381f565b925060208401356001600160401b03811115613d0957600080fd5b613d1586828701613ade565b9497909650939450505050565b801515811461198457600080fd5b60008060408385031215613d4357600080fd5b8235613d4e8161381f565b91506020830135613d5e81613d22565b809150509250929050565b60008060008060808587031215613d7f57600080fd5b8435613d8a8161381f565b93506020850135613d9a8161381f565b92506040850135915060608501356001600160401b03811115613dbc57600080fd5b8501601f81018713613dcd57600080fd5b613ddc87823560208401613bf4565b91505092959194509250565b600060208284031215613dfa57600080fd5b81356132d981613d22565b60008060408385031215613e1857600080fd5b8235613e238161381f565b91506020830135613d5e8161381f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613e7557613e75613e49565b60010192915050565b600181811c90821680613e9257607f821691505b602082108103613eb257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f4f6e6c79206f776e6572732063616e2063616c6c20746869732066756e63746960408201526237b71760e91b606082015260800190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6bffffffffffffffffffffffff198460601b1681528260148201526000603482018351602080860160005b83811015613f6e57815160ff1685529382019390820190600101613f4f565b50507f30786631644437313839356534396231353633363933393639646535303839388352693139376344463334383160b01b9083015250602a0195945050505050565b600060ff821680613fc557613fc5613e49565b6000190192915050565b808201808211156107ef576107ef613e49565b634e487b7160e01b600052601260045260246000fd5b60008261400757614007613fe2565b500690565b818103818111156107ef576107ef613e49565b60006020828403121561403157600080fd5b81516132d981613d22565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60006020828403121561409b57600080fd5b81516132d98161381f565b6000826140b5576140b5613fe2565b500490565b6000600182016140cc576140cc613e49565b5060010190565b6001600160a01b03841681526060602082018190526000906140f790830185613851565b9050826040830152949350505050565b6020808252601490820152734e6f207469656e6573206573746120636172746160601b604082015260600190565b601f821115610c3357600081815260208120601f850160051c8101602086101561415c5750805b601f850160051c820191505b8181101561417b57828155600101614168565b505050505050565b81516001600160401b0381111561419c5761419c613965565b6141b0816141aa8454613e7e565b84614135565b602080601f8311600181146141e557600084156141cd5750858301515b600019600386901b1c1916600185901b17855561417b565b600085815260208120601f198616915b82811015614214578886015182559484019460019091019084016141f5565b50858210156142325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061425560408301856138e1565b82810360208401526138b481856138e1565b600080865461427581613e7e565b6001828116801561428d57600181146142a2576142d1565b60ff19841687528215158302870194506142d1565b8a60005260208060002060005b858110156142c85781548a8201529084019082016142af565b50505082870194505b5050505085516142e5818360208a016138bd565b85519101906142f88183602089016138bd565b845191019061430b8183602088016138bd565b019695505050505050565b60408152600061432960408301856138e1565b905060018060a01b03831660208301529392505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600083516143e98184602088016138bd565b8351908301906143fd8183602088016138bd565b01949350505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061444f908301846138e1565b9695505050505050565b60006020828403121561446b57600080fd5b81516132d9816137ec56fea2646970667358221220550d2b840163a69e1b0617b7ad5eac3a4f81492877f01c5d8d92389464d1670c64736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061030c5760003560e01c8063809eb3551161019d578063aaaeca17116100e9578063dec3f6d9116100a2578063e606df871161007c578063e606df8714610757578063e985e9c51461076a578063eb12d61e1461077d578063f2fde38b1461079057600080fd5b8063dec3f6d914610733578063e1883c6e1461073b578063e5db587a1461074e57600080fd5b8063aaaeca17146106d7578063b88d4fde146106df578063bf400a6a146106f2578063c3461c0714610705578063c87b56dd1461070d578063dbfc05cf1461072057600080fd5b806395d89b41116101565780639c7f707f116101305780639c7f707f146106955780639f4415d8146106a8578063a1af8ad4146106b1578063a22cb465146106c457600080fd5b806395d89b411461067857806396884135146106805780639abc83201461068d57600080fd5b8063809eb355146105875780638ba526fc146105c75780638da5cb5b146105da5780638dc10768146105eb5780638dd8be471461065d5780639038f4141461067057600080fd5b8063335c8b631161025c5780635dde20d81161021557806370a08231116101ef57806370a0823114610529578063715018a61461053c578063736c0d5b146105445780637e50fa8f1461056757600080fd5b80635dde20d8146104e35780636352211e146105035780637065cb481461051657600080fd5b8063335c8b631461045757806342842e0e1461046e57806342966c6814610481578063483823e8146104945780634e5ad3181461049d5780635312ea8e146104d057600080fd5b80630e316ab7116102c957806320965a5f116102a357806320965a5f1461040b57806323b872dd1461041e578063267b841d146104315780632ca699e71461044457600080fd5b80630e316ab7146103d25780631306952c146103e5578063173825d9146103f857600080fd5b806301ffc9a714610311578063022914a7146103395780630435dcaf1461035c57806306fdde031461037d578063081812fc14610392578063095ea7b3146103bd575b600080fd5b61032461031f366004613802565b6107a3565b60405190151581526020015b60405180910390f35b610324610347366004613834565b60176020526000908152604090205460ff1681565b61036f61036a366004613834565b6107f5565b60405161033092919061388f565b610385610a65565b604051610330919061390d565b6103a56103a0366004613920565b610af7565b6040516001600160a01b039091168152602001610330565b6103d06103cb366004613939565b610b1e565b005b6103d06103e0366004613834565b610c38565b6103a56103f3366004613a02565b610d7e565b6103d0610406366004613834565b610e8c565b6103d0610419366004613b22565b610fd1565b6103d061042c366004613b63565b6112d1565b6103d061043f366004613a02565b611303565b6103d0610452366004613ba4565b6117b9565b610460600b5481565b604051908152602001610330565b6103d061047c366004613b63565b61193b565b6103d061048f366004613920565b611956565b610460600f5481565b6103246104ab366004613bd9565b33600090815260156020908152604080832060ff948516845290915290205416151590565b6103d06104de366004613920565b611987565b6104606104f1366004613920565b60136020526000908152604090205481565b6103a5610511366004613920565b611a95565b6103d0610524366004613834565b611af5565b610460610537366004613834565b611bd7565b6103d0611c5d565b610324610552366004613834565b60186020526000908152604090205460ff1681565b610460610575366004613834565b60166020526000908152604090205481565b6105b5610595366004613ba4565b601560209081526000928352604080842090915290825290205460ff1681565b60405160ff9091168152602001610330565b6103d06105d5366004613920565b611c71565b6007546001600160a01b03166103a5565b61062d6105f9366004613920565b60146020526000908152604090208054600182015460028301546003909301549192909160ff808316926101009004169085565b6040805195865260208601949094529115159284019290925260ff9091166060830152608082015260a001610330565b6008546103a5906001600160a01b031681565b6103d0611cde565b610385611fd3565b6012546103249060ff1681565b610385611fe2565b6103d06106a3366004613c6b565b612070565b610460600e5481565b6103d06106bf366004613cce565b6120ea565b6103d06106d2366004613d30565b612355565b6103d0612360565b6103d06106ed366004613d69565b6123c7565b6103d0610700366004613bd9565b6123f9565b6103856124f6565b61038561071b366004613920565b612503565b6103d061072e366004613de8565b61250e565b610385612550565b6103d0610749366004613920565b61255d565b610460600c5481565b600a546103a5906001600160a01b031681565b610324610778366004613e05565b6125b5565b6103d061078b366004613834565b6125e3565b6103d061079e366004613834565b6126c5565b60006001600160e01b031982166380ac58cd60e01b14806107d457506001600160e01b03198216635b5e139f60e01b145b806107ef57506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080516079808252610f408201909252606091829160009160208201610f20803683375050604080516079808252610f408201909252929350600092915060208201610f2080368337019050509050600060015b60788160ff161161091b576001600160a01b038716600090815260156020908152604080832060ff808616855292529091205416156109095780848360ff168151811061089957610899613e33565b60ff9283166020918202929092018101919091526001600160a01b03891660009081526015825260408082208585168352909252205484519082169185919085169081106108e9576108e9613e33565b60ff909216602092830291909101909101528161090581613e5f565b9250505b8061091381613e5f565b91505061084a565b5060008160ff166001600160401b0381111561093957610939613965565b604051908082528060200260200182016040528015610962578160200160208202803683370190505b50905060008260ff166001600160401b0381111561098257610982613965565b6040519080825280602002602001820160405280156109ab578160200160208202803683370190505b50905060005b8360ff168160ff161015610a5757858160ff16815181106109d4576109d4613e33565b6020026020010151838260ff16815181106109f1576109f1613e33565b60ff9283166020918202929092010152855186918316908110610a1657610a16613e33565b6020026020010151828260ff1681518110610a3357610a33613e33565b60ff9092166020928302919091019091015280610a4f81613e5f565b9150506109b1565b509097909650945050505050565b606060008054610a7490613e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa090613e7e565b8015610aed5780601f10610ac257610100808354040283529160200191610aed565b820191906000526020600020905b815481529060010190602001808311610ad057829003601f168201915b5050505050905090565b6000610b028261273b565b506000908152600460205260409020546001600160a01b031690565b6000610b2982611a95565b9050806001600160a01b0316836001600160a01b031603610b9b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610bb75750610bb781336125b5565b610c295760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b92565b610c33838361279a565b505050565b3360009081526017602052604090205460ff16610c675760405162461bcd60e51b8152600401610b9290613eb8565b6001600160a01b038116610c8d5760405162461bcd60e51b8152600401610b9290613efb565b336001600160a01b03821603610cf55760405162461bcd60e51b815260206004820152602760248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152661039b4b3b732b960c91b6064820152608401610b92565b6001600160a01b03811660009081526018602052604090205460ff16610d5d5760405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f7420616e207369676e657200000000000000006044820152606401610b92565b6001600160a01b03166000908152601860205260409020805460ff19169055565b600080610df9338787604051602001610d9993929190613f24565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90506000610e3f85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506128089050565b9050610e806040518060400160405280601a81526020017f6f70656e207061636b207369676e6572207265636f76657265640000000000008152508261282c565b9150505b949350505050565b3360009081526017602052604090205460ff16610ebb5760405162461bcd60e51b8152600401610b9290613eb8565b6001600160a01b038116610ee15760405162461bcd60e51b8152600401610b9290613efb565b336001600160a01b03821603610f485760405162461bcd60e51b815260206004820152602660248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152651037bbb732b960d11b6064820152608401610b92565b6001600160a01b03811660009081526017602052604090205460ff16610fb05760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420616e206f776e65720000000000000000006044820152606401610b92565b6001600160a01b03166000908152601760205260409020805460ff19169055565b3360009081526015602090815260408083206079845290915290205460ff1661103c5760405162461bcd60e51b815260206004820152601860248201527f4e6f207469656e657320616c62756d206465207175656d6100000000000000006044820152606401610b92565b336000908152601560209081526040808320607984529091528120805460ff169161106683613fb2565b825460ff9182166101009390930a92830291909202199091161790555033600090815260166020526040812080548392906110a2908490613fcf565b90915550600090505b60ff81168211156111435733600090815260156020526040812090848460ff85168181106110db576110db613e33565b90506020020160208101906110f09190613bd9565b60ff9081168252602082019290925260400160009081208054909216919061111783613fb2565b91906101000a81548160ff021916908360ff16021790555050808061113b90613e5f565b9150506110ab565b503360009081526016602052604090205461116090603c90613ff8565b6000036112cd576111ff336011805461117890613e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546111a490613e7e565b80156111f15780601f106111c6576101008083540402835291602001916111f1565b820191906000526020600020905b8154815290600101906020018083116111d457829003601f168201915b505050505060796002612871565b600e54600c6000828254611213919061400c565b9091555050600a54600f5460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561126d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611291919061401f565b5060408051338152600260208201527f6d0344e2059f835240cb954cce07d4b26f0d0844eecc234f7ee0e292ba80a1aa91015b60405180910390a15b5050565b6112dc335b826128d4565b6112f85760405162461bcd60e51b8152600401610b929061403c565b610c33838383612932565b60085460405163d3e6a7ad60e01b81526004810186905233916001600160a01b03169063d3e6a7ad90602401602060405180830381865afa15801561134c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113709190614089565b6001600160a01b0316146113be5760405162461bcd60e51b81526020600482015260156024820152744573746520736f627265206e6f206573207475796f60581b6044820152606401610b92565b600f83511061140f5760405162461bcd60e51b815260206004820152601960248201527f4c696d6974652064652063617274617320657863656469646f000000000000006044820152606401610b92565b60125460ff161561151a576000611434338686604051602001610d9993929190613f24565b9050600061147a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506128089050565b90506114bb6040518060400160405280601a81526020017f6f70656e207061636b207369676e6572207265636f76657265640000000000008152508261282c565b6001600160a01b03811660009081526018602052604090205460ff166115175760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610b92565b50505b6008546040516380f2540b60e01b8152600481018690523360248201526001600160a01b03909116906380f2540b90604401600060405180830381600087803b15801561156657600080fd5b505af115801561157a573d6000803e3d6000fd5b505050506006600b5461158d91906140a6565b600b5461159a919061400c565b600c60008282546115ab9190613fcf565b9091555050825160005b818160ff16101561177657848160ff16815181106115d5576115d5613e33565b602002602001015160ff166078146116235761138960136000878460ff168151811061160357611603613e33565b602002602001015160ff1681526020019081526020016000205410611654565b607860005260136020527fdf3e0ba85198d5d74c53175fb24486e82f8e6ac58d6fdc8357e123450eab705e54610bb9115b6116a05760405162461bcd60e51b815260206004820152601e60248201527f696e76616c69642063617264496e76656e746f727920706f736974696f6e00006044820152606401610b92565b60136000868360ff16815181106116b9576116b9613e33565b602002602001015160ff16815260200190815260200160002060008154809291906116e3906140ba565b90915550503360009081526015602052604081208651909190879060ff851690811061171157611711613e33565b602002602001015160ff1660ff168152602001908152602001600020600081819054906101000a900460ff168092919061174a90613e5f565b91906101000a81548160ff021916908360ff16021790555050808061176e90613e5f565b9150506115b5565b507fbabe8f5e83e93ab103ddf917b4292a19335a5128b3530bedd896a681cdd945e33385876040516117aa939291906140d3565b60405180910390a15050505050565b33600090815260156020908152604080832060ff8086168552925290912054166117f55760405162461bcd60e51b8152600401610b9290614107565b336001600160a01b0383160361184d5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73662070726f706961206e6f207065726d69746964610000000000006044820152606401610b92565b6001600160a01b0382166118a35760405162461bcd60e51b815260206004820152601e60248201527f5175656d61646f20646520636172746173206e6f207065726d697469646f00006044820152606401610b92565b33600090815260156020908152604080832060ff8086168552925282208054909116916118cf83613fb2565b82546101009290920a60ff8181021990931691831602179091556001600160a01b0384166000908152601560209081526040808320868516845290915281208054909216925061191e83613e5f565b91906101000a81548160ff021916908360ff160217905550505050565b610c33838383604051806020016040528060008152506123c7565b61195f336112d6565b61197b5760405162461bcd60e51b8152600401610b929061403c565b61198481612aa3565b50565b3360009081526017602052604090205460ff166119b65760405162461bcd60e51b8152600401610b9290613eb8565b806119c030611bd7565b10156119cb57600080fd5b80600c60008282546119dd919061400c565b9091555050600a5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a57919061401f565b5060408051338152602081018390527f23d6711a1d031134a36921253c75aa59e967d38e369ac625992824315e204f2091015b60405180910390a150565b6000818152600260205260408120546001600160a01b0316806107ef5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b92565b3360009081526017602052604090205460ff16611b245760405162461bcd60e51b8152600401610b9290613eb8565b6001600160a01b038116611b4a5760405162461bcd60e51b8152600401610b9290613efb565b6001600160a01b03811660009081526017602052604090205460ff1615611bb35760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920616e206f776e657200000000006044820152606401610b92565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b60006001600160a01b038216611c415760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b92565b506001600160a01b031660009081526003602052604090205490565b611c65612aac565b611c6f6000612b06565b565b6008546001600160a01b03163314611cc45760405162461bcd60e51b8152602060048201526016602482015275536f6c6f20636f6e747261746f206465207061636b7360501b6044820152606401610b92565b80600c6000828254611cd69190613fcf565b909155505050565b3360009081526015602090815260408083206078845290915290205460ff16611d425760405162461bcd60e51b81526020600482015260166024820152754e6f207469656e6573206e696e67756e20616c62756d60501b6044820152606401610b92565b600e54600c541015611d8d5760405162461bcd60e51b8152602060048201526014602482015273466f6e646f7320696e737566696369656e74657360601b6044820152606401610b92565b6000805b60798160ff161015611e235733600090815260156020908152604080832060ff80861685529252822054169003611dcb5760019150611e23565b33600090815260156020908152604080832060ff808616855292528220805490911691611df783613fb2565b91906101000a81548160ff021916908360ff160217905550508080611e1b90613e5f565b915050611d91565b508015611e725760405162461bcd60e51b815260206004820152601760248201527f4d75737420636f6d706c6574652074686520616c62756d0000000000000000006044820152606401610b92565b611f0a3360108054611e8390613e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054611eaf90613e7e565b8015611efc5780601f10611ed157610100808354040283529160200191611efc565b820191906000526020600020905b815481529060010190602001808311611edf57829003601f168201915b505050505060786002612871565b600e54600c6000828254611f1e919061400c565b9091555050600a54600e5460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611f78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9c919061401f565b5060408051338152600160208201527f6d0344e2059f835240cb954cce07d4b26f0d0844eecc234f7ee0e292ba80a1aa9101611a8a565b606060018054610a7490613e7e565b600d8054611fef90613e7e565b80601f016020809104026020016040519081016040528092919081815260200182805461201b90613e7e565b80156120685780601f1061203d57610100808354040283529160200191612068565b820191906000526020600020905b81548152906001019060200180831161204b57829003601f168201915b505050505081565b3360009081526017602052604090205460ff1661209f5760405162461bcd60e51b8152600401610b9290613eb8565b60106120ab8382614183565b5060116120b88282614183565b507fabfd337ac5625b7dc2ddd3d3bd465fb1dec15322eeeed81032268b337880bec682826040516112c4929190614242565b336001600160a01b038416036121505760405162461bcd60e51b815260206004820152602560248201527f4e6f2074652070756564657320656e76696172206361727461732061207469206044820152646d69736d6f60d81b6064820152608401610b92565b6001600160a01b0383166121b55760405162461bcd60e51b815260206004820152602660248201527f4e6f20707565646573207175656d6172206361727461732064652065737461206044820152656d616e65726160d01b6064820152608401610b92565b60005b60ff811682111561234f5733600090815260156020526040812081858560ff86168181106121e8576121e8613e33565b90506020020160208101906121fd9190613bd9565b60ff908116825260208201929092526040016000205416116122315760405162461bcd60e51b8152600401610b9290614107565b33600090815260156020526040812090848460ff851681811061225657612256613e33565b905060200201602081019061226b9190613bd9565b60ff9081168252602082019290925260400160009081208054909216919061229283613fb2565b91906101000a81548160ff021916908360ff1602179055505060156000856001600160a01b03166001600160a01b03168152602001908152602001600020600084848460ff168181106122e7576122e7613e33565b90506020020160208101906122fc9190613bd9565b60ff9081168252602082019290925260400160009081208054909216919061232383613e5f565b91906101000a81548160ff021916908360ff16021790555050808061234790613e5f565b9150506121b8565b50505050565b6112cd338383612b58565b60005b60798160ff1610156119845733600090815260156020908152604080832060ff80861685529252822080549091169161239b83613e5f565b91906101000a81548160ff021916908360ff1602179055505080806123bf90613e5f565b915050612363565b6123d133836128d4565b6123ed5760405162461bcd60e51b8152600401610b929061403c565b61234f84848484612c26565b33600090815260156020908152604080832060ff8086168552925290912054166124355760405162461bcd60e51b8152600401610b9290614107565b33600090815260156020908152604080832060ff80861685529252822080549091169161246183613fb2565b91906101000a81548160ff021916908360ff160217905550506000600d604051806040016040528060018152602001602f60f81b8152506124a48460ff16612c59565b60405180604001604052806005815260200164173539b7b760d91b8152506040516020016124d59493929190614267565b60405160208183030381529060405290506112cd33828460ff166001612871565b60108054611fef90613e7e565b60606107ef82612d59565b3360009081526017602052604090205460ff1661253d5760405162461bcd60e51b8152600401610b9290613eb8565b6012805460ff1916911515919091179055565b60118054611fef90613e7e565b6008546001600160a01b031633146125b05760405162461bcd60e51b8152602060048201526016602482015275536f6c6f20636f6e747261746f206465207061636b7360501b6044820152606401610b92565b600b55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3360009081526017602052604090205460ff166126125760405162461bcd60e51b8152600401610b9290613eb8565b6001600160a01b0381166126385760405162461bcd60e51b8152600401610b9290613efb565b6001600160a01b03811660009081526018602052604090205460ff16156126a15760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920616e206f776e657200000000006044820152606401610b92565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6126cd612aac565b6001600160a01b0381166127325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b92565b61198481612b06565b6000818152600260205260409020546001600160a01b03166119845760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b92565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127cf82611a95565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008060006128178585612e61565b9150915061282481612ea6565b509392505050565b6112cd8282604051602401612842929190614316565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052612ff0565b600061287c60095490565b905061288c600980546001019055565b600081815260146020526040902081815560018101849055600201805461ff00191661010060ff8516021790556128c38582612ff9565b6128cd8185613013565b5050505050565b6000806128e083611a95565b9050806001600160a01b0316846001600160a01b03161480612907575061290781856125b5565b80610e845750836001600160a01b031661292084610af7565b6001600160a01b031614949350505050565b826001600160a01b031661294582611a95565b6001600160a01b03161461296b5760405162461bcd60e51b8152600401610b9290614340565b6001600160a01b0382166129cd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b92565b6129da83838360016130a6565b826001600160a01b03166129ed82611a95565b6001600160a01b031614612a135760405162461bcd60e51b8152600401610b9290614340565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6119848161312e565b6007546001600160a01b03163314611c6f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b92565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603612bb95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b92565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612c31848484612932565b612c3d8484848461316e565b61234f5760405162461bcd60e51b8152600401610b9290614385565b606081600003612c805750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612caa5780612c94816140ba565b9150612ca39050600a836140a6565b9150612c84565b6000816001600160401b03811115612cc457612cc4613965565b6040519080825280601f01601f191660200182016040528015612cee576020820181803683370190505b5090505b8415610e8457612d0360018361400c565b9150612d10600a86613ff8565b612d1b906030613fcf565b60f81b818381518110612d3057612d30613e33565b60200101906001600160f81b031916908160001a905350612d52600a866140a6565b9450612cf2565b6060612d648261273b565b60008281526006602052604081208054612d7d90613e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054612da990613e7e565b8015612df65780601f10612dcb57610100808354040283529160200191612df6565b820191906000526020600020905b815481529060010190602001808311612dd957829003601f168201915b505050505090506000612e1460408051602081019091526000815290565b90508051600003612e26575092915050565b815115612e58578082604051602001612e409291906143d7565b60405160208183030381529060405292505050919050565b610e848461326c565b6000808251604103612e975760208301516040840151606085015160001a612e8b878285856132e0565b94509450505050612e9f565b506000905060025b9250929050565b6000816004811115612eba57612eba614406565b03612ec25750565b6001816004811115612ed657612ed6614406565b03612f235760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b92565b6002816004811115612f3757612f37614406565b03612f845760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b92565b6003816004811115612f9857612f98614406565b036119845760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b92565b611984816133a4565b6112cd8282604051806020016040528060008152506133c5565b6000828152600260205260409020546001600160a01b031661308e5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610b92565b6000828152600660205260409020610c338282614183565b600181111561234f576001600160a01b038416156130ec576001600160a01b038416600090815260036020526040812080548392906130e690849061400c565b90915550505b6001600160a01b0383161561234f576001600160a01b03831660009081526003602052604081208054839290613123908490613fcf565b909155505050505050565b613137816133f8565b6000818152600660205260409020805461315090613e7e565b1590506119845760008181526006602052604081206119849161379e565b60006001600160a01b0384163b1561326457604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906131b290339089908890889060040161441c565b6020604051808303816000875af19250505080156131ed575060408051601f3d908101601f191682019092526131ea91810190614459565b60015b61324a573d80801561321b576040519150601f19603f3d011682016040523d82523d6000602084013e613220565b606091505b5080516000036132425760405162461bcd60e51b8152600401610b9290614385565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e84565b506001610e84565b60606132778261273b565b600061328e60408051602081019091526000815290565b905060008151116132ae57604051806020016040528060008152506132d9565b806132b88461349b565b6040516020016132c99291906143d7565b6040516020818303038152906040525b9392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613317575060009050600361339b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561336b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166133945760006001925092505061339b565b9150600090505b94509492505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6133cf838361352d565b6133dc600084848461316e565b610c335760405162461bcd60e51b8152600401610b9290614385565b600061340382611a95565b90506134138160008460016130a6565b61341c82611a95565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606060006134a8836136c6565b60010190506000816001600160401b038111156134c7576134c7613965565b6040519080825280601f01601f1916602001820160405280156134f1576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846134fb57509392505050565b6001600160a01b0382166135835760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b92565b6000818152600260205260409020546001600160a01b0316156135e85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b92565b6135f66000838360016130a6565b6000818152600260205260409020546001600160a01b03161561365b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b92565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106137055772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613731576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061374f57662386f26fc10000830492506010015b6305f5e1008310613767576305f5e100830492506008015b612710831061377b57612710830492506004015b6064831061378d576064830492506002015b600a83106107ef5760010192915050565b5080546137aa90613e7e565b6000825580601f106137ba575050565b601f01602090049060005260206000209081019061198491905b808211156137e857600081556001016137d4565b5090565b6001600160e01b03198116811461198457600080fd5b60006020828403121561381457600080fd5b81356132d9816137ec565b6001600160a01b038116811461198457600080fd5b60006020828403121561384657600080fd5b81356132d98161381f565b600081518084526020808501945080840160005b8381101561388457815160ff1687529582019590820190600101613865565b509495945050505050565b6040815260006138a26040830185613851565b82810360208401526138b48185613851565b95945050505050565b60005b838110156138d85781810151838201526020016138c0565b50506000910152565b600081518084526138f98160208601602086016138bd565b601f01601f19169290920160200192915050565b6020815260006132d960208301846138e1565b60006020828403121561393257600080fd5b5035919050565b6000806040838503121561394c57600080fd5b82356139578161381f565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156139a3576139a3613965565b604052919050565b803560ff811681146139bc57600080fd5b919050565b60008083601f8401126139d357600080fd5b5081356001600160401b038111156139ea57600080fd5b602083019150836020828501011115612e9f57600080fd5b60008060008060608587031215613a1857600080fd5b843593506020808601356001600160401b0380821115613a3757600080fd5b818801915088601f830112613a4b57600080fd5b813581811115613a5d57613a5d613965565b8060051b613a6c85820161397b565b918252838101850191858101908c841115613a8657600080fd5b948601945b83861015613aab57613a9c866139ab565b82529486019490860190613a8b565b98505050506040880135925080831115613ac457600080fd5b5050613ad2878288016139c1565b95989497509550505050565b60008083601f840112613af057600080fd5b5081356001600160401b03811115613b0757600080fd5b6020830191508360208260051b8501011115612e9f57600080fd5b60008060208385031215613b3557600080fd5b82356001600160401b03811115613b4b57600080fd5b613b5785828601613ade565b90969095509350505050565b600080600060608486031215613b7857600080fd5b8335613b838161381f565b92506020840135613b938161381f565b929592945050506040919091013590565b60008060408385031215613bb757600080fd5b8235613bc28161381f565b9150613bd0602084016139ab565b90509250929050565b600060208284031215613beb57600080fd5b6132d9826139ab565b60006001600160401b03831115613c0d57613c0d613965565b613c20601f8401601f191660200161397b565b9050828152838383011115613c3457600080fd5b828260208301376000602084830101529392505050565b600082601f830112613c5c57600080fd5b6132d983833560208501613bf4565b60008060408385031215613c7e57600080fd5b82356001600160401b0380821115613c9557600080fd5b613ca186838701613c4b565b93506020850135915080821115613cb757600080fd5b50613cc485828601613c4b565b9150509250929050565b600080600060408486031215613ce357600080fd5b8335613cee8161381f565b925060208401356001600160401b03811115613d0957600080fd5b613d1586828701613ade565b9497909650939450505050565b801515811461198457600080fd5b60008060408385031215613d4357600080fd5b8235613d4e8161381f565b91506020830135613d5e81613d22565b809150509250929050565b60008060008060808587031215613d7f57600080fd5b8435613d8a8161381f565b93506020850135613d9a8161381f565b92506040850135915060608501356001600160401b03811115613dbc57600080fd5b8501601f81018713613dcd57600080fd5b613ddc87823560208401613bf4565b91505092959194509250565b600060208284031215613dfa57600080fd5b81356132d981613d22565b60008060408385031215613e1857600080fd5b8235613e238161381f565b91506020830135613d5e8161381f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613e7557613e75613e49565b60010192915050565b600181811c90821680613e9257607f821691505b602082108103613eb257634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f4f6e6c79206f776e6572732063616e2063616c6c20746869732066756e63746960408201526237b71760e91b606082015260800190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6bffffffffffffffffffffffff198460601b1681528260148201526000603482018351602080860160005b83811015613f6e57815160ff1685529382019390820190600101613f4f565b50507f30786631644437313839356534396231353633363933393639646535303839388352693139376344463334383160b01b9083015250602a0195945050505050565b600060ff821680613fc557613fc5613e49565b6000190192915050565b808201808211156107ef576107ef613e49565b634e487b7160e01b600052601260045260246000fd5b60008261400757614007613fe2565b500690565b818103818111156107ef576107ef613e49565b60006020828403121561403157600080fd5b81516132d981613d22565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60006020828403121561409b57600080fd5b81516132d98161381f565b6000826140b5576140b5613fe2565b500490565b6000600182016140cc576140cc613e49565b5060010190565b6001600160a01b03841681526060602082018190526000906140f790830185613851565b9050826040830152949350505050565b6020808252601490820152734e6f207469656e6573206573746120636172746160601b604082015260600190565b601f821115610c3357600081815260208120601f850160051c8101602086101561415c5750805b601f850160051c820191505b8181101561417b57828155600101614168565b505050505050565b81516001600160401b0381111561419c5761419c613965565b6141b0816141aa8454613e7e565b84614135565b602080601f8311600181146141e557600084156141cd5750858301515b600019600386901b1c1916600185901b17855561417b565b600085815260208120601f198616915b82811015614214578886015182559484019460019091019084016141f5565b50858210156142325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061425560408301856138e1565b82810360208401526138b481856138e1565b600080865461427581613e7e565b6001828116801561428d57600181146142a2576142d1565b60ff19841687528215158302870194506142d1565b8a60005260208060002060005b858110156142c85781548a8201529084019082016142af565b50505082870194505b5050505085516142e5818360208a016138bd565b85519101906142f88183602089016138bd565b845191019061430b8183602088016138bd565b019695505050505050565b60408152600061432960408301856138e1565b905060018060a01b03831660208301529392505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600083516143e98184602088016138bd565b8351908301906143fd8183602088016138bd565b01949350505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061444f908301846138e1565b9695505050505050565b60006020828403121561446b57600080fd5b81516132d9816137ec56fea2646970667358221220550d2b840163a69e1b0617b7ad5eac3a4f81492877f01c5d8d92389464d1670c64736f6c63430008120033", + "bytecode": "0x60806040526710a741a462780000600b5567d02ab486cedc0000600e55670de0b6b3a7640000600f553480156200003557600080fd5b5060405162004b3638038062004b36833981016040819052620000589162000348565b6040518060400160405280600a81526020016947616d6d61436172647360b01b815250604051806040016040528060068152602001654e4f465f474360d01b8152508160009081620000ab9190620004ca565b506001620000ba8282620004ca565b505050620000d7620000d16200029960201b60201c565b6200029d565b600880546001600160a01b038086166001600160a01b031992831617909255600a805492871692909116919091179055600d620001158382620004ca565b5060408051808201825260018152602f60f81b60208083019190915282518084018452600381526203132360ec1b8183015283518085018552600681526523173539b7b760d11b8184015293516200017494600d949390910162000596565b60405160208183030381529060405260109081620001939190620004ca565b5060408051808201825260018152602f60f81b60208083019190915282518084018452600381526231323160e81b8183015283518085018552600681526523173539b7b760d11b818401529351620001f294600d949390910162000596565b60405160208183030381529060405260119081620002119190620004ca565b506001600160a01b0381166000908152601860205260408120805460ff199081166001179091556012805490911690555b607a8110156200027357600081815260136020526040902060019055806200026a8162000653565b91505062000242565b5050336000908152601760205260409020805460ff19166001179055506200067b915050565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200030757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200033f57818101518382015260200162000325565b50506000910152565b600080600080608085870312156200035f57600080fd5b6200036a85620002ef565b93506200037a60208601620002ef565b60408601519093506001600160401b03808211156200039857600080fd5b818701915087601f830112620003ad57600080fd5b815181811115620003c257620003c26200030c565b604051601f8201601f19908116603f01168101908382118183101715620003ed57620003ed6200030c565b816040528281528a60208487010111156200040757600080fd5b6200041a83602083016020880162000322565b80965050505050506200043060608601620002ef565b905092959194509250565b600181811c908216806200045057607f821691505b6020821081036200047157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004c557600081815260208120601f850160051c81016020861015620004a05750805b601f850160051c820191505b81811015620004c157828155600101620004ac565b5050505b505050565b81516001600160401b03811115620004e657620004e66200030c565b620004fe81620004f784546200043b565b8462000477565b602080601f8311600181146200053657600084156200051d5750858301515b600019600386901b1c1916600185901b178555620004c1565b600085815260208120601f198616915b82811015620005675788860151825594840194600190910190840162000546565b5085821015620005865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808654620005a6816200043b565b60018281168015620005c15760018114620005d75762000608565b60ff198416875282151583028701945062000608565b8a60005260208060002060005b85811015620005ff5781548a820152908401908201620005e4565b50505082870194505b5050505085516200061e818360208a0162000322565b85519101906200063381836020890162000322565b84519101906200064881836020880162000322565b019695505050505050565b6000600182016200067457634e487b7160e01b600052601160045260246000fd5b5060010190565b6144ab806200068b6000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c8063809eb3551161019d578063aaaeca17116100e9578063dec3f6d9116100a2578063e606df871161007c578063e606df8714610757578063e985e9c51461076a578063eb12d61e1461077d578063f2fde38b1461079057600080fd5b8063dec3f6d914610733578063e1883c6e1461073b578063e5db587a1461074e57600080fd5b8063aaaeca17146106d7578063b88d4fde146106df578063bf400a6a146106f2578063c3461c0714610705578063c87b56dd1461070d578063dbfc05cf1461072057600080fd5b806395d89b41116101565780639c7f707f116101305780639c7f707f146106955780639f4415d8146106a8578063a1af8ad4146106b1578063a22cb465146106c457600080fd5b806395d89b411461067857806396884135146106805780639abc83201461068d57600080fd5b8063809eb355146105875780638ba526fc146105c75780638da5cb5b146105da5780638dc10768146105eb5780638dd8be471461065d5780639038f4141461067057600080fd5b8063335c8b631161025c5780635dde20d81161021557806370a08231116101ef57806370a0823114610529578063715018a61461053c578063736c0d5b146105445780637e50fa8f1461056757600080fd5b80635dde20d8146104e35780636352211e146105035780637065cb481461051657600080fd5b8063335c8b631461045757806342842e0e1461046e57806342966c6814610481578063483823e8146104945780634e5ad3181461049d5780635312ea8e146104d057600080fd5b80630e316ab7116102c957806320965a5f116102a357806320965a5f1461040b57806323b872dd1461041e578063267b841d146104315780632ca699e71461044457600080fd5b80630e316ab7146103d25780631306952c146103e5578063173825d9146103f857600080fd5b806301ffc9a714610311578063022914a7146103395780630435dcaf1461035c57806306fdde031461037d578063081812fc14610392578063095ea7b3146103bd575b600080fd5b61032461031f366004613801565b6107a3565b60405190151581526020015b60405180910390f35b610324610347366004613833565b60176020526000908152604090205460ff1681565b61036f61036a366004613833565b6107f5565b60405161033092919061388e565b610385610a64565b604051610330919061390c565b6103a56103a036600461391f565b610af6565b6040516001600160a01b039091168152602001610330565b6103d06103cb366004613938565b610b1d565b005b6103d06103e0366004613833565b610c37565b6103a56103f3366004613a01565b610d7d565b6103d0610406366004613833565b610e8b565b6103d0610419366004613b21565b610fd0565b6103d061042c366004613b62565b6112d0565b6103d061043f366004613a01565b611302565b6103d0610452366004613ba3565b6117b8565b610460600b5481565b604051908152602001610330565b6103d061047c366004613b62565b61193a565b6103d061048f36600461391f565b611955565b610460600f5481565b6103246104ab366004613bd8565b33600090815260156020908152604080832060ff948516845290915290205416151590565b6103d06104de36600461391f565b611986565b6104606104f136600461391f565b60136020526000908152604090205481565b6103a561051136600461391f565b611a94565b6103d0610524366004613833565b611af4565b610460610537366004613833565b611bd6565b6103d0611c5c565b610324610552366004613833565b60186020526000908152604090205460ff1681565b610460610575366004613833565b60166020526000908152604090205481565b6105b5610595366004613ba3565b601560209081526000928352604080842090915290825290205460ff1681565b60405160ff9091168152602001610330565b6103d06105d536600461391f565b611c70565b6007546001600160a01b03166103a5565b61062d6105f936600461391f565b60146020526000908152604090208054600182015460028301546003909301549192909160ff808316926101009004169085565b6040805195865260208601949094529115159284019290925260ff9091166060830152608082015260a001610330565b6008546103a5906001600160a01b031681565b6103d0611cdd565b610385611fd2565b6012546103249060ff1681565b610385611fe1565b6103d06106a3366004613c6a565b61206f565b610460600e5481565b6103d06106bf366004613ccd565b6120e9565b6103d06106d2366004613d2f565b612354565b6103d061235f565b6103d06106ed366004613d68565b6123c6565b6103d0610700366004613bd8565b6123f8565b6103856124f5565b61038561071b36600461391f565b612502565b6103d061072e366004613de7565b61250d565b61038561254f565b6103d061074936600461391f565b61255c565b610460600c5481565b600a546103a5906001600160a01b031681565b610324610778366004613e04565b6125b4565b6103d061078b366004613833565b6125e2565b6103d061079e366004613833565b6126c4565b60006001600160e01b031982166380ac58cd60e01b14806107d457506001600160e01b03198216635b5e139f60e01b145b806107ef57506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080516079808252610f408201909252606091829160009160208201610f20803683375050604080516079808252610f408201909252929350600092915060208201610f20803683370190505090506000805b60778160ff161161091a576001600160a01b038716600090815260156020908152604080832060ff808616855292529091205416156109085780848360ff168151811061089857610898613e32565b60ff9283166020918202929092018101919091526001600160a01b03891660009081526015825260408082208585168352909252205484519082169185919085169081106108e8576108e8613e32565b60ff909216602092830291909101909101528161090481613e5e565b9250505b8061091281613e5e565b915050610849565b5060008160ff166001600160401b0381111561093857610938613964565b604051908082528060200260200182016040528015610961578160200160208202803683370190505b50905060008260ff166001600160401b0381111561098157610981613964565b6040519080825280602002602001820160405280156109aa578160200160208202803683370190505b50905060005b8360ff168160ff161015610a5657858160ff16815181106109d3576109d3613e32565b6020026020010151838260ff16815181106109f0576109f0613e32565b60ff9283166020918202929092010152855186918316908110610a1557610a15613e32565b6020026020010151828260ff1681518110610a3257610a32613e32565b60ff9092166020928302919091019091015280610a4e81613e5e565b9150506109b0565b509097909650945050505050565b606060008054610a7390613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f90613e7d565b8015610aec5780601f10610ac157610100808354040283529160200191610aec565b820191906000526020600020905b815481529060010190602001808311610acf57829003601f168201915b5050505050905090565b6000610b018261273a565b506000908152600460205260409020546001600160a01b031690565b6000610b2882611a94565b9050806001600160a01b0316836001600160a01b031603610b9a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610bb65750610bb681336125b4565b610c285760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b91565b610c328383612799565b505050565b3360009081526017602052604090205460ff16610c665760405162461bcd60e51b8152600401610b9190613eb7565b6001600160a01b038116610c8c5760405162461bcd60e51b8152600401610b9190613efa565b336001600160a01b03821603610cf45760405162461bcd60e51b815260206004820152602760248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152661039b4b3b732b960c91b6064820152608401610b91565b6001600160a01b03811660009081526018602052604090205460ff16610d5c5760405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f7420616e207369676e657200000000000000006044820152606401610b91565b6001600160a01b03166000908152601860205260409020805460ff19169055565b600080610df8338787604051602001610d9893929190613f23565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90506000610e3e85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506128079050565b9050610e7f6040518060400160405280601a81526020017f6f70656e207061636b207369676e6572207265636f76657265640000000000008152508261282b565b9150505b949350505050565b3360009081526017602052604090205460ff16610eba5760405162461bcd60e51b8152600401610b9190613eb7565b6001600160a01b038116610ee05760405162461bcd60e51b8152600401610b9190613efa565b336001600160a01b03821603610f475760405162461bcd60e51b815260206004820152602660248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152651037bbb732b960d11b6064820152608401610b91565b6001600160a01b03811660009081526017602052604090205460ff16610faf5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420616e206f776e65720000000000000000006044820152606401610b91565b6001600160a01b03166000908152601760205260409020805460ff19169055565b3360009081526015602090815260408083206079845290915290205460ff1661103b5760405162461bcd60e51b815260206004820152601860248201527f4e6f207469656e657320616c62756d206465207175656d6100000000000000006044820152606401610b91565b336000908152601560209081526040808320607984529091528120805460ff169161106583613fb1565b825460ff9182166101009390930a92830291909202199091161790555033600090815260166020526040812080548392906110a1908490613fce565b90915550600090505b60ff81168211156111425733600090815260156020526040812090848460ff85168181106110da576110da613e32565b90506020020160208101906110ef9190613bd8565b60ff9081168252602082019290925260400160009081208054909216919061111683613fb1565b91906101000a81548160ff021916908360ff16021790555050808061113a90613e5e565b9150506110aa565b503360009081526016602052604090205461115f90603c90613ff7565b6000036112cc576111fe336011805461117790613e7d565b80601f01602080910402602001604051908101604052809291908181526020018280546111a390613e7d565b80156111f05780601f106111c5576101008083540402835291602001916111f0565b820191906000526020600020905b8154815290600101906020018083116111d357829003601f168201915b505050505060796002612870565b600e54600c6000828254611212919061400b565b9091555050600a54600f5460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561126c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611290919061401e565b5060408051338152600260208201527f6d0344e2059f835240cb954cce07d4b26f0d0844eecc234f7ee0e292ba80a1aa91015b60405180910390a15b5050565b6112db335b826128d3565b6112f75760405162461bcd60e51b8152600401610b919061403b565b610c32838383612931565b60085460405163d3e6a7ad60e01b81526004810186905233916001600160a01b03169063d3e6a7ad90602401602060405180830381865afa15801561134b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136f9190614088565b6001600160a01b0316146113bd5760405162461bcd60e51b81526020600482015260156024820152744573746520736f627265206e6f206573207475796f60581b6044820152606401610b91565b600f83511061140e5760405162461bcd60e51b815260206004820152601960248201527f4c696d6974652064652063617274617320657863656469646f000000000000006044820152606401610b91565b60125460ff1615611519576000611433338686604051602001610d9893929190613f23565b9050600061147984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506128079050565b90506114ba6040518060400160405280601a81526020017f6f70656e207061636b207369676e6572207265636f76657265640000000000008152508261282b565b6001600160a01b03811660009081526018602052604090205460ff166115165760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610b91565b50505b6008546040516380f2540b60e01b8152600481018690523360248201526001600160a01b03909116906380f2540b90604401600060405180830381600087803b15801561156557600080fd5b505af1158015611579573d6000803e3d6000fd5b505050506006600b5461158c91906140a5565b600b54611599919061400b565b600c60008282546115aa9190613fce565b9091555050825160005b818160ff16101561177557848160ff16815181106115d4576115d4613e32565b602002602001015160ff166078146116225761138960136000878460ff168151811061160257611602613e32565b602002602001015160ff1681526020019081526020016000205410611653565b607860005260136020527fdf3e0ba85198d5d74c53175fb24486e82f8e6ac58d6fdc8357e123450eab705e54610bb9115b61169f5760405162461bcd60e51b815260206004820152601e60248201527f696e76616c69642063617264496e76656e746f727920706f736974696f6e00006044820152606401610b91565b60136000868360ff16815181106116b8576116b8613e32565b602002602001015160ff16815260200190815260200160002060008154809291906116e2906140b9565b90915550503360009081526015602052604081208651909190879060ff851690811061171057611710613e32565b602002602001015160ff1660ff168152602001908152602001600020600081819054906101000a900460ff168092919061174990613e5e565b91906101000a81548160ff021916908360ff16021790555050808061176d90613e5e565b9150506115b4565b507fbabe8f5e83e93ab103ddf917b4292a19335a5128b3530bedd896a681cdd945e33385876040516117a9939291906140d2565b60405180910390a15050505050565b33600090815260156020908152604080832060ff8086168552925290912054166117f45760405162461bcd60e51b8152600401610b9190614106565b336001600160a01b0383160361184c5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73662070726f706961206e6f207065726d69746964610000000000006044820152606401610b91565b6001600160a01b0382166118a25760405162461bcd60e51b815260206004820152601e60248201527f5175656d61646f20646520636172746173206e6f207065726d697469646f00006044820152606401610b91565b33600090815260156020908152604080832060ff8086168552925282208054909116916118ce83613fb1565b82546101009290920a60ff8181021990931691831602179091556001600160a01b0384166000908152601560209081526040808320868516845290915281208054909216925061191d83613e5e565b91906101000a81548160ff021916908360ff160217905550505050565b610c32838383604051806020016040528060008152506123c6565b61195e336112d5565b61197a5760405162461bcd60e51b8152600401610b919061403b565b61198381612aa2565b50565b3360009081526017602052604090205460ff166119b55760405162461bcd60e51b8152600401610b9190613eb7565b806119bf30611bd6565b10156119ca57600080fd5b80600c60008282546119dc919061400b565b9091555050600a5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a56919061401e565b5060408051338152602081018390527f23d6711a1d031134a36921253c75aa59e967d38e369ac625992824315e204f2091015b60405180910390a150565b6000818152600260205260408120546001600160a01b0316806107ef5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b91565b3360009081526017602052604090205460ff16611b235760405162461bcd60e51b8152600401610b9190613eb7565b6001600160a01b038116611b495760405162461bcd60e51b8152600401610b9190613efa565b6001600160a01b03811660009081526017602052604090205460ff1615611bb25760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920616e206f776e657200000000006044820152606401610b91565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b60006001600160a01b038216611c405760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b91565b506001600160a01b031660009081526003602052604090205490565b611c64612aab565b611c6e6000612b05565b565b6008546001600160a01b03163314611cc35760405162461bcd60e51b8152602060048201526016602482015275536f6c6f20636f6e747261746f206465207061636b7360501b6044820152606401610b91565b80600c6000828254611cd59190613fce565b909155505050565b3360009081526015602090815260408083206078845290915290205460ff16611d415760405162461bcd60e51b81526020600482015260166024820152754e6f207469656e6573206e696e67756e20616c62756d60501b6044820152606401610b91565b600e54600c541015611d8c5760405162461bcd60e51b8152602060048201526014602482015273466f6e646f7320696e737566696369656e74657360601b6044820152606401610b91565b6000805b60798160ff161015611e225733600090815260156020908152604080832060ff80861685529252822054169003611dca5760019150611e22565b33600090815260156020908152604080832060ff808616855292528220805490911691611df683613fb1565b91906101000a81548160ff021916908360ff160217905550508080611e1a90613e5e565b915050611d90565b508015611e715760405162461bcd60e51b815260206004820152601760248201527f4d75737420636f6d706c6574652074686520616c62756d0000000000000000006044820152606401610b91565b611f093360108054611e8290613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054611eae90613e7d565b8015611efb5780601f10611ed057610100808354040283529160200191611efb565b820191906000526020600020905b815481529060010190602001808311611ede57829003601f168201915b505050505060786002612870565b600e54600c6000828254611f1d919061400b565b9091555050600a54600e5460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9b919061401e565b5060408051338152600160208201527f6d0344e2059f835240cb954cce07d4b26f0d0844eecc234f7ee0e292ba80a1aa9101611a89565b606060018054610a7390613e7d565b600d8054611fee90613e7d565b80601f016020809104026020016040519081016040528092919081815260200182805461201a90613e7d565b80156120675780601f1061203c57610100808354040283529160200191612067565b820191906000526020600020905b81548152906001019060200180831161204a57829003601f168201915b505050505081565b3360009081526017602052604090205460ff1661209e5760405162461bcd60e51b8152600401610b9190613eb7565b60106120aa8382614182565b5060116120b78282614182565b507fabfd337ac5625b7dc2ddd3d3bd465fb1dec15322eeeed81032268b337880bec682826040516112c3929190614241565b336001600160a01b0384160361214f5760405162461bcd60e51b815260206004820152602560248201527f4e6f2074652070756564657320656e76696172206361727461732061207469206044820152646d69736d6f60d81b6064820152608401610b91565b6001600160a01b0383166121b45760405162461bcd60e51b815260206004820152602660248201527f4e6f20707565646573207175656d6172206361727461732064652065737461206044820152656d616e65726160d01b6064820152608401610b91565b60005b60ff811682111561234e5733600090815260156020526040812081858560ff86168181106121e7576121e7613e32565b90506020020160208101906121fc9190613bd8565b60ff908116825260208201929092526040016000205416116122305760405162461bcd60e51b8152600401610b9190614106565b33600090815260156020526040812090848460ff851681811061225557612255613e32565b905060200201602081019061226a9190613bd8565b60ff9081168252602082019290925260400160009081208054909216919061229183613fb1565b91906101000a81548160ff021916908360ff1602179055505060156000856001600160a01b03166001600160a01b03168152602001908152602001600020600084848460ff168181106122e6576122e6613e32565b90506020020160208101906122fb9190613bd8565b60ff9081168252602082019290925260400160009081208054909216919061232283613e5e565b91906101000a81548160ff021916908360ff16021790555050808061234690613e5e565b9150506121b7565b50505050565b6112cc338383612b57565b60005b60798160ff1610156119835733600090815260156020908152604080832060ff80861685529252822080549091169161239a83613e5e565b91906101000a81548160ff021916908360ff1602179055505080806123be90613e5e565b915050612362565b6123d033836128d3565b6123ec5760405162461bcd60e51b8152600401610b919061403b565b61234e84848484612c25565b33600090815260156020908152604080832060ff8086168552925290912054166124345760405162461bcd60e51b8152600401610b9190614106565b33600090815260156020908152604080832060ff80861685529252822080549091169161246083613fb1565b91906101000a81548160ff021916908360ff160217905550506000600d604051806040016040528060018152602001602f60f81b8152506124a38460ff16612c58565b60405180604001604052806005815260200164173539b7b760d91b8152506040516020016124d49493929190614266565b60405160208183030381529060405290506112cc33828460ff166001612870565b60108054611fee90613e7d565b60606107ef82612d58565b3360009081526017602052604090205460ff1661253c5760405162461bcd60e51b8152600401610b9190613eb7565b6012805460ff1916911515919091179055565b60118054611fee90613e7d565b6008546001600160a01b031633146125af5760405162461bcd60e51b8152602060048201526016602482015275536f6c6f20636f6e747261746f206465207061636b7360501b6044820152606401610b91565b600b55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3360009081526017602052604090205460ff166126115760405162461bcd60e51b8152600401610b9190613eb7565b6001600160a01b0381166126375760405162461bcd60e51b8152600401610b9190613efa565b6001600160a01b03811660009081526018602052604090205460ff16156126a05760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920616e206f776e657200000000006044820152606401610b91565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6126cc612aab565b6001600160a01b0381166127315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b91565b61198381612b05565b6000818152600260205260409020546001600160a01b03166119835760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b91565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127ce82611a94565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008060006128168585612e60565b9150915061282381612ea5565b509392505050565b6112cc8282604051602401612841929190614315565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052612fef565b600061287b60095490565b905061288b600980546001019055565b600081815260146020526040902081815560018101849055600201805461ff00191661010060ff8516021790556128c28582612ff8565b6128cc8185613012565b5050505050565b6000806128df83611a94565b9050806001600160a01b0316846001600160a01b03161480612906575061290681856125b4565b80610e835750836001600160a01b031661291f84610af6565b6001600160a01b031614949350505050565b826001600160a01b031661294482611a94565b6001600160a01b03161461296a5760405162461bcd60e51b8152600401610b919061433f565b6001600160a01b0382166129cc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b91565b6129d983838360016130a5565b826001600160a01b03166129ec82611a94565b6001600160a01b031614612a125760405162461bcd60e51b8152600401610b919061433f565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6119838161312d565b6007546001600160a01b03163314611c6e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b91565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603612bb85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b91565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612c30848484612931565b612c3c8484848461316d565b61234e5760405162461bcd60e51b8152600401610b9190614384565b606081600003612c7f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612ca95780612c93816140b9565b9150612ca29050600a836140a5565b9150612c83565b6000816001600160401b03811115612cc357612cc3613964565b6040519080825280601f01601f191660200182016040528015612ced576020820181803683370190505b5090505b8415610e8357612d0260018361400b565b9150612d0f600a86613ff7565b612d1a906030613fce565b60f81b818381518110612d2f57612d2f613e32565b60200101906001600160f81b031916908160001a905350612d51600a866140a5565b9450612cf1565b6060612d638261273a565b60008281526006602052604081208054612d7c90613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054612da890613e7d565b8015612df55780601f10612dca57610100808354040283529160200191612df5565b820191906000526020600020905b815481529060010190602001808311612dd857829003601f168201915b505050505090506000612e1360408051602081019091526000815290565b90508051600003612e25575092915050565b815115612e57578082604051602001612e3f9291906143d6565b60405160208183030381529060405292505050919050565b610e838461326b565b6000808251604103612e965760208301516040840151606085015160001a612e8a878285856132df565b94509450505050612e9e565b506000905060025b9250929050565b6000816004811115612eb957612eb9614405565b03612ec15750565b6001816004811115612ed557612ed5614405565b03612f225760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b91565b6002816004811115612f3657612f36614405565b03612f835760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b91565b6003816004811115612f9757612f97614405565b036119835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b91565b611983816133a3565b6112cc8282604051806020016040528060008152506133c4565b6000828152600260205260409020546001600160a01b031661308d5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610b91565b6000828152600660205260409020610c328282614182565b600181111561234e576001600160a01b038416156130eb576001600160a01b038416600090815260036020526040812080548392906130e590849061400b565b90915550505b6001600160a01b0383161561234e576001600160a01b03831660009081526003602052604081208054839290613122908490613fce565b909155505050505050565b613136816133f7565b6000818152600660205260409020805461314f90613e7d565b1590506119835760008181526006602052604081206119839161379d565b60006001600160a01b0384163b1561326357604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906131b190339089908890889060040161441b565b6020604051808303816000875af19250505080156131ec575060408051601f3d908101601f191682019092526131e991810190614458565b60015b613249573d80801561321a576040519150601f19603f3d011682016040523d82523d6000602084013e61321f565b606091505b5080516000036132415760405162461bcd60e51b8152600401610b9190614384565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e83565b506001610e83565b60606132768261273a565b600061328d60408051602081019091526000815290565b905060008151116132ad57604051806020016040528060008152506132d8565b806132b78461349a565b6040516020016132c89291906143d6565b6040516020818303038152906040525b9392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613316575060009050600361339a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561336a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166133935760006001925092505061339a565b9150600090505b94509492505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6133ce838361352c565b6133db600084848461316d565b610c325760405162461bcd60e51b8152600401610b9190614384565b600061340282611a94565b90506134128160008460016130a5565b61341b82611a94565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606060006134a7836136c5565b60010190506000816001600160401b038111156134c6576134c6613964565b6040519080825280601f01601f1916602001820160405280156134f0576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846134fa57509392505050565b6001600160a01b0382166135825760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b91565b6000818152600260205260409020546001600160a01b0316156135e75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b91565b6135f56000838360016130a5565b6000818152600260205260409020546001600160a01b03161561365a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b91565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106137045772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613730576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061374e57662386f26fc10000830492506010015b6305f5e1008310613766576305f5e100830492506008015b612710831061377a57612710830492506004015b6064831061378c576064830492506002015b600a83106107ef5760010192915050565b5080546137a990613e7d565b6000825580601f106137b9575050565b601f01602090049060005260206000209081019061198391905b808211156137e757600081556001016137d3565b5090565b6001600160e01b03198116811461198357600080fd5b60006020828403121561381357600080fd5b81356132d8816137eb565b6001600160a01b038116811461198357600080fd5b60006020828403121561384557600080fd5b81356132d88161381e565b600081518084526020808501945080840160005b8381101561388357815160ff1687529582019590820190600101613864565b509495945050505050565b6040815260006138a16040830185613850565b82810360208401526138b38185613850565b95945050505050565b60005b838110156138d75781810151838201526020016138bf565b50506000910152565b600081518084526138f88160208601602086016138bc565b601f01601f19169290920160200192915050565b6020815260006132d860208301846138e0565b60006020828403121561393157600080fd5b5035919050565b6000806040838503121561394b57600080fd5b82356139568161381e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156139a2576139a2613964565b604052919050565b803560ff811681146139bb57600080fd5b919050565b60008083601f8401126139d257600080fd5b5081356001600160401b038111156139e957600080fd5b602083019150836020828501011115612e9e57600080fd5b60008060008060608587031215613a1757600080fd5b843593506020808601356001600160401b0380821115613a3657600080fd5b818801915088601f830112613a4a57600080fd5b813581811115613a5c57613a5c613964565b8060051b613a6b85820161397a565b918252838101850191858101908c841115613a8557600080fd5b948601945b83861015613aaa57613a9b866139aa565b82529486019490860190613a8a565b98505050506040880135925080831115613ac357600080fd5b5050613ad1878288016139c0565b95989497509550505050565b60008083601f840112613aef57600080fd5b5081356001600160401b03811115613b0657600080fd5b6020830191508360208260051b8501011115612e9e57600080fd5b60008060208385031215613b3457600080fd5b82356001600160401b03811115613b4a57600080fd5b613b5685828601613add565b90969095509350505050565b600080600060608486031215613b7757600080fd5b8335613b828161381e565b92506020840135613b928161381e565b929592945050506040919091013590565b60008060408385031215613bb657600080fd5b8235613bc18161381e565b9150613bcf602084016139aa565b90509250929050565b600060208284031215613bea57600080fd5b6132d8826139aa565b60006001600160401b03831115613c0c57613c0c613964565b613c1f601f8401601f191660200161397a565b9050828152838383011115613c3357600080fd5b828260208301376000602084830101529392505050565b600082601f830112613c5b57600080fd5b6132d883833560208501613bf3565b60008060408385031215613c7d57600080fd5b82356001600160401b0380821115613c9457600080fd5b613ca086838701613c4a565b93506020850135915080821115613cb657600080fd5b50613cc385828601613c4a565b9150509250929050565b600080600060408486031215613ce257600080fd5b8335613ced8161381e565b925060208401356001600160401b03811115613d0857600080fd5b613d1486828701613add565b9497909650939450505050565b801515811461198357600080fd5b60008060408385031215613d4257600080fd5b8235613d4d8161381e565b91506020830135613d5d81613d21565b809150509250929050565b60008060008060808587031215613d7e57600080fd5b8435613d898161381e565b93506020850135613d998161381e565b92506040850135915060608501356001600160401b03811115613dbb57600080fd5b8501601f81018713613dcc57600080fd5b613ddb87823560208401613bf3565b91505092959194509250565b600060208284031215613df957600080fd5b81356132d881613d21565b60008060408385031215613e1757600080fd5b8235613e228161381e565b91506020830135613d5d8161381e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613e7457613e74613e48565b60010192915050565b600181811c90821680613e9157607f821691505b602082108103613eb157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f4f6e6c79206f776e6572732063616e2063616c6c20746869732066756e63746960408201526237b71760e91b606082015260800190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6bffffffffffffffffffffffff198460601b1681528260148201526000603482018351602080860160005b83811015613f6d57815160ff1685529382019390820190600101613f4e565b50507f30786631644437313839356534396231353633363933393639646535303839388352693139376344463334383160b01b9083015250602a0195945050505050565b600060ff821680613fc457613fc4613e48565b6000190192915050565b808201808211156107ef576107ef613e48565b634e487b7160e01b600052601260045260246000fd5b60008261400657614006613fe1565b500690565b818103818111156107ef576107ef613e48565b60006020828403121561403057600080fd5b81516132d881613d21565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60006020828403121561409a57600080fd5b81516132d88161381e565b6000826140b4576140b4613fe1565b500490565b6000600182016140cb576140cb613e48565b5060010190565b6001600160a01b03841681526060602082018190526000906140f690830185613850565b9050826040830152949350505050565b6020808252601490820152734e6f207469656e6573206573746120636172746160601b604082015260600190565b601f821115610c3257600081815260208120601f850160051c8101602086101561415b5750805b601f850160051c820191505b8181101561417a57828155600101614167565b505050505050565b81516001600160401b0381111561419b5761419b613964565b6141af816141a98454613e7d565b84614134565b602080601f8311600181146141e457600084156141cc5750858301515b600019600386901b1c1916600185901b17855561417a565b600085815260208120601f198616915b82811015614213578886015182559484019460019091019084016141f4565b50858210156142315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061425460408301856138e0565b82810360208401526138b381856138e0565b600080865461427481613e7d565b6001828116801561428c57600181146142a1576142d0565b60ff19841687528215158302870194506142d0565b8a60005260208060002060005b858110156142c75781548a8201529084019082016142ae565b50505082870194505b5050505085516142e4818360208a016138bc565b85519101906142f78183602089016138bc565b845191019061430a8183602088016138bc565b019695505050505050565b60408152600061432860408301856138e0565b905060018060a01b03831660208301529392505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600083516143e88184602088016138bc565b8351908301906143fc8183602088016138bc565b01949350505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061444e908301846138e0565b9695505050505050565b60006020828403121561446a57600080fd5b81516132d8816137eb56fea2646970667358221220510ab41f01bfdbc3d83a04deaeff06c2d6111d39619a96453f03e78c82c969f564736f6c63430008120033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061030c5760003560e01c8063809eb3551161019d578063aaaeca17116100e9578063dec3f6d9116100a2578063e606df871161007c578063e606df8714610757578063e985e9c51461076a578063eb12d61e1461077d578063f2fde38b1461079057600080fd5b8063dec3f6d914610733578063e1883c6e1461073b578063e5db587a1461074e57600080fd5b8063aaaeca17146106d7578063b88d4fde146106df578063bf400a6a146106f2578063c3461c0714610705578063c87b56dd1461070d578063dbfc05cf1461072057600080fd5b806395d89b41116101565780639c7f707f116101305780639c7f707f146106955780639f4415d8146106a8578063a1af8ad4146106b1578063a22cb465146106c457600080fd5b806395d89b411461067857806396884135146106805780639abc83201461068d57600080fd5b8063809eb355146105875780638ba526fc146105c75780638da5cb5b146105da5780638dc10768146105eb5780638dd8be471461065d5780639038f4141461067057600080fd5b8063335c8b631161025c5780635dde20d81161021557806370a08231116101ef57806370a0823114610529578063715018a61461053c578063736c0d5b146105445780637e50fa8f1461056757600080fd5b80635dde20d8146104e35780636352211e146105035780637065cb481461051657600080fd5b8063335c8b631461045757806342842e0e1461046e57806342966c6814610481578063483823e8146104945780634e5ad3181461049d5780635312ea8e146104d057600080fd5b80630e316ab7116102c957806320965a5f116102a357806320965a5f1461040b57806323b872dd1461041e578063267b841d146104315780632ca699e71461044457600080fd5b80630e316ab7146103d25780631306952c146103e5578063173825d9146103f857600080fd5b806301ffc9a714610311578063022914a7146103395780630435dcaf1461035c57806306fdde031461037d578063081812fc14610392578063095ea7b3146103bd575b600080fd5b61032461031f366004613801565b6107a3565b60405190151581526020015b60405180910390f35b610324610347366004613833565b60176020526000908152604090205460ff1681565b61036f61036a366004613833565b6107f5565b60405161033092919061388e565b610385610a64565b604051610330919061390c565b6103a56103a036600461391f565b610af6565b6040516001600160a01b039091168152602001610330565b6103d06103cb366004613938565b610b1d565b005b6103d06103e0366004613833565b610c37565b6103a56103f3366004613a01565b610d7d565b6103d0610406366004613833565b610e8b565b6103d0610419366004613b21565b610fd0565b6103d061042c366004613b62565b6112d0565b6103d061043f366004613a01565b611302565b6103d0610452366004613ba3565b6117b8565b610460600b5481565b604051908152602001610330565b6103d061047c366004613b62565b61193a565b6103d061048f36600461391f565b611955565b610460600f5481565b6103246104ab366004613bd8565b33600090815260156020908152604080832060ff948516845290915290205416151590565b6103d06104de36600461391f565b611986565b6104606104f136600461391f565b60136020526000908152604090205481565b6103a561051136600461391f565b611a94565b6103d0610524366004613833565b611af4565b610460610537366004613833565b611bd6565b6103d0611c5c565b610324610552366004613833565b60186020526000908152604090205460ff1681565b610460610575366004613833565b60166020526000908152604090205481565b6105b5610595366004613ba3565b601560209081526000928352604080842090915290825290205460ff1681565b60405160ff9091168152602001610330565b6103d06105d536600461391f565b611c70565b6007546001600160a01b03166103a5565b61062d6105f936600461391f565b60146020526000908152604090208054600182015460028301546003909301549192909160ff808316926101009004169085565b6040805195865260208601949094529115159284019290925260ff9091166060830152608082015260a001610330565b6008546103a5906001600160a01b031681565b6103d0611cdd565b610385611fd2565b6012546103249060ff1681565b610385611fe1565b6103d06106a3366004613c6a565b61206f565b610460600e5481565b6103d06106bf366004613ccd565b6120e9565b6103d06106d2366004613d2f565b612354565b6103d061235f565b6103d06106ed366004613d68565b6123c6565b6103d0610700366004613bd8565b6123f8565b6103856124f5565b61038561071b36600461391f565b612502565b6103d061072e366004613de7565b61250d565b61038561254f565b6103d061074936600461391f565b61255c565b610460600c5481565b600a546103a5906001600160a01b031681565b610324610778366004613e04565b6125b4565b6103d061078b366004613833565b6125e2565b6103d061079e366004613833565b6126c4565b60006001600160e01b031982166380ac58cd60e01b14806107d457506001600160e01b03198216635b5e139f60e01b145b806107ef57506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080516079808252610f408201909252606091829160009160208201610f20803683375050604080516079808252610f408201909252929350600092915060208201610f20803683370190505090506000805b60778160ff161161091a576001600160a01b038716600090815260156020908152604080832060ff808616855292529091205416156109085780848360ff168151811061089857610898613e32565b60ff9283166020918202929092018101919091526001600160a01b03891660009081526015825260408082208585168352909252205484519082169185919085169081106108e8576108e8613e32565b60ff909216602092830291909101909101528161090481613e5e565b9250505b8061091281613e5e565b915050610849565b5060008160ff166001600160401b0381111561093857610938613964565b604051908082528060200260200182016040528015610961578160200160208202803683370190505b50905060008260ff166001600160401b0381111561098157610981613964565b6040519080825280602002602001820160405280156109aa578160200160208202803683370190505b50905060005b8360ff168160ff161015610a5657858160ff16815181106109d3576109d3613e32565b6020026020010151838260ff16815181106109f0576109f0613e32565b60ff9283166020918202929092010152855186918316908110610a1557610a15613e32565b6020026020010151828260ff1681518110610a3257610a32613e32565b60ff9092166020928302919091019091015280610a4e81613e5e565b9150506109b0565b509097909650945050505050565b606060008054610a7390613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f90613e7d565b8015610aec5780601f10610ac157610100808354040283529160200191610aec565b820191906000526020600020905b815481529060010190602001808311610acf57829003601f168201915b5050505050905090565b6000610b018261273a565b506000908152600460205260409020546001600160a01b031690565b6000610b2882611a94565b9050806001600160a01b0316836001600160a01b031603610b9a5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610bb65750610bb681336125b4565b610c285760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b91565b610c328383612799565b505050565b3360009081526017602052604090205460ff16610c665760405162461bcd60e51b8152600401610b9190613eb7565b6001600160a01b038116610c8c5760405162461bcd60e51b8152600401610b9190613efa565b336001600160a01b03821603610cf45760405162461bcd60e51b815260206004820152602760248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152661039b4b3b732b960c91b6064820152608401610b91565b6001600160a01b03811660009081526018602052604090205460ff16610d5c5760405162461bcd60e51b815260206004820152601860248201527f41646472657373206973206e6f7420616e207369676e657200000000000000006044820152606401610b91565b6001600160a01b03166000908152601860205260409020805460ff19169055565b600080610df8338787604051602001610d9893929190613f23565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90506000610e3e85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506128079050565b9050610e7f6040518060400160405280601a81526020017f6f70656e207061636b207369676e6572207265636f76657265640000000000008152508261282b565b9150505b949350505050565b3360009081526017602052604090205460ff16610eba5760405162461bcd60e51b8152600401610b9190613eb7565b6001600160a01b038116610ee05760405162461bcd60e51b8152600401610b9190613efa565b336001600160a01b03821603610f475760405162461bcd60e51b815260206004820152602660248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152651037bbb732b960d11b6064820152608401610b91565b6001600160a01b03811660009081526017602052604090205460ff16610faf5760405162461bcd60e51b815260206004820152601760248201527f41646472657373206973206e6f7420616e206f776e65720000000000000000006044820152606401610b91565b6001600160a01b03166000908152601760205260409020805460ff19169055565b3360009081526015602090815260408083206079845290915290205460ff1661103b5760405162461bcd60e51b815260206004820152601860248201527f4e6f207469656e657320616c62756d206465207175656d6100000000000000006044820152606401610b91565b336000908152601560209081526040808320607984529091528120805460ff169161106583613fb1565b825460ff9182166101009390930a92830291909202199091161790555033600090815260166020526040812080548392906110a1908490613fce565b90915550600090505b60ff81168211156111425733600090815260156020526040812090848460ff85168181106110da576110da613e32565b90506020020160208101906110ef9190613bd8565b60ff9081168252602082019290925260400160009081208054909216919061111683613fb1565b91906101000a81548160ff021916908360ff16021790555050808061113a90613e5e565b9150506110aa565b503360009081526016602052604090205461115f90603c90613ff7565b6000036112cc576111fe336011805461117790613e7d565b80601f01602080910402602001604051908101604052809291908181526020018280546111a390613e7d565b80156111f05780601f106111c5576101008083540402835291602001916111f0565b820191906000526020600020905b8154815290600101906020018083116111d357829003601f168201915b505050505060796002612870565b600e54600c6000828254611212919061400b565b9091555050600a54600f5460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561126c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611290919061401e565b5060408051338152600260208201527f6d0344e2059f835240cb954cce07d4b26f0d0844eecc234f7ee0e292ba80a1aa91015b60405180910390a15b5050565b6112db335b826128d3565b6112f75760405162461bcd60e51b8152600401610b919061403b565b610c32838383612931565b60085460405163d3e6a7ad60e01b81526004810186905233916001600160a01b03169063d3e6a7ad90602401602060405180830381865afa15801561134b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136f9190614088565b6001600160a01b0316146113bd5760405162461bcd60e51b81526020600482015260156024820152744573746520736f627265206e6f206573207475796f60581b6044820152606401610b91565b600f83511061140e5760405162461bcd60e51b815260206004820152601960248201527f4c696d6974652064652063617274617320657863656469646f000000000000006044820152606401610b91565b60125460ff1615611519576000611433338686604051602001610d9893929190613f23565b9050600061147984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086939250506128079050565b90506114ba6040518060400160405280601a81526020017f6f70656e207061636b207369676e6572207265636f76657265640000000000008152508261282b565b6001600160a01b03811660009081526018602052604090205460ff166115165760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610b91565b50505b6008546040516380f2540b60e01b8152600481018690523360248201526001600160a01b03909116906380f2540b90604401600060405180830381600087803b15801561156557600080fd5b505af1158015611579573d6000803e3d6000fd5b505050506006600b5461158c91906140a5565b600b54611599919061400b565b600c60008282546115aa9190613fce565b9091555050825160005b818160ff16101561177557848160ff16815181106115d4576115d4613e32565b602002602001015160ff166078146116225761138960136000878460ff168151811061160257611602613e32565b602002602001015160ff1681526020019081526020016000205410611653565b607860005260136020527fdf3e0ba85198d5d74c53175fb24486e82f8e6ac58d6fdc8357e123450eab705e54610bb9115b61169f5760405162461bcd60e51b815260206004820152601e60248201527f696e76616c69642063617264496e76656e746f727920706f736974696f6e00006044820152606401610b91565b60136000868360ff16815181106116b8576116b8613e32565b602002602001015160ff16815260200190815260200160002060008154809291906116e2906140b9565b90915550503360009081526015602052604081208651909190879060ff851690811061171057611710613e32565b602002602001015160ff1660ff168152602001908152602001600020600081819054906101000a900460ff168092919061174990613e5e565b91906101000a81548160ff021916908360ff16021790555050808061176d90613e5e565b9150506115b4565b507fbabe8f5e83e93ab103ddf917b4292a19335a5128b3530bedd896a681cdd945e33385876040516117a9939291906140d2565b60405180910390a15050505050565b33600090815260156020908152604080832060ff8086168552925290912054166117f45760405162461bcd60e51b8152600401610b9190614106565b336001600160a01b0383160361184c5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73662070726f706961206e6f207065726d69746964610000000000006044820152606401610b91565b6001600160a01b0382166118a25760405162461bcd60e51b815260206004820152601e60248201527f5175656d61646f20646520636172746173206e6f207065726d697469646f00006044820152606401610b91565b33600090815260156020908152604080832060ff8086168552925282208054909116916118ce83613fb1565b82546101009290920a60ff8181021990931691831602179091556001600160a01b0384166000908152601560209081526040808320868516845290915281208054909216925061191d83613e5e565b91906101000a81548160ff021916908360ff160217905550505050565b610c32838383604051806020016040528060008152506123c6565b61195e336112d5565b61197a5760405162461bcd60e51b8152600401610b919061403b565b61198381612aa2565b50565b3360009081526017602052604090205460ff166119b55760405162461bcd60e51b8152600401610b9190613eb7565b806119bf30611bd6565b10156119ca57600080fd5b80600c60008282546119dc919061400b565b9091555050600a5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a56919061401e565b5060408051338152602081018390527f23d6711a1d031134a36921253c75aa59e967d38e369ac625992824315e204f2091015b60405180910390a150565b6000818152600260205260408120546001600160a01b0316806107ef5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b91565b3360009081526017602052604090205460ff16611b235760405162461bcd60e51b8152600401610b9190613eb7565b6001600160a01b038116611b495760405162461bcd60e51b8152600401610b9190613efa565b6001600160a01b03811660009081526017602052604090205460ff1615611bb25760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920616e206f776e657200000000006044820152606401610b91565b6001600160a01b03166000908152601760205260409020805460ff19166001179055565b60006001600160a01b038216611c405760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b91565b506001600160a01b031660009081526003602052604090205490565b611c64612aab565b611c6e6000612b05565b565b6008546001600160a01b03163314611cc35760405162461bcd60e51b8152602060048201526016602482015275536f6c6f20636f6e747261746f206465207061636b7360501b6044820152606401610b91565b80600c6000828254611cd59190613fce565b909155505050565b3360009081526015602090815260408083206078845290915290205460ff16611d415760405162461bcd60e51b81526020600482015260166024820152754e6f207469656e6573206e696e67756e20616c62756d60501b6044820152606401610b91565b600e54600c541015611d8c5760405162461bcd60e51b8152602060048201526014602482015273466f6e646f7320696e737566696369656e74657360601b6044820152606401610b91565b6000805b60798160ff161015611e225733600090815260156020908152604080832060ff80861685529252822054169003611dca5760019150611e22565b33600090815260156020908152604080832060ff808616855292528220805490911691611df683613fb1565b91906101000a81548160ff021916908360ff160217905550508080611e1a90613e5e565b915050611d90565b508015611e715760405162461bcd60e51b815260206004820152601760248201527f4d75737420636f6d706c6574652074686520616c62756d0000000000000000006044820152606401610b91565b611f093360108054611e8290613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054611eae90613e7d565b8015611efb5780601f10611ed057610100808354040283529160200191611efb565b820191906000526020600020905b815481529060010190602001808311611ede57829003601f168201915b505050505060786002612870565b600e54600c6000828254611f1d919061400b565b9091555050600a54600e5460405163a9059cbb60e01b815233600482015260248101919091526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015611f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9b919061401e565b5060408051338152600160208201527f6d0344e2059f835240cb954cce07d4b26f0d0844eecc234f7ee0e292ba80a1aa9101611a89565b606060018054610a7390613e7d565b600d8054611fee90613e7d565b80601f016020809104026020016040519081016040528092919081815260200182805461201a90613e7d565b80156120675780601f1061203c57610100808354040283529160200191612067565b820191906000526020600020905b81548152906001019060200180831161204a57829003601f168201915b505050505081565b3360009081526017602052604090205460ff1661209e5760405162461bcd60e51b8152600401610b9190613eb7565b60106120aa8382614182565b5060116120b78282614182565b507fabfd337ac5625b7dc2ddd3d3bd465fb1dec15322eeeed81032268b337880bec682826040516112c3929190614241565b336001600160a01b0384160361214f5760405162461bcd60e51b815260206004820152602560248201527f4e6f2074652070756564657320656e76696172206361727461732061207469206044820152646d69736d6f60d81b6064820152608401610b91565b6001600160a01b0383166121b45760405162461bcd60e51b815260206004820152602660248201527f4e6f20707565646573207175656d6172206361727461732064652065737461206044820152656d616e65726160d01b6064820152608401610b91565b60005b60ff811682111561234e5733600090815260156020526040812081858560ff86168181106121e7576121e7613e32565b90506020020160208101906121fc9190613bd8565b60ff908116825260208201929092526040016000205416116122305760405162461bcd60e51b8152600401610b9190614106565b33600090815260156020526040812090848460ff851681811061225557612255613e32565b905060200201602081019061226a9190613bd8565b60ff9081168252602082019290925260400160009081208054909216919061229183613fb1565b91906101000a81548160ff021916908360ff1602179055505060156000856001600160a01b03166001600160a01b03168152602001908152602001600020600084848460ff168181106122e6576122e6613e32565b90506020020160208101906122fb9190613bd8565b60ff9081168252602082019290925260400160009081208054909216919061232283613e5e565b91906101000a81548160ff021916908360ff16021790555050808061234690613e5e565b9150506121b7565b50505050565b6112cc338383612b57565b60005b60798160ff1610156119835733600090815260156020908152604080832060ff80861685529252822080549091169161239a83613e5e565b91906101000a81548160ff021916908360ff1602179055505080806123be90613e5e565b915050612362565b6123d033836128d3565b6123ec5760405162461bcd60e51b8152600401610b919061403b565b61234e84848484612c25565b33600090815260156020908152604080832060ff8086168552925290912054166124345760405162461bcd60e51b8152600401610b9190614106565b33600090815260156020908152604080832060ff80861685529252822080549091169161246083613fb1565b91906101000a81548160ff021916908360ff160217905550506000600d604051806040016040528060018152602001602f60f81b8152506124a38460ff16612c58565b60405180604001604052806005815260200164173539b7b760d91b8152506040516020016124d49493929190614266565b60405160208183030381529060405290506112cc33828460ff166001612870565b60108054611fee90613e7d565b60606107ef82612d58565b3360009081526017602052604090205460ff1661253c5760405162461bcd60e51b8152600401610b9190613eb7565b6012805460ff1916911515919091179055565b60118054611fee90613e7d565b6008546001600160a01b031633146125af5760405162461bcd60e51b8152602060048201526016602482015275536f6c6f20636f6e747261746f206465207061636b7360501b6044820152606401610b91565b600b55565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3360009081526017602052604090205460ff166126115760405162461bcd60e51b8152600401610b9190613eb7565b6001600160a01b0381166126375760405162461bcd60e51b8152600401610b9190613efa565b6001600160a01b03811660009081526018602052604090205460ff16156126a05760405162461bcd60e51b815260206004820152601b60248201527f4164647265737320697320616c726561647920616e206f776e657200000000006044820152606401610b91565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b6126cc612aab565b6001600160a01b0381166127315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b91565b61198381612b05565b6000818152600260205260409020546001600160a01b03166119835760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b91565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127ce82611a94565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008060006128168585612e60565b9150915061282381612ea5565b509392505050565b6112cc8282604051602401612841929190614315565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052612fef565b600061287b60095490565b905061288b600980546001019055565b600081815260146020526040902081815560018101849055600201805461ff00191661010060ff8516021790556128c28582612ff8565b6128cc8185613012565b5050505050565b6000806128df83611a94565b9050806001600160a01b0316846001600160a01b03161480612906575061290681856125b4565b80610e835750836001600160a01b031661291f84610af6565b6001600160a01b031614949350505050565b826001600160a01b031661294482611a94565b6001600160a01b03161461296a5760405162461bcd60e51b8152600401610b919061433f565b6001600160a01b0382166129cc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b91565b6129d983838360016130a5565b826001600160a01b03166129ec82611a94565b6001600160a01b031614612a125760405162461bcd60e51b8152600401610b919061433f565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6119838161312d565b6007546001600160a01b03163314611c6e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b91565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603612bb85760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b91565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612c30848484612931565b612c3c8484848461316d565b61234e5760405162461bcd60e51b8152600401610b9190614384565b606081600003612c7f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612ca95780612c93816140b9565b9150612ca29050600a836140a5565b9150612c83565b6000816001600160401b03811115612cc357612cc3613964565b6040519080825280601f01601f191660200182016040528015612ced576020820181803683370190505b5090505b8415610e8357612d0260018361400b565b9150612d0f600a86613ff7565b612d1a906030613fce565b60f81b818381518110612d2f57612d2f613e32565b60200101906001600160f81b031916908160001a905350612d51600a866140a5565b9450612cf1565b6060612d638261273a565b60008281526006602052604081208054612d7c90613e7d565b80601f0160208091040260200160405190810160405280929190818152602001828054612da890613e7d565b8015612df55780601f10612dca57610100808354040283529160200191612df5565b820191906000526020600020905b815481529060010190602001808311612dd857829003601f168201915b505050505090506000612e1360408051602081019091526000815290565b90508051600003612e25575092915050565b815115612e57578082604051602001612e3f9291906143d6565b60405160208183030381529060405292505050919050565b610e838461326b565b6000808251604103612e965760208301516040840151606085015160001a612e8a878285856132df565b94509450505050612e9e565b506000905060025b9250929050565b6000816004811115612eb957612eb9614405565b03612ec15750565b6001816004811115612ed557612ed5614405565b03612f225760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b91565b6002816004811115612f3657612f36614405565b03612f835760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b91565b6003816004811115612f9757612f97614405565b036119835760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b91565b611983816133a3565b6112cc8282604051806020016040528060008152506133c4565b6000828152600260205260409020546001600160a01b031661308d5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610b91565b6000828152600660205260409020610c328282614182565b600181111561234e576001600160a01b038416156130eb576001600160a01b038416600090815260036020526040812080548392906130e590849061400b565b90915550505b6001600160a01b0383161561234e576001600160a01b03831660009081526003602052604081208054839290613122908490613fce565b909155505050505050565b613136816133f7565b6000818152600660205260409020805461314f90613e7d565b1590506119835760008181526006602052604081206119839161379d565b60006001600160a01b0384163b1561326357604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906131b190339089908890889060040161441b565b6020604051808303816000875af19250505080156131ec575060408051601f3d908101601f191682019092526131e991810190614458565b60015b613249573d80801561321a576040519150601f19603f3d011682016040523d82523d6000602084013e61321f565b606091505b5080516000036132415760405162461bcd60e51b8152600401610b9190614384565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610e83565b506001610e83565b60606132768261273a565b600061328d60408051602081019091526000815290565b905060008151116132ad57604051806020016040528060008152506132d8565b806132b78461349a565b6040516020016132c89291906143d6565b6040516020818303038152906040525b9392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613316575060009050600361339a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561336a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166133935760006001925092505061339a565b9150600090505b94509492505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6133ce838361352c565b6133db600084848461316d565b610c325760405162461bcd60e51b8152600401610b9190614384565b600061340282611a94565b90506134128160008460016130a5565b61341b82611a94565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b606060006134a7836136c5565b60010190506000816001600160401b038111156134c6576134c6613964565b6040519080825280601f01601f1916602001820160405280156134f0576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846134fa57509392505050565b6001600160a01b0382166135825760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b91565b6000818152600260205260409020546001600160a01b0316156135e75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b91565b6135f56000838360016130a5565b6000818152600260205260409020546001600160a01b03161561365a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b91565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106137045772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613730576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061374e57662386f26fc10000830492506010015b6305f5e1008310613766576305f5e100830492506008015b612710831061377a57612710830492506004015b6064831061378c576064830492506002015b600a83106107ef5760010192915050565b5080546137a990613e7d565b6000825580601f106137b9575050565b601f01602090049060005260206000209081019061198391905b808211156137e757600081556001016137d3565b5090565b6001600160e01b03198116811461198357600080fd5b60006020828403121561381357600080fd5b81356132d8816137eb565b6001600160a01b038116811461198357600080fd5b60006020828403121561384557600080fd5b81356132d88161381e565b600081518084526020808501945080840160005b8381101561388357815160ff1687529582019590820190600101613864565b509495945050505050565b6040815260006138a16040830185613850565b82810360208401526138b38185613850565b95945050505050565b60005b838110156138d75781810151838201526020016138bf565b50506000910152565b600081518084526138f88160208601602086016138bc565b601f01601f19169290920160200192915050565b6020815260006132d860208301846138e0565b60006020828403121561393157600080fd5b5035919050565b6000806040838503121561394b57600080fd5b82356139568161381e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156139a2576139a2613964565b604052919050565b803560ff811681146139bb57600080fd5b919050565b60008083601f8401126139d257600080fd5b5081356001600160401b038111156139e957600080fd5b602083019150836020828501011115612e9e57600080fd5b60008060008060608587031215613a1757600080fd5b843593506020808601356001600160401b0380821115613a3657600080fd5b818801915088601f830112613a4a57600080fd5b813581811115613a5c57613a5c613964565b8060051b613a6b85820161397a565b918252838101850191858101908c841115613a8557600080fd5b948601945b83861015613aaa57613a9b866139aa565b82529486019490860190613a8a565b98505050506040880135925080831115613ac357600080fd5b5050613ad1878288016139c0565b95989497509550505050565b60008083601f840112613aef57600080fd5b5081356001600160401b03811115613b0657600080fd5b6020830191508360208260051b8501011115612e9e57600080fd5b60008060208385031215613b3457600080fd5b82356001600160401b03811115613b4a57600080fd5b613b5685828601613add565b90969095509350505050565b600080600060608486031215613b7757600080fd5b8335613b828161381e565b92506020840135613b928161381e565b929592945050506040919091013590565b60008060408385031215613bb657600080fd5b8235613bc18161381e565b9150613bcf602084016139aa565b90509250929050565b600060208284031215613bea57600080fd5b6132d8826139aa565b60006001600160401b03831115613c0c57613c0c613964565b613c1f601f8401601f191660200161397a565b9050828152838383011115613c3357600080fd5b828260208301376000602084830101529392505050565b600082601f830112613c5b57600080fd5b6132d883833560208501613bf3565b60008060408385031215613c7d57600080fd5b82356001600160401b0380821115613c9457600080fd5b613ca086838701613c4a565b93506020850135915080821115613cb657600080fd5b50613cc385828601613c4a565b9150509250929050565b600080600060408486031215613ce257600080fd5b8335613ced8161381e565b925060208401356001600160401b03811115613d0857600080fd5b613d1486828701613add565b9497909650939450505050565b801515811461198357600080fd5b60008060408385031215613d4257600080fd5b8235613d4d8161381e565b91506020830135613d5d81613d21565b809150509250929050565b60008060008060808587031215613d7e57600080fd5b8435613d898161381e565b93506020850135613d998161381e565b92506040850135915060608501356001600160401b03811115613dbb57600080fd5b8501601f81018713613dcc57600080fd5b613ddb87823560208401613bf3565b91505092959194509250565b600060208284031215613df957600080fd5b81356132d881613d21565b60008060408385031215613e1757600080fd5b8235613e228161381e565b91506020830135613d5d8161381e565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff8103613e7457613e74613e48565b60010192915050565b600181811c90821680613e9157607f821691505b602082108103613eb157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f4f6e6c79206f776e6572732063616e2063616c6c20746869732066756e63746960408201526237b71760e91b606082015260800190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6bffffffffffffffffffffffff198460601b1681528260148201526000603482018351602080860160005b83811015613f6d57815160ff1685529382019390820190600101613f4e565b50507f30786631644437313839356534396231353633363933393639646535303839388352693139376344463334383160b01b9083015250602a0195945050505050565b600060ff821680613fc457613fc4613e48565b6000190192915050565b808201808211156107ef576107ef613e48565b634e487b7160e01b600052601260045260246000fd5b60008261400657614006613fe1565b500690565b818103818111156107ef576107ef613e48565b60006020828403121561403057600080fd5b81516132d881613d21565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60006020828403121561409a57600080fd5b81516132d88161381e565b6000826140b4576140b4613fe1565b500490565b6000600182016140cb576140cb613e48565b5060010190565b6001600160a01b03841681526060602082018190526000906140f690830185613850565b9050826040830152949350505050565b6020808252601490820152734e6f207469656e6573206573746120636172746160601b604082015260600190565b601f821115610c3257600081815260208120601f850160051c8101602086101561415b5750805b601f850160051c820191505b8181101561417a57828155600101614167565b505050505050565b81516001600160401b0381111561419b5761419b613964565b6141af816141a98454613e7d565b84614134565b602080601f8311600181146141e457600084156141cc5750858301515b600019600386901b1c1916600185901b17855561417a565b600085815260208120601f198616915b82811015614213578886015182559484019460019091019084016141f4565b50858210156142315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60408152600061425460408301856138e0565b82810360208401526138b381856138e0565b600080865461427481613e7d565b6001828116801561428c57600181146142a1576142d0565b60ff19841687528215158302870194506142d0565b8a60005260208060002060005b858110156142c75781548a8201529084019082016142ae565b50505082870194505b5050505085516142e4818360208a016138bc565b85519101906142f78183602089016138bc565b845191019061430a8183602088016138bc565b019695505050505050565b60408152600061432860408301856138e0565b905060018060a01b03831660208301529392505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600083516143e88184602088016138bc565b8351908301906143fc8183602088016138bc565b01949350505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061444e908301846138e0565b9695505050505050565b60006020828403121561446a57600080fd5b81516132d8816137eb56fea2646970667358221220510ab41f01bfdbc3d83a04deaeff06c2d6111d39619a96453f03e78c82c969f564736f6c63430008120033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/src/context/abis/GammaPacks.v2.sol/NofGammaPacksV2.json b/src/context/abis/GammaPacks.v2.sol/NofGammaPacksV2.json index 17164959..08e7109e 100644 --- a/src/context/abis/GammaPacks.v2.sol/NofGammaPacksV2.json +++ b/src/context/abis/GammaPacks.v2.sol/NofGammaPacksV2.json @@ -459,8 +459,8 @@ "type": "function" } ], - "bytecode": "0x60a06040526710a741a4627800006003556000196080523480156200002357600080fd5b50604051620017b7380380620017b783398101604081905262000046916200010a565b62000051336200009d565b600280546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055336000908152600860205260409020805460ff1916600117905562000142565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200010557600080fd5b919050565b600080604083850312156200011e57600080fd5b6200012983620000ed565b91506200013960208401620000ed565b90509250929050565b60805161165c6200015b6000396000505061165c6000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c80638da5cb5b116100b8578063c37b9bcd1161007c578063c37b9bcd146102c5578063d3e6a7ad146102cd578063d611713e146102f6578063e0f7830714610309578063e606df871461031c578063f2fde38b1461032f57600080fd5b80638da5cb5b146102525780638fd5baf714610263578063a2b40d1914610276578063b84c139214610289578063bd713380146102b257600080fd5b8063627b253f1161010a578063627b253f146101de5780636374cb8b146101f15780636adbaf75146102045780637065cb4814610224578063715018a61461023757806380f2540b1461023f57600080fd5b806279ee2114610146578063022914a714610176578063173825d9146101a957806318160ddd146101be578063335c8b63146101d5575b600080fd5b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610199610184366004611315565b60086020526000908152604090205460ff1681565b604051901515815260200161016d565b6101bc6101b7366004611315565b610342565b005b6101c761c35081565b60405190815260200161016d565b6101c760035481565b600454610159906001600160a01b031681565b6101bc6101ff366004611315565b610428565b610217610212366004611337565b6104ac565b60405161016d919061138b565b6101bc610232366004611315565b61080d565b6101bc610886565b6101bc61024d36600461139e565b61089a565b6000546001600160a01b0316610159565b610217610271366004611315565b61091d565b6101bc610284366004611337565b610989565b610159610297366004611337565b6006602052600090815260409020546001600160a01b031681565b6101c76102c03660046113ca565b610a4c565b6101c7610a7d565b6101596102db366004611337565b6000908152600660205260409020546001600160a01b031690565b6101bc6103043660046113ca565b610e24565b6101bc610317366004611315565b610f73565b600254610159906001600160a01b031681565b6101bc61033d366004611315565b610fea565b3360009081526008602052604090205460ff1661037a5760405162461bcd60e51b8152600401610371906113f4565b60405180910390fd5b6001600160a01b0381166103a05760405162461bcd60e51b815260040161037190611437565b336001600160a01b038216036104075760405162461bcd60e51b815260206004820152602660248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152651037bbb732b960d11b6064820152608401610371565b6001600160a01b03166000908152600860205260409020805460ff19169055565b3360009081526008602052604090205460ff166104575760405162461bcd60e51b8152600401610371906113f4565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f03fb71c656441080e12a35ef543bf2141601e59906bf22cf1952f28da56f45e1906020015b60405180910390a150565b6001546060906001600160a01b03166105075760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261746f20646520636172746173206e6f207365746561646f0000006044820152606401610371565b60008260066003546105199190611476565b6003546105269190611498565b61053091906114b1565b905060008367ffffffffffffffff81111561054d5761054d6114c8565b604051908082528060200260200182016040528015610576578160200160208202803683370190505b50905060005b8481101561065a57600061058f60055490565b905061c35081106105db5760405162461bcd60e51b81526020600482015260166024820152755365206163616261726f6e206c6f7320736f6272657360501b6044820152606401610371565b6105e9600580546001019055565b600081815260066020908152604080832080546001600160a01b03191633908117909155835260078252822080546001810182559083529120018190558251819084908490811061063c5761063c6114de565b60209081029190910101525080610652816114f4565b91505061057c565b506001546040516322e949bf60e21b8152600481018490526001600160a01b0390911690638ba526fc90602401600060405180830381600087803b1580156106a157600080fd5b505af11580156106b5573d6000803e3d6000fd5b50506002546001546040516323b872dd60e01b81526001600160a01b0392831694506323b872dd93506106f09233921690879060040161150d565b6020604051808303816000875af115801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611531565b506002546004546003546001600160a01b03928316926323b872dd9233929116908690610761908a906114b1565b61076b9190611498565b6040518463ffffffff1660e01b81526004016107899392919061150d565b6020604051808303816000875af11580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190611531565b507fccced7f637f56c0164dc795f58e00b6eab6aed650e35721023dc6dd2b8f6746d33826040516107fe929190611553565b60405180910390a19392505050565b3360009081526008602052604090205460ff1661083c5760405162461bcd60e51b8152600401610371906113f4565b6001600160a01b0381166108625760405162461bcd60e51b815260040161037190611437565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b61088e611063565b61089860006110bd565b565b6001546001600160a01b031633146108f45760405162461bcd60e51b815260206004820152601860248201527f4e6f20657320636f6e747261746f2064652063617274617300000000000000006044820152606401610371565b6108fe828261110d565b50600090815260066020526040902080546001600160a01b0319169055565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561097d57602002820191906000526020600020905b815481526020019060010190808311610969575b50505050509050919050565b3360009081526008602052604090205460ff166109b85760405162461bcd60e51b8152600401610371906113f4565b60038190556001546040516370c41e3760e11b8152600481018390526001600160a01b039091169063e1883c6e90602401600060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050507f270b316b51ab2cf3a3bb8ca4d22e76a327d05e762fcaa8bd6afaf8cfde9270b7816040516104a191815260200190565b60076020528160005260406000208181548110610a6857600080fd5b90600052602060002001600091509150505481565b6001546000906001600160a01b0316610ad85760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261746f20646520636172746173206e6f207365746561646f0000006044820152606401610371565b6000610ae360055490565b9050610b12604051806040016040528060078152602001666275795061636b60c81b815250338361c35061124c565b61c3508110610b5c5760405162461bcd60e51b81526020600482015260166024820152755365206163616261726f6e206c6f7320736f6272657360501b6044820152606401610371565b610b6a600580546001019055565b600081815260066020818152604080842080546001600160a01b031916339081179091558452600782528320805460018101825590845290832001839055600354610bb59190611476565b600354610bc29190611498565b6001546040516322e949bf60e21b8152600481018390529192506001600160a01b031690638ba526fc90602401600060405180830381600087803b158015610c0957600080fd5b505af1158015610c1d573d6000803e3d6000fd5b50505050610c5f6040518060400160405280601981526020017f6275795061636b206265666f7265207472616e73666572203100000000000000815250611295565b6002546001546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92610c9892339290911690869060040161150d565b6020604051808303816000875af1158015610cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdb9190611531565b50610d1a6040518060400160405280601981526020017f6275795061636b206265666f7265207472616e73666572203200000000000000815250611295565b6002546004546003546001600160a01b03928316926323b872dd923392911690610d45908690611498565b6040518463ffffffff1660e01b8152600401610d639392919061150d565b6020604051808303816000875af1158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da69190611531565b50610de56040518060400160405280601981526020017f6275795061636b206265666f726520656d6974206576656e7400000000000000815250611295565b60408051338152602081018490527f4bec02a302b11f990fe586d595753fd0163e88c0f3fff0cdcc10e831ac620e9a910160405180910390a150919050565b6000818152600660205260409020546001600160a01b03163314610e8a5760405162461bcd60e51b815260206004820152601760248201527f457374652070617175657465206e6f206573207475796f0000000000000000006044820152606401610371565b6001600160a01b038216610ed65760405162461bcd60e51b81526020600482015260136024820152725175656d6172206e6f207065726d697469646f60681b6044820152606401610371565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416179055610f07813361110d565b6001600160a01b038216600090815260076020908152604080832080546001810182559084529190922001829055517fddb6f61cc68e099150dacab8be873f19cc91f6ceb7d8237794124ede38722aaf90610f679033908590859061150d565b60405180910390a15050565b3360009081526008602052604090205460ff16610fa25760405162461bcd60e51b8152600401610371906113f4565b6001600160a01b038116610fc85760405162461bcd60e51b815260040161037190611437565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610ff2611063565b6001600160a01b0381166110575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610371565b611060816110bd565b50565b6000546001600160a01b031633146108985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610371565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260076020526040812054905b81811015611246576001600160a01b038316600090815260076020526040902080548591908390811061115d5761115d6114de565b906000526020600020015403611234576001600160a01b0383166000908152600760205260409020805461119390600190611498565b815481106111a3576111a36114de565b906000526020600020015460076000856001600160a01b03166001600160a01b0316815260200190815260200160002082815481106111e4576111e46114de565b60009182526020808320909101929092556001600160a01b03851681526007909152604090208054806112195761121961157f565b60019003818190600052602060002001600090559055611246565b8061123e816114f4565b915050611128565b50505050565b6112468484848460405160240161126694939291906115db565b60408051601f198184030181529190526020810180516001600160e01b0316637c7a8d8f60e11b1790526112d4565b611060816040516024016112a99190611613565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790525b6110608160006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b80356001600160a01b038116811461131057600080fd5b919050565b60006020828403121561132757600080fd5b611330826112f9565b9392505050565b60006020828403121561134957600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561138057815187529582019590820190600101611364565b509495945050505050565b6020815260006113306020830184611350565b600080604083850312156113b157600080fd5b823591506113c1602084016112f9565b90509250929050565b600080604083850312156113dd57600080fd5b6113e6836112f9565b946020939093013593505050565b60208082526023908201527f4f6e6c79206f776e6572732063616e2063616c6c20746869732066756e63746960408201526237b71760e91b606082015260800190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261149357634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156114ab576114ab611460565b92915050565b80820281158282048414176114ab576114ab611460565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006001820161150657611506611460565b5060010190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006020828403121561154357600080fd5b8151801515811461133057600080fd5b6001600160a01b038316815260406020820181905260009061157790830184611350565b949350505050565b634e487b7160e01b600052603160045260246000fd5b6000815180845260005b818110156115bb5760208185018101518683018201520161159f565b506000602082860101526020601f19601f83011685010191505092915050565b6080815260006115ee6080830187611595565b6001600160a01b03959095166020830152506040810192909252606090910152919050565b602081526000611330602083018461159556fea2646970667358221220b89ebcc8cd9935a32a5815778b866599052c00691abf5592f2a6d989f50a8b0664736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101415760003560e01c80638da5cb5b116100b8578063c37b9bcd1161007c578063c37b9bcd146102c5578063d3e6a7ad146102cd578063d611713e146102f6578063e0f7830714610309578063e606df871461031c578063f2fde38b1461032f57600080fd5b80638da5cb5b146102525780638fd5baf714610263578063a2b40d1914610276578063b84c139214610289578063bd713380146102b257600080fd5b8063627b253f1161010a578063627b253f146101de5780636374cb8b146101f15780636adbaf75146102045780637065cb4814610224578063715018a61461023757806380f2540b1461023f57600080fd5b806279ee2114610146578063022914a714610176578063173825d9146101a957806318160ddd146101be578063335c8b63146101d5575b600080fd5b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610199610184366004611315565b60086020526000908152604090205460ff1681565b604051901515815260200161016d565b6101bc6101b7366004611315565b610342565b005b6101c761c35081565b60405190815260200161016d565b6101c760035481565b600454610159906001600160a01b031681565b6101bc6101ff366004611315565b610428565b610217610212366004611337565b6104ac565b60405161016d919061138b565b6101bc610232366004611315565b61080d565b6101bc610886565b6101bc61024d36600461139e565b61089a565b6000546001600160a01b0316610159565b610217610271366004611315565b61091d565b6101bc610284366004611337565b610989565b610159610297366004611337565b6006602052600090815260409020546001600160a01b031681565b6101c76102c03660046113ca565b610a4c565b6101c7610a7d565b6101596102db366004611337565b6000908152600660205260409020546001600160a01b031690565b6101bc6103043660046113ca565b610e24565b6101bc610317366004611315565b610f73565b600254610159906001600160a01b031681565b6101bc61033d366004611315565b610fea565b3360009081526008602052604090205460ff1661037a5760405162461bcd60e51b8152600401610371906113f4565b60405180910390fd5b6001600160a01b0381166103a05760405162461bcd60e51b815260040161037190611437565b336001600160a01b038216036104075760405162461bcd60e51b815260206004820152602660248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152651037bbb732b960d11b6064820152608401610371565b6001600160a01b03166000908152600860205260409020805460ff19169055565b3360009081526008602052604090205460ff166104575760405162461bcd60e51b8152600401610371906113f4565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f03fb71c656441080e12a35ef543bf2141601e59906bf22cf1952f28da56f45e1906020015b60405180910390a150565b6001546060906001600160a01b03166105075760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261746f20646520636172746173206e6f207365746561646f0000006044820152606401610371565b60008260066003546105199190611476565b6003546105269190611498565b61053091906114b1565b905060008367ffffffffffffffff81111561054d5761054d6114c8565b604051908082528060200260200182016040528015610576578160200160208202803683370190505b50905060005b8481101561065a57600061058f60055490565b905061c35081106105db5760405162461bcd60e51b81526020600482015260166024820152755365206163616261726f6e206c6f7320736f6272657360501b6044820152606401610371565b6105e9600580546001019055565b600081815260066020908152604080832080546001600160a01b03191633908117909155835260078252822080546001810182559083529120018190558251819084908490811061063c5761063c6114de565b60209081029190910101525080610652816114f4565b91505061057c565b506001546040516322e949bf60e21b8152600481018490526001600160a01b0390911690638ba526fc90602401600060405180830381600087803b1580156106a157600080fd5b505af11580156106b5573d6000803e3d6000fd5b50506002546001546040516323b872dd60e01b81526001600160a01b0392831694506323b872dd93506106f09233921690879060040161150d565b6020604051808303816000875af115801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611531565b506002546004546003546001600160a01b03928316926323b872dd9233929116908690610761908a906114b1565b61076b9190611498565b6040518463ffffffff1660e01b81526004016107899392919061150d565b6020604051808303816000875af11580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190611531565b507fccced7f637f56c0164dc795f58e00b6eab6aed650e35721023dc6dd2b8f6746d33826040516107fe929190611553565b60405180910390a19392505050565b3360009081526008602052604090205460ff1661083c5760405162461bcd60e51b8152600401610371906113f4565b6001600160a01b0381166108625760405162461bcd60e51b815260040161037190611437565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b61088e611063565b61089860006110bd565b565b6001546001600160a01b031633146108f45760405162461bcd60e51b815260206004820152601860248201527f4e6f20657320636f6e747261746f2064652063617274617300000000000000006044820152606401610371565b6108fe828261110d565b50600090815260066020526040902080546001600160a01b0319169055565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561097d57602002820191906000526020600020905b815481526020019060010190808311610969575b50505050509050919050565b3360009081526008602052604090205460ff166109b85760405162461bcd60e51b8152600401610371906113f4565b60038190556001546040516370c41e3760e11b8152600481018390526001600160a01b039091169063e1883c6e90602401600060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050507f270b316b51ab2cf3a3bb8ca4d22e76a327d05e762fcaa8bd6afaf8cfde9270b7816040516104a191815260200190565b60076020528160005260406000208181548110610a6857600080fd5b90600052602060002001600091509150505481565b6001546000906001600160a01b0316610ad85760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261746f20646520636172746173206e6f207365746561646f0000006044820152606401610371565b6000610ae360055490565b9050610b12604051806040016040528060078152602001666275795061636b60c81b815250338361c35061124c565b61c3508110610b5c5760405162461bcd60e51b81526020600482015260166024820152755365206163616261726f6e206c6f7320736f6272657360501b6044820152606401610371565b610b6a600580546001019055565b600081815260066020818152604080842080546001600160a01b031916339081179091558452600782528320805460018101825590845290832001839055600354610bb59190611476565b600354610bc29190611498565b6001546040516322e949bf60e21b8152600481018390529192506001600160a01b031690638ba526fc90602401600060405180830381600087803b158015610c0957600080fd5b505af1158015610c1d573d6000803e3d6000fd5b50505050610c5f6040518060400160405280601981526020017f6275795061636b206265666f7265207472616e73666572203100000000000000815250611295565b6002546001546040516323b872dd60e01b81526001600160a01b03928316926323b872dd92610c9892339290911690869060040161150d565b6020604051808303816000875af1158015610cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdb9190611531565b50610d1a6040518060400160405280601981526020017f6275795061636b206265666f7265207472616e73666572203200000000000000815250611295565b6002546004546003546001600160a01b03928316926323b872dd923392911690610d45908690611498565b6040518463ffffffff1660e01b8152600401610d639392919061150d565b6020604051808303816000875af1158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da69190611531565b50610de56040518060400160405280601981526020017f6275795061636b206265666f726520656d6974206576656e7400000000000000815250611295565b60408051338152602081018490527f4bec02a302b11f990fe586d595753fd0163e88c0f3fff0cdcc10e831ac620e9a910160405180910390a150919050565b6000818152600660205260409020546001600160a01b03163314610e8a5760405162461bcd60e51b815260206004820152601760248201527f457374652070617175657465206e6f206573207475796f0000000000000000006044820152606401610371565b6001600160a01b038216610ed65760405162461bcd60e51b81526020600482015260136024820152725175656d6172206e6f207065726d697469646f60681b6044820152606401610371565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416179055610f07813361110d565b6001600160a01b038216600090815260076020908152604080832080546001810182559084529190922001829055517fddb6f61cc68e099150dacab8be873f19cc91f6ceb7d8237794124ede38722aaf90610f679033908590859061150d565b60405180910390a15050565b3360009081526008602052604090205460ff16610fa25760405162461bcd60e51b8152600401610371906113f4565b6001600160a01b038116610fc85760405162461bcd60e51b815260040161037190611437565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610ff2611063565b6001600160a01b0381166110575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610371565b611060816110bd565b50565b6000546001600160a01b031633146108985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610371565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260076020526040812054905b81811015611246576001600160a01b038316600090815260076020526040902080548591908390811061115d5761115d6114de565b906000526020600020015403611234576001600160a01b0383166000908152600760205260409020805461119390600190611498565b815481106111a3576111a36114de565b906000526020600020015460076000856001600160a01b03166001600160a01b0316815260200190815260200160002082815481106111e4576111e46114de565b60009182526020808320909101929092556001600160a01b03851681526007909152604090208054806112195761121961157f565b60019003818190600052602060002001600090559055611246565b8061123e816114f4565b915050611128565b50505050565b6112468484848460405160240161126694939291906115db565b60408051601f198184030181529190526020810180516001600160e01b0316637c7a8d8f60e11b1790526112d4565b611060816040516024016112a99190611613565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790525b6110608160006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b80356001600160a01b038116811461131057600080fd5b919050565b60006020828403121561132757600080fd5b611330826112f9565b9392505050565b60006020828403121561134957600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561138057815187529582019590820190600101611364565b509495945050505050565b6020815260006113306020830184611350565b600080604083850312156113b157600080fd5b823591506113c1602084016112f9565b90509250929050565b600080604083850312156113dd57600080fd5b6113e6836112f9565b946020939093013593505050565b60208082526023908201527f4f6e6c79206f776e6572732063616e2063616c6c20746869732066756e63746960408201526237b71760e91b606082015260800190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261149357634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156114ab576114ab611460565b92915050565b80820281158282048414176114ab576114ab611460565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006001820161150657611506611460565b5060010190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006020828403121561154357600080fd5b8151801515811461133057600080fd5b6001600160a01b038316815260406020820181905260009061157790830184611350565b949350505050565b634e487b7160e01b600052603160045260246000fd5b6000815180845260005b818110156115bb5760208185018101518683018201520161159f565b506000602082860101526020601f19601f83011685010191505092915050565b6080815260006115ee6080830187611595565b6001600160a01b03959095166020830152506040810192909252606090910152919050565b602081526000611330602083018461159556fea2646970667358221220b89ebcc8cd9935a32a5815778b866599052c00691abf5592f2a6d989f50a8b0664736f6c63430008120033", + "bytecode": "0x60a06040526710a741a4627800006003556000196080523480156200002357600080fd5b50604051620016943803806200169483398101604081905262000046916200010a565b62000051336200009d565b600280546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055336000908152600860205260409020805460ff1916600117905562000142565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200010557600080fd5b919050565b600080604083850312156200011e57600080fd5b6200012983620000ed565b91506200013960208401620000ed565b90509250929050565b6080516115396200015b600039600050506115396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c80638da5cb5b116100b8578063c37b9bcd1161007c578063c37b9bcd146102c5578063d3e6a7ad146102cd578063d611713e146102f6578063e0f7830714610309578063e606df871461031c578063f2fde38b1461032f57600080fd5b80638da5cb5b146102525780638fd5baf714610263578063a2b40d1914610276578063b84c139214610289578063bd713380146102b257600080fd5b8063627b253f1161010a578063627b253f146101de5780636374cb8b146101f15780636adbaf75146102045780637065cb4814610224578063715018a61461023757806380f2540b1461023f57600080fd5b806279ee2114610146578063022914a714610176578063173825d9146101a957806318160ddd146101be578063335c8b63146101d5575b600080fd5b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610199610184366004611215565b60086020526000908152604090205460ff1681565b604051901515815260200161016d565b6101bc6101b7366004611215565b610342565b005b6101c761c35081565b60405190815260200161016d565b6101c760035481565b600454610159906001600160a01b031681565b6101bc6101ff366004611215565b610428565b610217610212366004611237565b6104ac565b60405161016d919061128b565b6101bc610232366004611215565b61080d565b6101bc610886565b6101bc61024d36600461129e565b61089a565b6000546001600160a01b0316610159565b610217610271366004611215565b61091d565b6101bc610284366004611237565b610989565b610159610297366004611237565b6006602052600090815260409020546001600160a01b031681565b6101c76102c03660046112ca565b610a4c565b6101c7610a7d565b6101596102db366004611237565b6000908152600660205260409020546001600160a01b031690565b6101bc6103043660046112ca565b610d68565b6101bc610317366004611215565b610eb7565b600254610159906001600160a01b031681565b6101bc61033d366004611215565b610f2e565b3360009081526008602052604090205460ff1661037a5760405162461bcd60e51b8152600401610371906112f4565b60405180910390fd5b6001600160a01b0381166103a05760405162461bcd60e51b815260040161037190611337565b336001600160a01b038216036104075760405162461bcd60e51b815260206004820152602660248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152651037bbb732b960d11b6064820152608401610371565b6001600160a01b03166000908152600860205260409020805460ff19169055565b3360009081526008602052604090205460ff166104575760405162461bcd60e51b8152600401610371906112f4565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f03fb71c656441080e12a35ef543bf2141601e59906bf22cf1952f28da56f45e1906020015b60405180910390a150565b6001546060906001600160a01b03166105075760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261746f20646520636172746173206e6f207365746561646f0000006044820152606401610371565b60008260066003546105199190611376565b6003546105269190611398565b61053091906113b1565b905060008367ffffffffffffffff81111561054d5761054d6113c8565b604051908082528060200260200182016040528015610576578160200160208202803683370190505b50905060005b8481101561065a57600061058f60055490565b905061c35081106105db5760405162461bcd60e51b81526020600482015260166024820152755365206163616261726f6e206c6f7320736f6272657360501b6044820152606401610371565b6105e9600580546001019055565b600081815260066020908152604080832080546001600160a01b03191633908117909155835260078252822080546001810182559083529120018190558251819084908490811061063c5761063c6113de565b60209081029190910101525080610652816113f4565b91505061057c565b506001546040516322e949bf60e21b8152600481018490526001600160a01b0390911690638ba526fc90602401600060405180830381600087803b1580156106a157600080fd5b505af11580156106b5573d6000803e3d6000fd5b50506002546001546040516323b872dd60e01b81526001600160a01b0392831694506323b872dd93506106f09233921690879060040161140d565b6020604051808303816000875af115801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611431565b506002546004546003546001600160a01b03928316926323b872dd9233929116908690610761908a906113b1565b61076b9190611398565b6040518463ffffffff1660e01b81526004016107899392919061140d565b6020604051808303816000875af11580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190611431565b507fccced7f637f56c0164dc795f58e00b6eab6aed650e35721023dc6dd2b8f6746d33826040516107fe929190611453565b60405180910390a19392505050565b3360009081526008602052604090205460ff1661083c5760405162461bcd60e51b8152600401610371906112f4565b6001600160a01b0381166108625760405162461bcd60e51b815260040161037190611337565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b61088e610fa7565b6108986000611001565b565b6001546001600160a01b031633146108f45760405162461bcd60e51b815260206004820152601860248201527f4e6f20657320636f6e747261746f2064652063617274617300000000000000006044820152606401610371565b6108fe8282611051565b50600090815260066020526040902080546001600160a01b0319169055565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561097d57602002820191906000526020600020905b815481526020019060010190808311610969575b50505050509050919050565b3360009081526008602052604090205460ff166109b85760405162461bcd60e51b8152600401610371906112f4565b60038190556001546040516370c41e3760e11b8152600481018390526001600160a01b039091169063e1883c6e90602401600060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050507f270b316b51ab2cf3a3bb8ca4d22e76a327d05e762fcaa8bd6afaf8cfde9270b7816040516104a191815260200190565b60076020528160005260406000208181548110610a6857600080fd5b90600052602060002001600091509150505481565b6001546000906001600160a01b0316610ad85760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261746f20646520636172746173206e6f207365746561646f0000006044820152606401610371565b6000610ae360055490565b9050610b12604051806040016040528060078152602001666275795061636b60c81b815250338361c350611190565b61c3508110610b5c5760405162461bcd60e51b81526020600482015260166024820152755365206163616261726f6e206c6f7320736f6272657360501b6044820152606401610371565b610b6a600580546001019055565b600081815260066020818152604080842080546001600160a01b031916339081179091558452600782528320805460018101825590845290832001839055600354610bb59190611376565b600354610bc29190611398565b6001546040516322e949bf60e21b8152600481018390529192506001600160a01b031690638ba526fc90602401600060405180830381600087803b158015610c0957600080fd5b505af1158015610c1d573d6000803e3d6000fd5b50506002546001546040516323b872dd60e01b81526001600160a01b0392831694506323b872dd9350610c589233921690869060040161140d565b6020604051808303816000875af1158015610c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9b9190611431565b506002546004546003546001600160a01b03928316926323b872dd923392911690610cc7908690611398565b6040518463ffffffff1660e01b8152600401610ce59392919061140d565b6020604051808303816000875af1158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d289190611431565b5060408051338152602081018490527f4bec02a302b11f990fe586d595753fd0163e88c0f3fff0cdcc10e831ac620e9a910160405180910390a150919050565b6000818152600660205260409020546001600160a01b03163314610dce5760405162461bcd60e51b815260206004820152601760248201527f457374652070617175657465206e6f206573207475796f0000000000000000006044820152606401610371565b6001600160a01b038216610e1a5760405162461bcd60e51b81526020600482015260136024820152725175656d6172206e6f207065726d697469646f60681b6044820152606401610371565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416179055610e4b8133611051565b6001600160a01b038216600090815260076020908152604080832080546001810182559084529190922001829055517fddb6f61cc68e099150dacab8be873f19cc91f6ceb7d8237794124ede38722aaf90610eab9033908590859061140d565b60405180910390a15050565b3360009081526008602052604090205460ff16610ee65760405162461bcd60e51b8152600401610371906112f4565b6001600160a01b038116610f0c5760405162461bcd60e51b815260040161037190611337565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610f36610fa7565b6001600160a01b038116610f9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610371565b610fa481611001565b50565b6000546001600160a01b031633146108985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610371565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260076020526040812054905b8181101561118a576001600160a01b03831660009081526007602052604090208054859190839081106110a1576110a16113de565b906000526020600020015403611178576001600160a01b038316600090815260076020526040902080546110d790600190611398565b815481106110e7576110e76113de565b906000526020600020015460076000856001600160a01b03166001600160a01b031681526020019081526020016000208281548110611128576111286113de565b60009182526020808320909101929092556001600160a01b038516815260079091526040902080548061115d5761115d61147f565b6001900381819060005260206000200160009055905561118a565b80611182816113f4565b91505061106c565b50505050565b61118a848484846040516024016111aa9493929190611495565b60408051601f198184030181529190526020810180516001600160e01b0316637c7a8d8f60e11b179052610fa48160006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b80356001600160a01b038116811461121057600080fd5b919050565b60006020828403121561122757600080fd5b611230826111f9565b9392505050565b60006020828403121561124957600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561128057815187529582019590820190600101611264565b509495945050505050565b6020815260006112306020830184611250565b600080604083850312156112b157600080fd5b823591506112c1602084016111f9565b90509250929050565b600080604083850312156112dd57600080fd5b6112e6836111f9565b946020939093013593505050565b60208082526023908201527f4f6e6c79206f776e6572732063616e2063616c6c20746869732066756e63746960408201526237b71760e91b606082015260800190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261139357634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156113ab576113ab611360565b92915050565b80820281158282048414176113ab576113ab611360565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006001820161140657611406611360565b5060010190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006020828403121561144357600080fd5b8151801515811461123057600080fd5b6001600160a01b038316815260406020820181905260009061147790830184611250565b949350505050565b634e487b7160e01b600052603160045260246000fd5b608081526000855180608084015260005b818110156114c357602081890181015160a08684010152016114a6565b50600060a08285018101919091526001600160a01b039690961660208401526040830194909452506060810191909152601f909101601f1916010191905056fea2646970667358221220775c30d07caf8a0f281b1d41db9ad29d868db4a6331b4a178fd68697b627057f64736f6c63430008120033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101415760003560e01c80638da5cb5b116100b8578063c37b9bcd1161007c578063c37b9bcd146102c5578063d3e6a7ad146102cd578063d611713e146102f6578063e0f7830714610309578063e606df871461031c578063f2fde38b1461032f57600080fd5b80638da5cb5b146102525780638fd5baf714610263578063a2b40d1914610276578063b84c139214610289578063bd713380146102b257600080fd5b8063627b253f1161010a578063627b253f146101de5780636374cb8b146101f15780636adbaf75146102045780637065cb4814610224578063715018a61461023757806380f2540b1461023f57600080fd5b806279ee2114610146578063022914a714610176578063173825d9146101a957806318160ddd146101be578063335c8b63146101d5575b600080fd5b600154610159906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610199610184366004611215565b60086020526000908152604090205460ff1681565b604051901515815260200161016d565b6101bc6101b7366004611215565b610342565b005b6101c761c35081565b60405190815260200161016d565b6101c760035481565b600454610159906001600160a01b031681565b6101bc6101ff366004611215565b610428565b610217610212366004611237565b6104ac565b60405161016d919061128b565b6101bc610232366004611215565b61080d565b6101bc610886565b6101bc61024d36600461129e565b61089a565b6000546001600160a01b0316610159565b610217610271366004611215565b61091d565b6101bc610284366004611237565b610989565b610159610297366004611237565b6006602052600090815260409020546001600160a01b031681565b6101c76102c03660046112ca565b610a4c565b6101c7610a7d565b6101596102db366004611237565b6000908152600660205260409020546001600160a01b031690565b6101bc6103043660046112ca565b610d68565b6101bc610317366004611215565b610eb7565b600254610159906001600160a01b031681565b6101bc61033d366004611215565b610f2e565b3360009081526008602052604090205460ff1661037a5760405162461bcd60e51b8152600401610371906112f4565b60405180910390fd5b6001600160a01b0381166103a05760405162461bcd60e51b815260040161037190611337565b336001600160a01b038216036104075760405162461bcd60e51b815260206004820152602660248201527f596f752063616e6e6f742072656d6f766520796f757273656c6620617320616e6044820152651037bbb732b960d11b6064820152608401610371565b6001600160a01b03166000908152600860205260409020805460ff19169055565b3360009081526008602052604090205460ff166104575760405162461bcd60e51b8152600401610371906112f4565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f03fb71c656441080e12a35ef543bf2141601e59906bf22cf1952f28da56f45e1906020015b60405180910390a150565b6001546060906001600160a01b03166105075760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261746f20646520636172746173206e6f207365746561646f0000006044820152606401610371565b60008260066003546105199190611376565b6003546105269190611398565b61053091906113b1565b905060008367ffffffffffffffff81111561054d5761054d6113c8565b604051908082528060200260200182016040528015610576578160200160208202803683370190505b50905060005b8481101561065a57600061058f60055490565b905061c35081106105db5760405162461bcd60e51b81526020600482015260166024820152755365206163616261726f6e206c6f7320736f6272657360501b6044820152606401610371565b6105e9600580546001019055565b600081815260066020908152604080832080546001600160a01b03191633908117909155835260078252822080546001810182559083529120018190558251819084908490811061063c5761063c6113de565b60209081029190910101525080610652816113f4565b91505061057c565b506001546040516322e949bf60e21b8152600481018490526001600160a01b0390911690638ba526fc90602401600060405180830381600087803b1580156106a157600080fd5b505af11580156106b5573d6000803e3d6000fd5b50506002546001546040516323b872dd60e01b81526001600160a01b0392831694506323b872dd93506106f09233921690879060040161140d565b6020604051808303816000875af115801561070f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107339190611431565b506002546004546003546001600160a01b03928316926323b872dd9233929116908690610761908a906113b1565b61076b9190611398565b6040518463ffffffff1660e01b81526004016107899392919061140d565b6020604051808303816000875af11580156107a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cc9190611431565b507fccced7f637f56c0164dc795f58e00b6eab6aed650e35721023dc6dd2b8f6746d33826040516107fe929190611453565b60405180910390a19392505050565b3360009081526008602052604090205460ff1661083c5760405162461bcd60e51b8152600401610371906112f4565b6001600160a01b0381166108625760405162461bcd60e51b815260040161037190611337565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b61088e610fa7565b6108986000611001565b565b6001546001600160a01b031633146108f45760405162461bcd60e51b815260206004820152601860248201527f4e6f20657320636f6e747261746f2064652063617274617300000000000000006044820152606401610371565b6108fe8282611051565b50600090815260066020526040902080546001600160a01b0319169055565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561097d57602002820191906000526020600020905b815481526020019060010190808311610969575b50505050509050919050565b3360009081526008602052604090205460ff166109b85760405162461bcd60e51b8152600401610371906112f4565b60038190556001546040516370c41e3760e11b8152600481018390526001600160a01b039091169063e1883c6e90602401600060405180830381600087803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050507f270b316b51ab2cf3a3bb8ca4d22e76a327d05e762fcaa8bd6afaf8cfde9270b7816040516104a191815260200190565b60076020528160005260406000208181548110610a6857600080fd5b90600052602060002001600091509150505481565b6001546000906001600160a01b0316610ad85760405162461bcd60e51b815260206004820152601d60248201527f436f6e747261746f20646520636172746173206e6f207365746561646f0000006044820152606401610371565b6000610ae360055490565b9050610b12604051806040016040528060078152602001666275795061636b60c81b815250338361c350611190565b61c3508110610b5c5760405162461bcd60e51b81526020600482015260166024820152755365206163616261726f6e206c6f7320736f6272657360501b6044820152606401610371565b610b6a600580546001019055565b600081815260066020818152604080842080546001600160a01b031916339081179091558452600782528320805460018101825590845290832001839055600354610bb59190611376565b600354610bc29190611398565b6001546040516322e949bf60e21b8152600481018390529192506001600160a01b031690638ba526fc90602401600060405180830381600087803b158015610c0957600080fd5b505af1158015610c1d573d6000803e3d6000fd5b50506002546001546040516323b872dd60e01b81526001600160a01b0392831694506323b872dd9350610c589233921690869060040161140d565b6020604051808303816000875af1158015610c77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9b9190611431565b506002546004546003546001600160a01b03928316926323b872dd923392911690610cc7908690611398565b6040518463ffffffff1660e01b8152600401610ce59392919061140d565b6020604051808303816000875af1158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d289190611431565b5060408051338152602081018490527f4bec02a302b11f990fe586d595753fd0163e88c0f3fff0cdcc10e831ac620e9a910160405180910390a150919050565b6000818152600660205260409020546001600160a01b03163314610dce5760405162461bcd60e51b815260206004820152601760248201527f457374652070617175657465206e6f206573207475796f0000000000000000006044820152606401610371565b6001600160a01b038216610e1a5760405162461bcd60e51b81526020600482015260136024820152725175656d6172206e6f207065726d697469646f60681b6044820152606401610371565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416179055610e4b8133611051565b6001600160a01b038216600090815260076020908152604080832080546001810182559084529190922001829055517fddb6f61cc68e099150dacab8be873f19cc91f6ceb7d8237794124ede38722aaf90610eab9033908590859061140d565b60405180910390a15050565b3360009081526008602052604090205460ff16610ee65760405162461bcd60e51b8152600401610371906112f4565b6001600160a01b038116610f0c5760405162461bcd60e51b815260040161037190611337565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610f36610fa7565b6001600160a01b038116610f9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610371565b610fa481611001565b50565b6000546001600160a01b031633146108985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610371565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260076020526040812054905b8181101561118a576001600160a01b03831660009081526007602052604090208054859190839081106110a1576110a16113de565b906000526020600020015403611178576001600160a01b038316600090815260076020526040902080546110d790600190611398565b815481106110e7576110e76113de565b906000526020600020015460076000856001600160a01b03166001600160a01b031681526020019081526020016000208281548110611128576111286113de565b60009182526020808320909101929092556001600160a01b038516815260079091526040902080548061115d5761115d61147f565b6001900381819060005260206000200160009055905561118a565b80611182816113f4565b91505061106c565b50505050565b61118a848484846040516024016111aa9493929190611495565b60408051601f198184030181529190526020810180516001600160e01b0316637c7a8d8f60e11b179052610fa48160006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b80356001600160a01b038116811461121057600080fd5b919050565b60006020828403121561122757600080fd5b611230826111f9565b9392505050565b60006020828403121561124957600080fd5b5035919050565b600081518084526020808501945080840160005b8381101561128057815187529582019590820190600101611264565b509495945050505050565b6020815260006112306020830184611250565b600080604083850312156112b157600080fd5b823591506112c1602084016111f9565b90509250929050565b600080604083850312156112dd57600080fd5b6112e6836111f9565b946020939093013593505050565b60208082526023908201527f4f6e6c79206f776e6572732063616e2063616c6c20746869732066756e63746960408201526237b71760e91b606082015260800190565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261139357634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156113ab576113ab611360565b92915050565b80820281158282048414176113ab576113ab611360565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006001820161140657611406611360565b5060010190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006020828403121561144357600080fd5b8151801515811461123057600080fd5b6001600160a01b038316815260406020820181905260009061147790830184611250565b949350505050565b634e487b7160e01b600052603160045260246000fd5b608081526000855180608084015260005b818110156114c357602081890181015160a08684010152016114a6565b50600060a08285018101919091526001600160a01b039690961660208401526040830194909452506060810191909152601f909101601f1916010191905056fea2646970667358221220775c30d07caf8a0f281b1d41db9ad29d868db4a6331b4a178fd68697b627057f64736f6c63430008120033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/src/pages/api/characters.js b/src/pages/api/characters.js index 013304cc..a9569559 100644 --- a/src/pages/api/characters.js +++ b/src/pages/api/characters.js @@ -86,7 +86,7 @@ export default async function handler(req, res) { // Enviar la imagen como respuesta return res.status(200).send(collageBuffer) } catch (error) { - console.log(error) + console.error(error) return res.status(500).json({ error: 'An error occurred while processing your request.' }) } } diff --git a/src/pages/api/missing.js b/src/pages/api/missing.js index a09681d5..38505305 100644 --- a/src/pages/api/missing.js +++ b/src/pages/api/missing.js @@ -89,7 +89,7 @@ export default async function handler(req, res) { // Enviar la imagen como respuesta return res.status(200).send(collageBuffer) } catch (error) { - console.log(error) + console.error(error) return res.status(500).json({ error: 'An error occurred while processing your request.' }) } } diff --git a/src/pages/api/now.js b/src/pages/api/now.js index 26ad2edd..80d806d6 100644 --- a/src/pages/api/now.js +++ b/src/pages/api/now.js @@ -20,7 +20,7 @@ export default async function handler(req, res) { res.setHeader('Content-Type', 'application/json') res.status(200).json(newRandomInt) } catch (error) { - console.log(error) + console.error(error) res.status(500).json({ error: 'An error occurred while processing your request.' }) } } diff --git a/src/pages/api/random.js b/src/pages/api/random.js index fd61969f..78e72cbe 100644 --- a/src/pages/api/random.js +++ b/src/pages/api/random.js @@ -15,7 +15,7 @@ export default async function handler(req, res) { res.setHeader('Content-Type', 'application/json') res.status(200).json(newRandomInt) } catch (error) { - console.log(error) + console.error(error) res.status(500).json({ error: 'An error occurred while processing your request.' }) } } diff --git a/src/pages/api/reset-users.js b/src/pages/api/reset-users.js index 0eaa1e34..81d4cf0e 100644 --- a/src/pages/api/reset-users.js +++ b/src/pages/api/reset-users.js @@ -15,7 +15,7 @@ export default async function handler(req, res) { return res.status(200).json({ message: 'Characters and medals arrays cleared for all users.' }) } catch (error) { - console.log(error) + console.error(error) return res.status(500).json({ error: 'An error occurred while processing your request.' }) } } diff --git a/src/sections/Alpha/AlphaAlbums.jsx b/src/sections/Alpha/AlphaAlbums.jsx index ef94a986..d1c74157 100644 --- a/src/sections/Alpha/AlphaAlbums.jsx +++ b/src/sections/Alpha/AlphaAlbums.jsx @@ -65,7 +65,7 @@ const AlphaAlbums = ({ } } } - console.log('albumsArr', albumsArr) + // console.log('albumsArr', albumsArr) return albumsArr } diff --git a/src/sections/Alpha/AlphaCards.jsx b/src/sections/Alpha/AlphaCards.jsx index 04114196..9cc6f28d 100644 --- a/src/sections/Alpha/AlphaCards.jsx +++ b/src/sections/Alpha/AlphaCards.jsx @@ -203,7 +203,7 @@ const AlphaCards = ({ alphaMidButton }) => { text: message, icon: 'success', showConfirmButton: false, - timer: 1500 + timer: 2000 }) } @@ -393,7 +393,7 @@ const AlphaCards = ({ alphaMidButton }) => { text: t('no_dai'), icon: 'error', showConfirmButton: false, - timer: 1500 + timer: 2000 }) } } diff --git a/src/sections/Gamma/GammaAlbum.jsx b/src/sections/Gamma/GammaAlbum.jsx index 35577af2..66aca796 100644 --- a/src/sections/Gamma/GammaAlbum.jsx +++ b/src/sections/Gamma/GammaAlbum.jsx @@ -10,15 +10,13 @@ const GammaAlbum = React.forwardRef((props, book) => { const { paginationObj, setImageNumber, setCardInfo, showInventory } = props const { size } = useLayoutContext() - console.log(paginationObj) - + const getStyle = (item) => { return (paginationObj.user[item]?.quantity === 0 || !paginationObj.user[item]?.quantity) ? { filter: 'grayscale(1)' } : {} } - const PageContent = ({ page, pageNumber}) => { let divWrapperClassName = 'grid-wrapper' if (pageNumber % 2 === 0) { // par diff --git a/src/sections/Gamma/GammaInfoCard.jsx b/src/sections/Gamma/GammaInfoCard.jsx index 57ac9525..810ca4a8 100644 --- a/src/sections/Gamma/GammaInfoCard.jsx +++ b/src/sections/Gamma/GammaInfoCard.jsx @@ -78,7 +78,7 @@ const GammaInfoCard = React.forwardRef((props, book) => { text: t('confirmado'), icon: 'success', showConfirmButton: false, - timer: 1500 + timer: 2000 }) // Swal.fire({ // text: 'Publicar?', @@ -165,13 +165,13 @@ const GammaInfoCard = React.forwardRef((props, book) => { if (result.isConfirmed) { startLoading() const transaction = await gammaCardsContract.transferCard(result.value, imageNumber) - transaction.wait() + await transaction.wait() Swal.fire({ title: '', text: t('confirmado'), icon: 'success', showConfirmButton: false, - timer: 1500 + timer: 2000 }) stopLoading() handleFinishInfoCard() @@ -195,7 +195,7 @@ const GammaInfoCard = React.forwardRef((props, book) => { try { startLoading() const transaction = await gammaCardsContract.mintCard(imageNumber) - transaction.wait() + await transaction.wait() stopLoading() Swal.fire({ title: '', diff --git a/src/sections/Gamma/index.jsx b/src/sections/Gamma/index.jsx index 51b347ad..914af9a8 100644 --- a/src/sections/Gamma/index.jsx +++ b/src/sections/Gamma/index.jsx @@ -18,7 +18,6 @@ import { CONTRACTS } from '../../config' import { showRules, closeRules } from '../../utils/rules' import { useWeb3Context } from '../../hooks' import { useLayoutContext } from '../../hooks' -import gammaCardsPages from './gammaCardsPages' import { checkInputAddress } from '../../utils/addresses' const index = React.forwardRef(() => { @@ -37,8 +36,7 @@ const index = React.forwardRef(() => { const { mobile, startLoading, stopLoading } = useLayoutContext() const [paginationObj, setPaginationObj] = useState({}) - const [paginationObjKey, setPaginationObjKey] = useState(0); - const [cardsQtty, setCardsQtty] = useState(0) + const [cardsQtty, setCardsQtty] = useState(0) const getCardsQtty = (paginationObj) => { let total = 0 @@ -72,13 +70,20 @@ const index = React.forwardRef(() => { return authorization } + const updateUserData = async () => { + const userCards = await getCardsByUser(gammaCardsContract, walletAddress) + setPaginationObj(userCards) + setCardsQtty(getCardsQtty(userCards)) + } + const fetchInventory = async () => { try { - const userCards = await getCardsByUser(gammaCardsContract, walletAddress, gammaCardsPages) + startLoading() + const userCards = await getCardsByUser(gammaCardsContract, walletAddress) setPaginationObj(userCards) - // actualiza la clave para forzar el renderizado de gammaAlbumInventory - setPaginationObjKey(paginationObjKey => paginationObjKey + 1); + stopLoading() } catch (error) { + stopLoading() console.error(error) } } @@ -96,7 +101,7 @@ const index = React.forwardRef(() => { useEffect(() => { fetchInventory() - }, [walletAddress, gammaCardsContract, gammaCardsPages]) + }, [walletAddress, gammaCardsContract]) useEffect(() => { checkNumberOfPacks() @@ -116,10 +121,8 @@ const index = React.forwardRef(() => { try { startLoading() const result = await finishAlbum(gammaCardsContract, walletAddress) - if (result) { - await fetchInventory() - setCardsQtty(getCardsQtty(paginationObj)) + await updateUserData() Swal.fire({ title: '', text: t('finish_album_success'), @@ -129,7 +132,13 @@ const index = React.forwardRef(() => { }) } else { - emitError(t('finish_album_error')) + Swal.fire({ + title: '', + text: t('finish_album_warning'), + icon: 'warning', + showConfirmButton: false, + timer: 8000 + }) } stopLoading() } catch (ex) { @@ -171,13 +180,14 @@ const index = React.forwardRef(() => { const packs = await checkPacksByUser(walletAddress, gammaPacksContract) const packNumber = ethers.BigNumber.from(packs[0]).toNumber() const transaction = await gammaPacksContract.transferPack(result.value, packNumber) + await transaction.wait() transaction.wait() Swal.fire({ title: '', text: t('confirmado'), icon: 'success', showConfirmButton: false, - timer: 1500 + timer: 2000 }) await checkNumberOfPacks() stopLoading() @@ -201,7 +211,7 @@ const index = React.forwardRef(() => { text: t('no_paquetes_para_abrir'), icon: 'success', showConfirmButton: false, - timer: 1500 + timer: 2000 }) } @@ -217,14 +227,12 @@ const index = React.forwardRef(() => { setOpenPackCardsNumbers(packet_data) const openedPack = await openPack(gammaCardsContract, packNumber, packet_data, signature.signature) - + if (openedPack) { - await openedPack.wait() setOpenPackage(true) setLoaderPack(false) await checkNumberOfPacks() - await fetchInventory() - setCardsQtty(getCardsQtty(paginationObj)) + await updateUserData() return openedPack } } @@ -301,10 +309,9 @@ const index = React.forwardRef(() => { } } - const handleFinishInfoCard = async () => { setCardInfo(false) - await fetchInventory() + await updateUserData() } const NotConnected = () => { @@ -394,20 +401,17 @@ const index = React.forwardRef(() => { {!inventory && /* */} {inventory && !cardInfo && diff --git a/src/services/gamma.js b/src/services/gamma.js index 97c88b3f..1453ad04 100644 --- a/src/services/gamma.js +++ b/src/services/gamma.js @@ -1,5 +1,6 @@ import { ethers } from 'ethers' import { gammaServiceUrl } from '../config' +import gammaCardsPages from './gammaCardsPages' export const fetchPackData = async (walletAddress, pack_number) => { // llamada a la api para que nos de la data a pasar en la llamada al contrato @@ -8,7 +9,6 @@ export const fetchPackData = async (walletAddress, pack_number) => { address: walletAddress, // user address packet_number: pack_number // numero de paquete que se esta abriendo } - console.log('gamma micro service body', body) const response = await fetch(gammaServiceUrl, { headers: { 'Content-Type': 'application/json' @@ -57,20 +57,31 @@ export const openPack = async (cardsContract, packNumber, packData, signature) = } } -export const getCardsByUser = async (cardsContract, walletAddress, pagination) => { +export const getCardsByUser = async (cardsContract, walletAddress) => { try { - console.log('called getCardsByUser') if (!cardsContract) return - const cardsArr = await cardsContract?.getCardsByUser(walletAddress) - console.log('cardsArr', cardsArr) - const cardsObj = pagination - console.log('cardsObj', cardsObj) - if (cardsArr && cardsArr.length > 0) { - for (let i = 0; i < cardsArr[0]?.length; i++) { - cardsObj.user[cardsArr[0][i]].stamped = true - cardsObj.user[cardsArr[0][i]].quantity = cardsArr[1][i] + const cardData = await cardsContract?.getCardsByUser(walletAddress) + let cardsObj = { ...gammaCardsPages } + + // Inicializa array + for (let i = 0; i <= 119; i++) { + cardsObj.user[i] = { + name: i.toString(), + stamped: false, + quantity: 0 } } + + // completa array con lo que tiene el usuario + for (let i = 0; i < cardData[0].length; i++) { + const cardId = cardData[0][i] + const quantity = cardData[1][i] + cardsObj.user[cardId] = { + stamped: quantity > 0, + quantity: quantity + } + } + return cardsObj } catch (e) { console.error({ e }) @@ -116,26 +127,26 @@ export const finishAlbum = async (cardsContract, walletAddress) => { } export const allowedToFinishAlbum = async (cardsContract, walletAddress) => { - const transaction = await cardsContract.testAddCards() - await transaction.wait() + // Hay 3 condicione sen el contrato para poder completarlo: + // 1. Que el usuario tengan un álbum: require(cardsByUser[msg.sender][120] > 0, "No tienes ningun album"); + // 2. Que haya un balance mayor a lo que se paga de premio: require(prizesBalance >= mainAlbumPrize, "Fondos insuficientes"); + // 3. Que el usuario tenga todas las cartas. + // Las 3 se validan en el contrato. La 1 y 2 también se validan aquí. La 3 es una condición requerida para llegar + // hasta ésta función, por lo que también es validada en el index. // require(cardsByUser[msg.sender][120] > 0, "No tienes ningun album"); const userHasAlbum = await cardsContract.cardsByUser(walletAddress, 120) - return userHasAlbum - /* - - require(prizesBalance >= mainAlbumPrize, "Fondos insuficientes"); + const prizesBalance = await cardsContract.prizesBalance() + const mainAlbumPrize = await cardsContract.mainAlbumPrize() + const prizeBalance = ethers.utils.formatUnits(prizesBalance, 18) + const albumPrize = ethers.utils.formatUnits(mainAlbumPrize, 18) - bool unfinished; - for(uint8 i;i<121;i++){ - if(cardsByUser[msg.sender][i] == 0) { - unfinished = true; - break; - } - cardsByUser[msg.sender][i]--; - } - - require(!unfinished, "Must complete the album"); - */ + // require(prizesBalance >= mainAlbumPrize, "Fondos insuficientes"); + const prizesBalanzGTAlbumPrice = (parseInt(prizeBalance) >= parseInt(albumPrize)) + const result = userHasAlbum && prizesBalanzGTAlbumPrice + + console.log('prizesBalanzGTAlbumPrice', userHasAlbum, prizeBalance, albumPrize, prizesBalanzGTAlbumPrice, result) + + return result } diff --git a/src/sections/Gamma/gammaCardsPages.js b/src/services/gammaCardsPages.js similarity index 100% rename from src/sections/Gamma/gammaCardsPages.js rename to src/services/gammaCardsPages.js